the first 2015 saigon wordpress meetup

45
Chia sẻ kinh nghiệm nghiên cứu, phát triển các thành phần mở rộng trong WordPress CMS

Upload: khanhpham

Post on 14-Jul-2015

299 views

Category:

Technology


3 download

TRANSCRIPT

Chia sẻ kinh nghiệm nghiên cứu, phát triển các thành phần mở rộng trong WordPress CMS

Tự giới thiệu Họ tên: Phạm Vũ Khánh - Năm sinh: 1978

Kinh nghiệm: Nghiên cứu và làm việc trong lĩnh vực thiết kế và lập trình Website từ 1999

Các vị trí đã từng đảm nhận: Developer, Designer, Leader, BA, R&D manager, PM, IT manager…

Công việc hiện tại: CEO & Founder of ZendVN

Điện thoại: 090 889 33 26

Email: [email protected]

Face group: Vietnam Wordpress Programming

Nội dung trình bàyA. Cách nghiên cứu và phát triển WordPress

B. Khó khăn trong quá trình nghiên cứu WordPress

C. Cách thức căn bản bảo mật cho WordPress plugin

D. Tối ưu code khi viết plugin

A. Nghiên cứu và phát triểnA1. Nghiên cứu là gì?

Nghiên cứu là một quá trình thu thập và phân tích thông tin nhằm gia tăng sự hiểu biết của chúng ta về một chủ đề hay một vấn đề

A2. Nghiên cứu gồm bao nhiêu bước?

Đặt câu hỏi, thu thập dữ liệu để trả lời cho câu hỏi, và trình bày câu trả lời cho câu hỏi đó

A. Nghiên cứu và phát triểnA3. Nghiên cứu & phát triển WordPress như thế nào?

Bước 1: Cài đặt thành công WordPress

Bước 2: Sử dụng thành thạo WordPress CMS

Post, Page, Category, Widget, Theme…

Bước 3: Cài đặt và sử dụng các Plugin thông dụng

ContactForm 7, Woocommerce, Social…

A. Nghiên cứu và phát triểnA3. Nghiên cứu & phát triển WordPress như thế nào?

Bước 4: Xây dựng các loại website

Blog, Company, News, Shopping…

Bước 5: Tạo các thành phần mở rộng mới cho WP

Plugin, Widget, Shortcode, Theme

Bước 6: Phát triển Theme

Bước 5: Tạo các thành phần mở rộng mới

Đặt câu hỏi

Thu thập dữ liệu để trả lời cho câu hỏi

Trình bày câu trả lời cho câu hỏi đó

Q1: Plugin là gì?

Q1: Plugin là gì?

Là những tập tin chứa mã PHP

Giúp mở rộng hoặc thay đổi nhưng chức năng có sẵn trong WP

Plugin có thể rất đơn giản hoặc rất phức tạp

Không có bất kỳ giới hạn nào cho Plugin

Download Plugin tại www.wordpress.org

Q2: Có bao nhiêu kiểu Plugin?

Active: đã kích hoạt

Inactive: chưa kích hoạt

Must-Use: phải sử dụng

Drop-in: thay thế Core của WP

Q3: Tạo Plugin như thế nào?

Tạo tập tin PHP trong thư mục /wp-content/plugins

Nội dung tập tin PHP<?php

/*

Plugin Name: ZendVN Myplugin

Plugin URI: http://www.zend.vn/

Description: Huong dan lap trinh Plugin can ban.

Author: KhanhPham

Version: 1.0

Author URI: http://www.zend.vn/

*/

Q4: Hook là gì?

Hook là gì?

Hook là những vị trí nằm trong hệ thống WP.

Hook giúp Plugin tương tác vào hệ thống WP mà không phải thay đổi lõi của WP.

Có bao nhiêu loại Hook?

Có 2 loại Hook đó là Hook Action và Hook Filter

Q5: Action - Hook Action?

Action là gì?

Action là một hàm được viết bằng PHP trong Plugin

Gắn Action vào hệ thống WP thông qua hàm có sẳn add_action()

Action được viết ra để thực hiện một điều gì đó với hệ thống WP

Ví dụ: thêm widget, menu, tập tin CSS, Javascript, widget …

Q5: Action - Hook Action?

Ví dụ 1

function zendvn_myplugin_new_data(){

echo '<div>Chao mung cac ban </div>';

}

add_action('wp_footer', 'zendvn_myplugin_new_data' );

Q5: Action - Hook Action?

Ví dụ 2class ZendvnMyPlugin{

public function __construct(){

add_action('wp_footer', array($this, 'thietlap'));

}

public function thietlap(){

echo ‘Su dung Class cho Plugin';

}

}

new ZendvnMyPlugin();

Q6: Filter- Hook Filter?

Filter là gì?

Filter là một hàm được viết bằng PHP trong Plugin

Gắn Filter vào hệ thống WP thông qua hàm có sẳn add_filter()

Filter được viết ra để thực hiện lọc dữ liệu input và output trong hệ thống WP

Q6: Filter- Hook Filter?

Ví dụ 1

