Trong bài hôm nay, các bạn sẽ có cái nhìn tổng quát về hệ thống hooks trong wordpress. WordPress được xây dựng từ một thư viện Hooks khổng lồ, hầu như trong khi thiết kế wordpress bạn cũng phải sử dụng đến hook. Hooks được hiểu là các hàm (function), dùng để nhóm các hàm lại. ví dụ đơn giản: để giải quyết một vấn đề bạn có thể chia tách làm nhiều hàm và kết hợp gọi chúng, nhằm thiết kế cấu trúc này wordpress đã xây dựng ra khai niệm hooks để liên kết 1 hook với nhiều function.
Có 2 loại hooks là action và filter. Tất cả các hooks được tạo ra thì lưu ở biến toàn cục $wp_filter
có kiểu mảng mà keys củ nó là tên hook (action và filter).
Filters
Hệ thống Filter bao gồm các hàm của wordpress và của bạn tạo thêm. Khác với action, filter có thể trả về giá trị.
Để đăng ký một filter bạn sử dụng hàm add_filter:
add_filter( $tag, $function_to_add, $priority, $accepted_args );
Trong đó:
- $tag: tên filter
- $function_to_add: tên hàm của filter, nó được gọi khi sử dụng.
- $priority: một filter có thể chứa nhiều hàm, chỉ định thứ tự hàm này được gọi
Gọi filter và truyền tham số cho nó. WordPress có filter img_caption_shortcode
dùng để tạo caption image, đoạn code sau đây ta truyền 3 tham số vào filter img_caption_shortcode
.
// Allow plugins/themes to override the default caption template. $output = apply_filters('img_caption_shortcode', '', $attr, $content); if ( $output != '' ) return $output;
Tạo nhiều hàm sử lý cho 1 filter.
add_filter('myfilter','myfun1',3); add_filter('myfilter','myfun2',1); add_filter('myfilter','myfun3',2); function myfun1(){ } function myfun2(){ } function myfun3(){}
Khi gọi myfilter thì gọi 3 hàm trên của filter theo thứ tự: myfun2,myfun3,myfun2.
apply_filters('myfiter');
Các ví dụ khác về sử dụng filters:
Custom dynamic sidebar, tạo hàm riêng thay vì sử dụng hàm lấy sidebar dynamic_sidebar
.
function mytheme_sidebar($name) { $name = apply_filters('mytheme_sidebar', $name); get_sidebar($name); } //Then use your own filter to modify the sidebar add_filter('mytheme_sidebar', 'mytheme_custom_sidebar'); function mytheme_custom_sidebar($name) { return is_user_logged_in() ? 'loggedin' : $name; }
Lưu ý: tất cả các tên hooks cần phải được viết thường mới hoạt động chính xác.
Action
Liên kết action với hàm bạn sử dụng add_action()
. Cũng giống như filter 1 action có thể liên kết với nhiều hàm, và tất cả các hàm của action được gọi khi bạn gọi do_action(‘your-action-name’)
Ví dụ sau tạo custom action, chèn đoạn sau vào functions.php
/* a custom action hook */ /* * 1. Create your own custom action hook named 'the_action_hook' * with just a line of code. Yes, it's that simple. * * The first argument to add_action() is your action hook name * and the second argument is the name of the function that actually gets * executed (that's 'callback function' in geek). * * In this case you create an action hook named 'the_action_hook' * and the callback function is 'the_action_callback'. */ add_action('the_action_hook', 'the_action_callback'); /* * 2. Declare the callback function. It prints a sentence. * Note that there is no return value. */ function the_action_callback() { echo '<p>WordPress is nice!</pre></p>'; } /* * 3. When you call do_action() with your action hook name * as the argument, all functions hooked to it with add_action() * (see step 1. above) get are executed - in this case there is * only one, the_action_callback(), but you can attach as many functions * to your hook as you like. * * In this step we wrap our do_action() in yet another * function, the_action(). You can actually skip this step and just * call do_action() from your code. */ function the_action() { do_action('the_action_hook'); }
Đến đây bạn đã hiểu về cách hoạt động và sử dụng hooks trong wordpress rồi chứ. Chúc các bạn học tập tốt.
Nếu bạn thích bài viết này, hãy ủng hộ chúng tôi bằng cách đăng ký nhận bài viết mới ở bên dưới và đừng quên chia sẻ kiến thức này với bạn bè của bạn nhé. Bạn cũng có thể theo dõi blog này trên Twitter và Facebook
Liên hệ
Công ty chuyên Thiết kế website uy tín nhất Miền Bắc: http://vinastar.net
Hotline tư vấn: 0989 48 3456
Nguồn: Sưu tầm trên internet