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: vukhanh2212@gmail.com
 Face group: Vietnam Wordpress Programming
Nội dung trình bày
A. 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ển
A1. 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ển
A3. 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ển
A3. 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ụ 2
class 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ụ 2
class 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 menu
public 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_Sanitizin
g_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

The First 2015 Saigon WordPress Meetup

  • 1.
    Chia sẻ kinhnghiệm nghiên cứu, phát triển các thành phần mở rộng trong WordPress CMS
  • 2.
    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: vukhanh2212@gmail.com  Face group: Vietnam Wordpress Programming
  • 3.
    Nội dung trìnhbày A. 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
  • 5.
    A. Nghiên cứuvà phát triển A1. 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 đó
  • 6.
    A. Nghiên cứuvà phát triển A3. 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…
  • 7.
    A. Nghiên cứuvà phát triển A3. 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
  • 8.
    Bước 5: Tạocá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 đó
  • 9.
  • 10.
    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
  • 11.
    Q2: Có baonhiê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
  • 12.
    Q3: Tạo Pluginnhư 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/ */
  • 13.
    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
  • 14.
    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 …
  • 15.
    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' );
  • 16.
    Q5: Action -Hook Action?  Ví dụ 2 class ZendvnMyPlugin{ public function __construct(){ add_action('wp_footer', array($this, 'thietlap')); } public function thietlap(){ echo ‘Su dung Class cho Plugin'; } } new ZendvnMyPlugin();
  • 17.
    Q6: Filter- HookFilter?  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
  • 18.
    Q6: Filter- HookFilter?  Ví dụ 1 add_filter( 'the_title', 'zendvn_myplugin_post_title’); function zendvn_myplugin_post_title() { return 'New title for Post'; }
  • 19.
    Q6: Filter- HookFilter?  Ví dụ 2 class ZendvnMyPlugin{ public function __construct(){ add_filter( 'the_title', array($this, 'thietlap')); } public function thietlap(){ return 'New title for Post'; } } new ZendvnMyPlugin();
  • 20.
    Q7: Tạo menutrong Admin?
  • 21.
    Q7: Tạo menutrong Admin?  Thêm menu vào Dashboard menu public 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'; }
  • 22.
    Q8: Tạo Formtrong Admin?
  • 23.
    Q9: Tạo Widgettrong Backend?
  • 24.
    Q10: Hiển thịWidget ngoài FrontEnd?
  • 25.
    Q11: Thêm phầntử cho category? Custom Taxonomy Form
  • 26.
    Q12: Thêm phầntử cho Post? Metabox
  • 27.
    Q13: Bổ xungcột hiển thị trong All Posts
  • 28.
  • 29.
  • 30.
    Q17: Tạo vàhiển thị ShortCode?
  • 31.
    Q18: Tương tácvớ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.
  • 32.
    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
  • 33.
    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
  • 34.
    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..
  • 35.
    Các nguồn tàiliệ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  …
  • 37.
    B. Khó khăntrong 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.
  • 39.
    C. Bảo mậtcho 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
  • 40.
    C. Bảo mậtcho 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
  • 41.
    C. Bảo mậtcho 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_Sanitizin g_and_Escaping_User_Data
  • 42.
    C. Bảo mậtcho 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
  • 44.
    D. Tối ưucode 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()
  • 45.
    D. Tối ưucode 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