+3

Action hook và Filter hook trong wordpress (P1)

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ố:
  1. $tag: Là tên của một action hook của WP (Wp có hơn 600 hooks).
  2. $function: Là tên Action mà mình viết để tương tác vào hệ thống WP
  3. $priority: Độ ưu tiên của Action.
  4. $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ố:
  1. $ tag - Là tên của một 'action hook' của WP (hơn 600 Hooks)
  2. $function - Tên Action để tương tác vào hệ thống
  3. $priority – Độ ưu tiên của Action
  4. $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ố:
  1. $tag - Tên của action hook
  2. $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ố:
  1. $tag - Tên của action hook
  2. $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

  1. plugins_loaded
  2. init
  3. admin_menu
  4. template_redirect
  5. 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()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

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí