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

0 0 đánh giá
Đánh giá bài viết
Theo dõi
Thông báo của
guest

0 Góp ý
Cũ nhất
Mới nhất Được bỏ phiếu nhiều nhất
Phản hồi nội tuyến
Xem tất cả bình luận