WordPress Cơ Bản

Hook là gì? Action Hook và Filter Hook trong WordPress

Tiếp tục với serie WordPress nâng cao, trong bài viết lần này, WpGuide đem lại cho bạn 2 kỹ thuật khá cơ bản dành cho việc lập trình với mã nguồn WordPress đó là Action Hook và Filter Hook.

1. Hook là gì?

Hook dịch từ tiếng anh ra nghĩa là móc câu, trong WordPress, hook có thể coi là danh sách các điểm đặc biệt trong hệ thống WordPress mà bạn có thể tùy ý bổ sung code thông qua hai hàm add_actionadd_filter mà WordPress cung cấp sẵn (bạn có thể hiểu là WordPress cung cấp những cái móc và bạn có thể móc những xử lý của mình vào đó). Mỗi hàm đại diện cho một nhóm hook chính:

  • Filter: liên quan đến xử lý nội dung.
  • Action: liên quan đến xử lý hành động.

Xem thêm: Các hook trong nhóm Filter và Action

Mỗi hook đều có tham số truyền vào khác nhau, hãy đọc kỹ hướng dẫn trước khi sử dụng một hook nào nhé.

action-filter

2. Action Hook

Action Hook là những hook liên quan đến xử lý sự kiện, ví dụ bạn muốn website xử lý một cái gì đó ở phần đầu trang (header) thì bạn có thể sử dụng hook wp_head, bạn sẽ dùng hàm add_action() để thêm đoạn xử lý của bạn vào:

add_action ( string $tag, callable $function_to_add, int $priority = 10, int $accepted_args = 1 );

Trong đó:

  • $tag: là tên của hook (bắt buộc có)
  • $function_to_add: là tên hàm bạn muốn bổ sung vào hook $tag (bắt buộc có)
  • $priority: độ ưu tiên, giá trị mặc định là 10, hàm nào có độ ưu tiên cao hơn sẽ được thực hiện trước
  • $accepted_args: tổng số các tham số mà hàm $function_to_add cần, không được vượt quá số tham số của hook (mặc định là 1)
READ  Cấu trúc Template và Template Tag trong WordPress

Ví dụ (bạn hãy thử viết đoạn code này vào file functions.php nhé):

add_action('wp_head','hook_javascript');

function hook_javascript() {

	$output = "<script> alert('Page is loading...'); </script>";

	echo $output;
}

Sau khi thực hiện đoạn code này, website của bạn trước khi load sẽ gọi hook wp_head và đoạn script bên trên sẽ được chạy, bình thường nếu theme của bạn không hỗ trợ hiển thị thì phải sử dụng một hàm do_action() để website thực hiện những action bạn đã add vào hook.

do_action('wp_head'); //Chèn dòng lệnh vào file header, trước tag </head> nếu theme của bạn chưa có hook này nhé.

Tất cả hệ thống hook đều quan trọng, nó giúp bạn chỉnh sửa sâu vào hệ thống WordPress mà không phá hỏng source code. Về hàm do_action(), bạn gọi nó trước hay sau hàm bạn muốn thêm vào đều được cả. Ngoài ra bạn có thể sử dụng hàm do_action() bên trên để tạo một hook riêng cho mình, ví dụ bạn muốn một hook có tên là wpguide_after_post thì bạn chỉ cần chèn đoạn code do_action(‘wpguide_after_post’) vào nơi bạn muốn rồi tiến hành add_action() như một hook bình thường.

2. Filter Hook

Đúng như tên gọi của nó, Filter Hook hoạt động như một bộ lọc nội dung, bạn muốn phần title bài viết có thêm tên mình, bạn muốn sửa lại độ rộng của ảnh thumbnail hay đơn giản là xóa bớt số ký tự hiển thị trong tóm tắt bài viết ngoài trang chủ, tất cả các thao tác này đều có thể thực hiện bằng một hàm đơn giản: add_filter()


add_filter ( string $tag, callable $function_to_add, int $priority = 10, int $accepted_args = 1 );

Trong đó:

  • $tag: là tên của hook (bắt buộc có)
  • $function_to_add: là tên hàm bạn muốn bổ sung vào hook $tag (bắt buộc có)
  • $priority: độ ưu tiên, giá trị mặc định là 10, hàm nào có độ ưu tiên cao hơn sẽ được thực hiện trước
  • $accepted_args: tổng số các tham số mà hàm $function_to_add cần, không được vượt quá số tham số của hook (mặc định là 1)
READ  Tìm hiểu Admin Panel: Posts

Ví dụ bạn muốn thay đổi độ dài đoạn văn bản của post được hiển thị ngoài trang chủ:


/* Change Excerpt length */
function wpg_custom_excerpt_length( $length ) {
 return 20;
}
add_filter( 'excerpt_length', 'wpg_custom_excerpt_length' );

Bản chất của việc làm này là bạn bổ sung vào hàm the_excerpt để cho giá trị hàm này trả về phải xử lý qua hàm của bạn nữa cho nên giá trị hàm the_excerpt sau đó sẽ có độ dài văn bản là 20 từ.

Với số lượng lớn các hook filter được cung cấp sẵn thì bạn có thể tha hồ tùy biến website theo phong cách riêng của mình. Cũng giống với Action Hook, chúng ta cũng có thể tạo Filter Hook riêng theo yêu cầu, bạn có thể dùng hàm apply_filters() ở nơi bạn muốn thực hiện filter hook của riêng mình.

Lời kết

Action và Filter Hook là hai kỹ thuật quan trọng nếu bạn muốn tìm hiểu sâu về WordPress, bạn cần nắm rõ được hai kỹ thuật này nếu muốn làm chủ mã nguồn WordPress, trong quá tình tìm hiểu nếu có khúc mắc gì bạn có thể để lại comment, mình sẽ giải đáp trong phạm vi hiểu biết của mình.

Hẹn gặp lại các bạn vào bài viết tới.

 

avatar
  Subscribe  
Notify of