WordPress là phần mềm mã nguồn mở cho việc tạo lập website miễn phí và nhanh chóng, vì là phần mềm mã nguồn mở nên chúng ta có thể và được phép thay đổi cũng như bổ sung cấu trúc mã nguồn.
Trong bài viết này chúng ta sẽ cùng tìm hiểu về Hooks, Action và Filter trong lập trình WordPress là gì, cách dùng ra sao. Một số Action hooks và Filter hooks thường dùng nhất.
1. Hooks WordPress là gì?
Trong WordPress, hooks là danh sách các điểm nhấn (điểm móc) nằm trong hệ thống mã nguồn của WordPress, tại đây bạn có thể bổ sung các đoạn code thông qua hai hàm add_action và add_filter mà WordPress đã cung cấp sẵn. Chúng ta có hai nhóm hooks chính đó là filter và action.
Ví dụ:
Bạn muốn kiểm tra loại bỏ những đường link mà người quản trị đã cố tình thêm vào khi sửa bài viết thì sẽ sử dụng đến hook có tên là save_post, và nó thuộc nhóm action.
- Kiếm tiền Accesstrade, kiếm tiền tại nhà với Accesstrade.vn – Tiếp thị liên kết
- MegaURL – Rút gọn link kiếm tiền có giá cao tại Việt Nam
- Top những App kiếm tiền online trên điện thoại tốt nhất hiện nay
add_action('save_post', 'function_name', 10, 2);
Bạn muốn khi hiển thị nội dung bài viết ra ngoài frontend thì thêm một dòng chữ ở vị trí cuối cùng của content thì có thể sử dụng hook có tên là the_content, và nó thuộc nhóm filter.
add_filter( 'the_content', 'function_name', 1 );
Mỗi hook sẽ có các tham số truyền vào khác nhau, Ví dụ với hook the_title thì sẽ có hai tham số truyền vào đó là $title
và $id
.
2. Filter hooks trong WordPress?
Filter hooks liên quan đến xử lý nội dung dữ liệu, đặc điểm chung của các filter là mỗi hook sẽ trả về một nội dung nào đó, sử dụng hàm add_filter để bổ sung một hành động vào hook.
Hàm add_filter có cấu trúc như sau:
add_filter ( $tag, $function_to_add, $priority, $accepted_args )
Trong đó:
- $tag: là tên của filter hook
- $function_to_add là hàm callback muốn bổ sung vào
$tag
- $priority là mức độ ưu tiên của hàm callback, mức độ ưu tiên càng cao thì hàm callback đó sẽ được gọi trước. Giá trị mặc định là 10.
- $accepted_args là tổng số các tham số tham gia vào hàm callback và không được vượt quá tổng số của hook. Giá trị mặc định là 1
Ví dụ: Giả sử muốn khi in ra tiêu đề của các bài viết thì bổ sung thêm “ Tui có cách” ở cuối tiêu đề thì làm như sau.
Bạn mở file hook-filter.php
lên và code như sau(Tất nhiên không bắt buộc là phải đặt nó tại hook-filter.php
, có thể đặt bất cứ chỗ nếu chắc chán khi hiển thị kết quả nó sẽ gọi tới hàm này):
//Hàm bổ sung "tuicocach.com" váo cuối chuỗi tiêu đề
function add_string_to_title($content){
return $content . ' - Tui có cách';
}
//Đưa hàm add_string_to_title vào hook filter là the_title
add_filter("the_title", "add_string_to_title",10,1);
Trong đó:
- the_title là hook filter tiêu đề bài viết
- add_string_to_title là tên của hàm muốn bổ sung vào hook
the_title
.
Hook the_title
sẽ truyền tiêu đề của bài viết vào hàm add_string_to_title
và thực thi nó, sau đó lấy kết quả của hàm này trả về làm tiêu đề mới.
3. Action hooks trong WordPres?
Action hooks là danh sách các hook liên quan đến xử lý sự kiện. Ví dụ khi lưu một bài viết thì ta có hook save_post, khi người dùng comment thì có hook comment_post.
Để sử dụng được các Action hooks ta có hàm add_action, có cấu trúc như sau:
add_action ($tag, $function_to_add, $priority, $accepted_args )
Trong đó:
- $tag: là tên của Action hook
- $function_to_add là hàm callback muốn bổ sung vào $tag
- $priority là mức độ ưu tiên của hàm callback, mức độ ưu tiên càng cao thì hàm callback đó sẽ được gọi trước. Giá trị mặc định là 10.
- $accepted_args là tổng số các tham số tham gia vào hàm callback và không được vượt quá tổng số của hook. Giá trị mặc định là 1
Ví du: Khi lưu bài viết nếu bài viết ở trạng thái public thì hãy gửi email đến cho admin
Action hook lưu bài viết là save_post, hook này có ba tham số truyền vào đó là:
- $id: id bài viết đang lưu hoặc mới thêm
- $post: toàn bộ nội dung như title, content của bài viết
- $is_update: nếu TRUE tức hành động save post này là hành động update, ngược lại là hành động insert.
Bây giờ bạn mở file hook-action.php
lên và code như sau:
function send_email_public($id, $post){
//Viết code thực hiện gửi email ở đây
}
//Đưa hàm send_email_public vào hook action là wpcf7_before_send_mail
add_action('wpcf7_before_send_mail','send_email_public',11,2);
4. Các Hooks WordPress thông dụng nhất
Trong WordPress chúng ta có hơn tổng số là 1500 hooks, bao gồm cả các action hooks và filter hooks. Bảng dưới đây sẽ liệt kê một số hooks thường được dùng phổ biến nhất.
STT | Tên hooks | Kiểu hooks | Cấu trúc | Mục đích |
1 | admin_menu | action | do_action (‘admin_menu’, string $ context ) | Được sử dụng khi cần thêm một menu vào menu quản trị. |
2 | admin_enqueue_scripts | action | do_action (‘admin_enqueue_scripts’, string $ hook_suffix ) | Được sử dụng khi cần nhúng một script hoặc style vào trang quản trị. |
3 | admin_head | action | do_action (‘admin_head’, callback) | In tập lệnh hoặc dữ liệu vào head trang quản trị. |
4 | admin_init | action | do_action (‘admin_init’, callback) | Hooks này sẽ ngay lập tức được kích hoạt khi truy cập màn hình quản trị. |
5 | admin_bar_menu | action | do_action (‘admin_bar_menu’, WP_Admin_Bar $ wp_admin_bar ) | Đây là hook được sử dụng để thêm, bớt hoặc thao tác các mục trên thanh quản trị. |
6 | admin_email_check_interval | filter | apply_filters (‘admin_email_check_interval’, int $ period ) | Lọc khoảng thời gian chuyển hướng người dùng đến màn hình xác nhận email quản trị viên. |
7 | admin_email_confirm | action | do_action( ‘admin_email_confirm’, WP_Error $errors ) | Kích hoạt trước khi biểu mẫu xác nhận email quản trị viên. |
8 | ‘admin_email_confirm_form | action | do_action (‘admin_email_confirm_form’) | Kích hoạt bên trong các thẻ biểu mẫu quản trị-email-xác nhận-biểu mẫu, trước các trường ẩn. |
9 | admin_footer | action | do_action (‘admin_footer’, $data ) | In tập lệnh hoặc dữ liệu trong footer trang quản trị. |
10 | admin_footer_text | filter | apply_filters( ‘admin_footer_text’, string $text ) | Lọc văn bản được hiển thị trong chân trang quản trị. |
11 | admin_notices | action | do_action( ‘admin_notices’ ) | In thông báo trên màn hình quản trị. |
12 | admin_post | action | do_action( ‘admin_post’ ) | Kích hoạt yêu cầu đăng bài quản trị đã xác thực mà không có hành động nào được cung cấp. |
13 | ‘admin_print_scripts | action | do_action( ‘admin_print_scripts’ ) | Kích hoạt khi tập lệnh được in cho tất cả các trang quản trị. |
14 | admin_title | filter | apply_filters (‘admin_title’, string $ admin_title , string $ title ) | Lọc nội dung thẻ tiêu đề cho một trang quản trị. |
15 | admin_url | filter | apply_filters( ‘admin_url’, string $url, string $path, int|null $blog_id, string|null $scheme ) | Lọc URL khu vực quản trị. |
16 | admin_xml_ns | action | do_action( ‘admin_xml_ns’ ) | Kích hoạt bên trong thẻ header quản trị viên. |
17 | atom_author | action | do_action (‘atom_author’) | Kích hoạt ở cuối mỗi mục nhập của tác giả nguồn cấp dữ liệu Atom. |
18 | bloginfo_url | filter | apply_filters( ‘bloginfo_url’, string $output, string $show ) | Lọc URL được trả về bởi hàm get_bloginfo (). |
19 | request | filter | apply_filters( ‘request’, array $query_vars ) | Lọc mảng các biến truy vấn được phân tích cú pháp. |
20 | wp_enqueue_scripts | action | do_action( ‘wp_enqueue_scripts’ ) | Được sử dụng khi cần nhúng một script hoặc style vào trang người dùng. |
21 | wp_head | action | do_action( ‘wp_head’ ) | In tập lệnh hoặc dữ liệu vào head trang người dùng. |
22 | the_title | filter | apply_filters( ‘the_title’, string $title, int $id ) | Sử dụng để lọc tiêu đề bài đăng. |
23 | link_category | filter | apply_filters( ‘link_category’, string $cat_name ) | Sử dụng để lọc tên danh mục. |
24 | list_pages | filter | apply_filters( ‘list_pages’, string $title, WP_Post $page ) | Lọc tiêu đề danh sách trang. |
25 | list_cats | filter | apply_filters( ‘list_cats’, string $element, WP_Term|null $category ) | Lọc tiêu đề danh sách phân loại bài đăng. |