the first 2015 saigon wordpress meetup
TRANSCRIPT
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ì?
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?
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';
}
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