Bài 05: Hook Action trong WordPress

Hook Action – Plugin chỉ có một cách duy nhất là tương tác với Hook để thay đổi cách quá trình xử lý của WordPress. Hungshare.com sẽ hướng dẫn các bạn chi tiết trong bài học này.

Hook Action trong WordPress

I. Giới thiệu về Hook Action

1. Hook là gì?

Trong WordPress, Hook là cơ chế cho phép lập trình viên “kết nối” tới một số sự kiện hoặc hành động (trong các tệp PHP của WordPress) và thực hiện các thao tác tùy ý khi các sự kiện hoặc hành động đó được kích hoạt. Plugin chỉ có một 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

Các hook được chia thành 2 loại: Action hook và Filter hook.

  • Action hook: là các điểm trong quá trình thực thi của WordPress mà các plugin hoặc theme có thể “kết nối” vào để thực hiện các hành động của mình. Ví dụ: hook vào sự kiện khi một bài viết được đăng, hook vào sự kiện khi đăng nhập vào trang quản trị…
  • Filter hook: là các điểm trong quá trình thực thi của WordPress mà các plugin hoặc theme có thể “kết nối” vào để thay đổi hoặc tùy chỉnh các giá trị trả về của WordPress. Ví dụ: thay đổi đoạn văn bản trong bài viết, thay đổi hình ảnh đại diện của người dùng…

Sử dụng hook là một trong những cách tiếp cận quan trọng để mở rộng và tùy chỉnh WordPress một cách linh hoạt và dễ dàng.

2. Action là gì?

Action trong WordPress là một hàm được viết bằng PHP trong Plugin, được sử dụng để thực hiện một công việc cụ thể với hệ thống WordPress.

Để gắn một Action vào hệ thống WordPress, ta sử dụng hàm add_action() có sẵn trong WordPress. Hàm này cho phép chúng ta gắn một Action vào một vị trí cụ thể trên hệ thống WordPress thông qua một Hook. Việc xác định vị trí (Hook) để gắn Action đã viết của chúng ta là rất quan trọng, vì nó sẽ quyết định khi nào Action sẽ được thực hiện trong quá trình xử lý của WordPress.

[Bài viết được đăng tại hungshare.com]

II. Thao tác với Hook Action trong WordPress

1. Gắn Action vào Hook

Để gắn một Action vào một vị 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 (hơn 600 Hooks)
  • $function – Tên Action mà bạn viết để 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 của bạn.

Ví dụ:

 function hungshare_myplugin_new_data(){

      echo '<div>Chào mừng các bạn đến với khoá học lập trình WordPress miễn phí của 
<a href="https://www.hungshare.com">HungShare</a></div>';
}

add_action('wp_footer', 'hungshare_myplugin_new_data' );

2. 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 mà bạn viết để 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 của bạn.

Ví dụ:

function hungshare_myplugin_new_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', 'hungshare_myplugin_new_css',20);
remove_action('wp_head', 'hungshare_myplugin_new_css',20);

3. 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 WordPress

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

Ví dụ:

Loại bỏ một Action có sẵn của hệ thống
remove_action('wp_head', 'rsd_link');

[Bài viết được đăng tại hungshare.com]

4. Loại 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ỏ.

Ví dụ:

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);

5. Kiểm tra sự tồn tại 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.

Ví dụ:

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');
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');

III. Các Action Hook thường sử dụng

  • plugins_loaded
  • init
  • admin_menu
  • template_redirect
  • wp_head

Trong phần nâng cao chúng ta sẽ nghiên cứu kỹ luồng và thứ tự chạy của các Action Hook trong chức năng như của WordPress.

[Bài viết được đăng tại hungshare.com]

1. Tạo Action Hook mới

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.

Ví dụ 1: Tạo Action hook mới

Tạo một Action Hook mới trong Plugin

add_action('new_action_hook', 'new_action_callback');

function new_action_callback(){
    echo '<p>Khoa hoc lap trinh WordPress tai HungShare</p>';
}
function the_new_action(){
    do_action('new_action_hook');
}
Nhúng Action Hook mới vào theme đang sử dụng 
Mở tập tin /wp-content/themes/twentyten/footer.php thêm vào 2 dòng sau <?php the_new_action(); ?> <?php do_action('new_action_hook'); ?> Sau đó chúng ta chạy thử ở FrontEnd sẽ thấy kết quả

Ví dụ 2: Tạo Action Hook mới có tham số

Tạo một Action Hook mới trong Plugin

add_action('new_action_hook', 'new_action_callback',20,2);
function new_action_callback($courseName,$author){
    echo '<p>Khoa hoc lap trinh ' . $courseName. ' tai ' . $author . ' </p>';
}

function the_new_action($courseName = 'Wordpress',$author = "HungShare"){
    do_action('new_action_hook',$courseName,$author);
}

Nhúng Action Hook mới vào theme đang sử dụng

Mở tập tin /wp-content/themes/twentyten/footer.php thêm vào 2 dòng sau:
<?php the_new_action(); ?>
<?php do_action('new_action_hook','ZF 2x','HungShare'); ?>
Sau đó chúng ta chạy thử ở FrontEnd sẽ thấy kết quả

2. Các lưu ý về Action Hook

  • Xác định Hook: Trước khi gắn một Action vào Hook, bạn cần phải xác định Hook mà bạn muốn sử dụng. WordPress cung cấp nhiều Action Hook khác nhau, vì vậy hãy chọn một Hook phù hợp với nhu cầu của bạn.
  • Thứ tự của các Action: Các Action được gắn vào cùng một Hook sẽ được thực hiện theo thứ tự mà chúng được gắn vào Hook. Vì vậy, hãy đảm bảo rằng các Action của bạn được sắp xếp đúng thứ tự để đảm bảo tính chính xác và hiệu quả của Plugin.
  • Tránh gắn quá nhiều Action: Khi gắn quá nhiều Action vào một Hook, đặc biệt là trong các trường hợp nhiều Plugin sử dụng cùng một Hook, có thể gây ra xung đột và làm chậm tốc độ tải trang của website. Vì vậy, hãy đảm bảo rằng Plugin của bạn chỉ gắn những Action cần thiết.
  • Tham số của Action: Các Action Hook có thể có các tham số khác nhau, vì vậy hãy đảm bảo rằng bạn đang sử dụng đúng số lượng và kiểu tham số cho từng Action.
  • Đảm bảo tính tương thích: Trước khi phát hành Plugin của mình, hãy đảm bảo rằng nó tương thích với các phiên bản WordPress mới nhất và các Plugin khác mà người dùng có thể sử dụng.

Bài học khác

Đánh giá bài viết

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *