12/08/2018, 17:07

Action hook và Filter hook trong wordpress (P1)

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