add_filter( 'the_title', 'zendvn_myplugin_post_title’);

function zendvn_myplugin_post_title() {

return 'New title for Post';

}

Q6: Filter- Hook Filter?

Ví dụ 2class ZendvnMyPlugin{

public function __construct(){

add_filter( 'the_title', array($this, 'thietlap'));

}

public function thietlap(){

return 'New title for Post';

}

}

new ZendvnMyPlugin();

Q7: Tạo menu trong Admin?

Q7: Tạo menu trong Admin?

Thêm menu vào Dashboard menupublic function settingMenu() {

add_dashboard_page('My Dashboard title','My Dashboard',

'manage_options',

'zendvn-mp-my-dashboard',

array($this,'settingPage'));

}

public function settingPage(){

require_once ZENDVN_MP_VIEW_DIR . '/setting.php';

}

Q8: Tạo Form trong Admin?

Q9: Tạo Widget trong Backend?

Q10: Hiển thị Widget ngoài FrontEnd?

Q11: Thêm phần tử cho category?

Custom Taxonomy Form

Q12: Thêm phần tử cho Post?

Metabox

Q13: Bổ xung cột hiển thị trong All Posts

Q14: Tạo Custom Post Types

Q15: Custom Taxonomies

Q17: Tạo và hiển thị ShortCode?

Q18: Tương tác với database?

Tương tác với các bảng nằm ngoài hệ thống WP

Sử dụng đối tượng global $wpdb;

Tương tác với các bảng nằm trong hệ thống WP

Sử dụng một số hàm có sắn trong WP để thêm, xóa, sửa.

VD: add_option() – update_option() …

Để lấy dữ liệu và hiển thị thì dùng đối tượngWP_Query.

Q19: Một số vấn đề khác cần quan tâm.

Transients API

Tạo cache ;

The Loop &Custimizing the Loop

Hỗ trợ lấy dữ liệu và hiển thị thông qua đối tượng WP_Query()

Global Variables

Những biến toàn cục của hệ thống WP

Q19: Một số vấn đề khác cần quan tâm.

JavaScript &Ajax trong WordPress

Cách sử dụng hàm hộ trợ JavaScript và Ajax của WP

Template Tags

Tập hợp các hàm hỗ trợ hiển thị dữ liệu thông qua The Loop và đối tượng WP_Query

Các hàm này rất quan trọng trong quá trình xây dựng Theme cho WP

Q20: Các vấn đề liên quan đến theme.

Các kiến thức cần thiết để xây dựng Theme

Tạo Child Theme từ một Theme có sẵn

Xây dựng các Widget và Plugin đi kèm với Theme

Tạo các vùng hiển thị Widget

Tạo các vùng hiển thị các Menu

Xây dựng hệ thống chỉnh sửa giao diện và nội dung cho Theme (Admin -> Appearance -> Customize)

Tạo giao diện cho Page, Post Type, Custom Post, Custom Taxonomy..

Các nguồn tài liệu hữu ích

https://codex.wordpress.org

https://wordpress.org/plugins/

https://wordpress.org/themes/

http://www.youtube.com/

http://www.lynda.com/ (torrentz.eu)

http://tutsplus.com/ (torrentz.eu)

http://www.wpbeginner.com/

http://thachpham.com

B. Khó khăn trong quá trình nghiên cứu

1. Wordpress là một CMS

2. Wordpress được xây dựng trên 2 kiểu lập trình Function và OPP

3. Các function được gọi ở mọi nơi trong hệ thống

4. Quá nhiều Hook để chúng ta tương tác vào luồng xử lý của WP

5. Tài liệu và video training về WP rất nhiều nhưng đa phần ở dạng căn bản.

C. Bảo mật cho WordPress

1. Chỉ sử dụng Plugin và Theme ở các nguồn đáng tin cậy

2. Không nên sử dụng các Theme (premium) được chia sẽ miễn phí trên mạng

3. Nên sử dụng các Plugin có thu phí để tránh các lỗi bảo mật ở các Plugin miễn phí chưa được kiểm tra kỹ

4. Nên trang bị kiến thức về HTML, CSS, JavaScript, PHP

C. Bảo mật cho WordPress

5. Biết lập trình WordPress

6. Sử dụng hàm wp_nonce_url() khi tạo link cho một hành động quan trọng nào đó. (Ví dụ như link để xóa một phần tử nào đó)

7. Sử dụng hàm wp_nonce_field() để tạo một số trường ẩn cho các Form gửi dữ liệu

C. Bảo mật cho WordPress

8. Sử dụng hàm current_user_can() để kiểm tra quyền hạn của User trước khi thực hiện một hành động nào đó (Ví dụ: thêm, xóa, sửa dữ liệu)

9. Kiểm tra và làm sạch dữ liệu trước khi lưu vào database (Data Validation and Sanitization). Các hàm hỗ trợ xem tại http://codex.wordpress.org/Validating_Sanitizing_and_Escaping_User_Data

C. Bảo mật cho WordPress

10. Khi tạo các câu truy vấn bằng đối tượng $wpdb thì sử dụng cùng phương thức $wpdb->prepare() để tránh các lỗi SQL Injection

11. Cập nhật liên tục các phiên bản mới của WordPress và Plugin (đáng tin cậy) để hệ thống an toàn hơn.

12. Backup dữ liệu thường xuyên

D. Tối ưu code khi viết Plugin

1. Tạo tiền tố cho các Plugin

2. Nên xây dựng Plugin theo kiểu thư mục để dễ mở rộng sau này

3. Nên xây dựng các Plugin theo kiểu OOP để dễ dàng nâng cấp và hạn chế việc đụng chạm mã với các Plugin khác.

4. Kiểm tra điều kiện trước khi sử dụng phương thức add_action() hoặc add_filter()

D. Tối ưu code khi viết Plugin

5. Kiểm tra điều kiện trước khi thêm tập tin css, javascript vào hệ thống WP

6. Xây dựng các thư viện hàm thường xuyên được dùng trong các Plugin. (Ví dụ thư viện tạo các phần tử Input cho Form)

7. Kiểm tra điều kiện trước khi sử dụng các hàm require() và include()

8. Tối ưu các cấu truy vấn SQL khi sử dụng đối tượng $wpdb