Bài viết này thực hiện (hoặc lụm bài về đăng câu like từ các trang khác) bởi Việt Lâm Coder một YOUTUBER có tâm và đẹp trai siêu cấp vô địch zũ trụ.
Bạn đã từng nghe khái niệm lập trình hướng sự kiện trong các Framework như Zend, Laravel, Phalcon? Hay thậm chí trong Javascript cũng có khái niệm về lập trình sự kiện. Vậy thì trong WordPress có tồn tại khái niệm này không? Để trả lời câu hỏi này thì trong bài này chúng ta sẽ tìm hiểu về Hooks trong WordPress nhé.
Hooks có thể được coi là danh sách các điểm đặc biệt trong hệ thống WordPress mà ở đó 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.
- Filter: Là các điểm liên quan đến xử lý lấy nội dung
- Action: Là các điểm liên quan đến xử lý hành động
Mỗi hook sẽ có các tham số truyền vào khác nhau nên để chắc chắn thì trước khi sử dụng một hook nào đó bạn hãy lên trang codex để tham khảo nhé. Ví dụ với hook the_title thì sẽ có hai tham số truyền vào đó là $title
và $id
. Trường hợp trang codex không giải thích có bao nhiêu tham số thì bạn hãy tự mình debug bằng cách truyền tham số vào và kết hợp với hàm var_dump
để in ra xem nội dung tham số đó là gì.
Trước khi tìm hiểu Action và Filter thì bạn tạo cho tôi hai file hook-filter.php
và hook-action.php
nằm trong thư mục includes mà ở bài plugin là gì chúng ta xây dựng.
Tiếp theo bạn vào file wp-learn.php
bổ sung hai đoạn code require hai file đó vào như sau:
1
2
|
require 'includes/hook-filter.php' ; require 'includes/hook-action.php' ; |
2. Filter Hooks
Filter hooks được ví như một bộ lọc trong WordPress vì các hook này liên quan đến xử lý lấy nội dung. Hiện nay có rất nhiều loại filter và bạn có thể xem tại đây. Đặc điểm chung của loại này là mỗi hook sẽ trả về một nội dung nào đó, và bạn sử dụng hàmadd_filter để bổ sung dữ liệu vào nội dung trả về đó.
Hàm add_filter
có cấu trúc như sau:
1
|
add_filter ( $tag , $function_to_add , $priority = 10, $accepted_args = 1 ) |
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ử mình muốn khi in ra tiêu đề của các bài viết thì bổ sung thêm từ freetuts.net
ở trước thì làm như sau.
Bạn mở file hook-filter.php
lên và code như sau:
1
2
3
4
5
6
7
8
|
// Hàm bổ sung chữ freetuts.net vào chuỗi function add_string_to_title( $title ) { return 'freetuts.net - ' . $title ; } // Đưa hàm add_string_to_title vào hook filter the_title add_filter( 'the_title' , 'add_string_to_title' , 10, 1); |
Trong đó:
- the_title: Ta gọi là hook filter dùng để lấy tiêu đề bài viết
- add_string_to_title: Ta gọi là hàm callback, hàm này sẽ xử lý nội dung CẦN trả về của hàm
the_title
trước khi nó trả về. Trong hàmadd_string_to_title
bạn sẽ thắc mắc biến$title
ở đâu ra phải không nào 🙂 biến này chính là tiêu đề mà hookthe_title
truyền vào (xem danh sách tham số của the_title).
Luồng xử lý như sau: Gả sử hàm the_title
có nội dung như sau:
1
2
3
4
5
6
7
|
function the_title() { $title = 'Nội dung lấy từ CSDL' ; // Trả về return $title ; } |
Lúc này nếu ta sử dụng hàm add_filter
để bổ sung hàm callback add_string_to_title
vào the_title
thì nó sẽ hoạt động dạng như sau:
1
2
3
4
5
6
7
8
9
10
|
function the_title() { $title = 'Nội dung lấy từ CSDL' ; // Vì có bổ sung hàm callback add_string_to_title nên lúc này ta phải duyệt title trước khi trả về $title = add_string_to_title( $title ); // Trả về return $title ; } |
Vậy thực chất khi bạn bổ sung một hành động nào đó vào filter thì tức là bạn bổ sung một đoạn code xử lý trước khi filter đó trả về quả về.
3. Action Hooks
Action hooks là danh sách các hook liên quan đến xử lý sự kiện. Ví dụ khi bạn 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.
Tất cả các hooks đều quan trọng vì nó giúp chúng ta xâm nhập vào hệ thống core mà không cần phải phá source của WordPress. Ví dụ bạn muốn khi người dùng bình luận thì gửi email thông báo thì bạn sẽ viết một hàm gửi mail và đưa nó vào hook comment_post.
Ta sử dụng hàm add_action để bổ sung hành động vào Action Hook. Hàm này có các tham số như sau:
1
|
add_action ( $tag , $function_to_add , $priority = 10, $accepted_args = 1 ) |
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í 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.
Ok bây giờ bạn mở file hook-action.php
lên và code như sau:
1
2
3
4
5
6
7
8
9
10
11
|
// Hàm bổ sung chữ freetuts.net vào chuỗi function send_email_public( $id , $post ) { if ( $post ->post_status == 'public' ){ // Thực hiện gửi email // Vì là ví dụ nên mình không gửi email } } // Đưa hàm add_string_to_title vào hook filter the_title add_action( 'save_post' , 'send_email_public' , 11, 2); |
Quá đơn giản phải không các bạn 🙂
4. Lời kết
Bài này tương đối khó hiểu vì đây chính là nội dung trọng tâm và quan trọng nhất mà ban phải biết khi lập trình WordPress, vì vậy bạn phải hiểu nguyên lý hoạt động của nó thì sau này bạn mới có thể code những website có tính sáng tạo được.
Qua bài này mình đã giải thích khái niệm Hooks là gì và hai nhóm hooks trong WordPress đó là Action và Filter, hy các ví dụ kèm với các lời giải thích sẽ giúp bạn mở rộng kiến thức của mình và từ đó ngày càng yêu mến WordPress 🙂
Nguồn: freetuts.net
Bài viết này thực hiện (hoặc lụm bài về đăng câu like từ các trang khác) bởi Việt Lâm Coder một YOUTUBER có tâm và đẹp trai siêu cấp vô địch zũ trụ.