Action hook và Filter hook trong wordpress (P1)
Bài đăng này đã không được cập nhật trong 6 năm
Hook là gì ?
- Hook giúp chúng ta gắn một số chức năng để thực thi những hành động mà chúng ta muốn mà không phải đụng và bất cứ thứ gì ở trong core của WP.
- Plugin là cách duy nhất là tương tác với Hook để thay đổi cách quá trình xử lý của WP.
- Hook cũng được sử dụng trong Core của WP.
- Wordpress có 2 kiểu Hook chính: Action hook và Filter hook.
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ì đoá với hệ thống WP.
- Xác định vị trí (Hook) để gắn Action đã viết.
Gắn Action vào Hook
- Để gắn một Action vào một vi trí (hook) nào đó chúng ta sẽ sử dụng hàm
add_action($tag, $function, $priority, $accepted_args)
- Tham số:
- $tag: Là tên của một action hook của WP (Wp có hơn 600 hooks).
- $function: Là tên Action mà mình viết để tương tác vào hệ thống WP
- $priority: Độ ưu tiên của Action.
- $accepted_args: Số lượng các tham số truy action hook sẽ được truyền vào hàm của bạn. Ví dụ
add_action('wp_footer', 'fr_myplugin_footer');
function fr_myplugin_footer() {
echo '<div>Chao mung ban den voi footer</div>';
}
Loại bỏ Action ra khỏi Hook
- Để loại bỏ một Action ra khỏi một vị trí (hook) nào đó chúng ta sẽ sử dụng hàm:
remove_action( $tag, $function_to_remove, $priority,$accepted_args );
- Tham số:
- $ tag - Là tên của một 'action hook' của WP (hơn 600 Hooks)
- $function - Tên Action để tương tác vào hệ thống
- $priority – Độ ưu tiên của Action
- $accepted_args - Số lượng các tham số truy action hook sẽ được truyền vào hàm. Ví dụ:
function fr_myplugin_css(){
$cssURL = plugins_url('/css/abc.css',__FILE__);
$css = '<link rel="stylesheet" type="text/css“
media="all" href="' . $cssURL . '" />';
echo $css;
}
add_action('wp_head', 'fr_myplugin_css', 20);
remove_action('wp_head', 'fr_myplugin_css', 20);
Sử dụng hàm loại bỏ Action
- Để loại bỏ một Action bất kỳ ra khỏi một vị trí (hook) kể cả Action đã có sẵn trong hệ thống WP
- Hàm remove_action() phải được sử dụng sau hàm add_action() thì mới có tác dụng.
- Nhiều trong số các action mặc định của WP được định nghĩa trong tập tin:
wp-includes/default-filters.php
VD loại bỏ action đã có sẵn trong hệ thống
remove_action('wp_head', 'rsd_link');
Loai bỏ tất cả Action
- Để loại bỏ tất cả Action ra khỏi một vị trí (hook) nào đó chúng ta sẽ sử dụng hàm:
remove_all_actions( $tag, $priority );
- Tham số:
- $tag - Tên của action hook
- $priority - Độ ưu tiên của action để loại bỏ. VD Loại bỏ tất cả action có sẵn của hệ thống trong Action Hook có tên 'wp_head'
remove_all_actions( 'wp_head' );
Loại bỏ tất cả Action có sẵn của hệ thống trong Action Hook có tên 'wp_head' và độ ưu tiên là 20
remove_all_actions( 'wp_head',20);
Kiểm tra sự tồn tại của Action trong Hook
- Để kiểm tra sự tồn tại của Action trong một Action Hook nào đó chúng ta sử dụng hàm
has_action( $tag, $function_to_check );
- Tham số:
- $tag - Tên của action hook
- $function_to_check - Tên của một hàm để kiểm tra xem nó có đã thêm vào hook chưa. VD Hàm sẽ trả về giá trị 1 hoặc true nếu trong Hook có gắn Action
echo '<br/>' . has_action('wp_head');
VD Hàm sẽ trả về giá trị 0 hoặc null nếu trong Hook không gắn Action
echo '<br/>' . has_action('wp_footer');
Các Action Hook thường được sử dụng
- plugins_loaded
- init
- admin_menu
- template_redirect
- wp_head ....
Tạo mới Action Hook
- Vì nhu cầu của website chúng ta cần tạo ra một Action Hook mới.
- Các Action Hook mới thường được gắn vào theme đang được sử dụng
- Chúng ta sẽ phải sử dụng 2 hàm có sẵn trong WP: là add_action() và do_action() để xây dựng Action Hook mới này. VD Tạo Action mới trong plugin
add_action('the_title_footer', 'the_title_footer_callback');
function the_title_footer_callback()
{
echo '<p>Hello word</p>';
}
function the_title_footer()
{
do_action('the_title_footer');
}
Sau đấy nhúng action vào theme mình đang sử dụng Mở tập tin /wp-content/themes/twentyten/footer.php thêm vào 2 dòng sau:
<?php the_title_footer(); ?>
<?php do_action('the_title_footer'); ?>
Và sau đó kết quả sẽ được hiển thị. VD Tạo Action mới có tham số
add_action('the_title_footer', 'the_title_footer_callback',20,2);
function the_title_footer_callback($courseName,$author)
{
echo '<p>Tranning ' . $courseName
. ' tai ' . $author . ' </p>';
}
function the_title_footer($courseName = 'Wordpress',$author = "FR")
{
do_action('the_title_footer',$courseName,$author);
}
Sau đấy nhúng action vào theme mình đang sử dụng Mở tập tin /wp-content/themes/twentyten/footer.php thêm vào 2 dòng sau:
<?php the_title_footer(); ?>
<?php do_action('the_title_footer', ' Action Hook', 'Trunghd'); ?>
Và cuối cùng chúng ta sẽ thấy kết quả ở phía FrontEnd
All rights reserved