LẬP TRÌNH PLUGIN
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
MỚI CẬP NHẬT

Bài 04: Tìm hiểu Hooks , Action và Filter trong WordPress

Trong bài này chúng ta sẽ tìm hiểu hook là gì, action là gìfilter là gì trong WordPress, đây là ba khái niệm bạn sẽ gặp rất nhiều trong quá trình học lập trình WordPress nâng cao như làm theme và plugins.

test php

banquyen png
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

Bạn đã từng nghe khái niệm lập trình hướng sự kiện trong các Framework như Zend, Laravel, Phalcon rồi phải không nào? Hay thậm chí trong Javascript cũng có khái niệm về lập trình sự kiện. Vậy thì trong WordPress có tồn tại khái niệm này không?

Thực ra WordPress chỉ là một phần mềm chạy trên nền web nên sự kiện của nó chính là các điểm nhấn trong quá trình biên dịch mã nguồn, và bạn muốn can thiệp vào những điểm nhấn đó thì phải sử dụng đến các API của hooks.

Hãy đọc bài WordPress API nếu bạn chưa biết về nó.

Bài viết này được đăng tại [free tuts .net]

1. Hooks là gì?

Trong WordPress, hooks là danh sách các điểm nhấn (điểm móc) nằm trong hệ thống mã nguồn của WordPress, tại đây bạn có thể bổ sung các đoạn code thông qua hai hàm add_actionadd_filter mà WordPress đã cung cấp sẵn. Chúng ta có hai nhóm hooks chính đó là filter action.

  • Filter là các điểm móc liên quan đến xử lý nội dung
  • Action là các điểm móc liên quan đến xử lý hành động

Ví dụ:

(1) Bạn muốn kiểm tra loại bỏ những đường link mà người quản trị đã cố tình thêm vào khi sửa bài viết thì sẽ sử dụng đến hook có tên là save_post, và nó thuộc nhóm action.

add_action('save_post', 'function_name', 10, 2);

(2) Bạn muốn khi hiển thị nội dung bài viết ra ngoài frontend thì thêm một dòng chữ ở vị trí cuối cùng của content thì có thể sử dụng hook có tên là the_content, và nó thuộc nhóm filter.

add_filter( 'the_content', 'function_name', 1 );

Mỗi hook sẽ có các tham số truyền vào khác nhau, nên để chắc chắn thì trước khi sử dụng một hook nào đó bạn hãy lên trang codex để tham khảo nhé. Ví dụ với hook the_title thì sẽ có hai tham số truyền vào đó là $title$id.

Trường hợp trang codex không giải thích rõ về tham số thì bạn hãy tự mình debug bằng cách truyền tham số vào hàm function_name và kết hợp với hàm var_dump để in ra xem nội dung của tham số đó.

Trước khi tìm hiểu rõ hơn về action và filter thì bạn tạo cho mình hai file hook-filter.phphook-action.php nằm trong thư mục includes của plugin có tên là wp-learn. Cấu trúc này mình đã tạo trong bài viết các bước tạo plugin WordPress, bạn có thể đọc nó nếu chưa biết.

hooks wordpress png

Tiếp theo bạn tạo file nằm wp-learn.php và bổ sung hai đoạn code require hai file đó vào như sau.

require 'includes/hook-filter.php';
require 'includes/hook-action.php';

Xem bài require trong PHP nếu chưa biết hàm này.

2. Filter WordPress là gì?

Trong WordPress filter thì các hook được ví như là một bộ lọc vì các hook này liên quan đến xử lý nội dung dữ liệu. WordPres có rất nhiều loại filter và bạn có thể xem tại đây.

Đặc điểm chung của filter này là mỗi hook sẽ trả về một nội dung nào đó, và bạn sử dụng hàm add_filter để bổ sung một hành động vào hook.

Hàm add_filter có cấu trúc như sau:

add_filter ( $tag, $function_to_add, $priority = 10, $accepted_args = 1 )

Trong đó:

  • $tag: là tên của filter hook
  • $function_to_add là hàm callback muốn bổ sung vào $tag
  • $priority là mức độ ưu tiên của hàm callback, mức độ ưu tiên càng cao thì hàm callback đó sẽ được gọi trước. Giá trị mặc định là 10.
  • $accepted_args là tổng số các tham số tham gia vào hàm callback và không được vượt quá tổng số của hook. Giá trị mặc định là 1

Ví dụ: Giả sử mình muốn khi in ra tiêu đề của các bài viết thì bổ sung thêm từ freetuts.net ở đầu thì làm như sau.

Bạn mở file hook-filter.php lên và code như sau:

// Hàm bổ sung chữ freetuts.net vào chuỗi
function add_string_to_title($title)
{
    return 'freetuts.net - ' . $title;
}

// Đưa hàm add_string_to_title vào hook filter the_title
add_filter('the_title', 'add_string_to_title', 10, 1);

Trong đó:

  • the_title là hook filter dùng để lấy tiêu đề bài viết
  • add_string_to_title là tên của hàm muốn bổ sung vào hook the_title.

Hook the_title sẽ truyền tiêu đề của bài viết vào hàm add_string_to_title và thực thi nó, sau đó lấy kết quả của hàm này trả về làm tiêu đề mới.

Luồng xử lý như sau: Gả sử hàm the_title có nội dung như sau:

function the_title()
{
    $title = 'Nội dung lấy từ CSDL';
    
    // Trả về
    return $title;
}

Lúc này ta sử dụng hàm add_filter để bổ sung hàm callback add_string_to_title vào the_title thì nó sẽ hoạt động dạng như sau:

function the_title()
{
    $title = 'Nội dung lấy từ CSDL';
    
    // Vì có bổ sung hàm callback add_string_to_title 
    // nên lúc này ta phải duyệt title trước khi trả về
    $title = add_string_to_title($title);
    
    // Trả về
    return $title;
}

Vậy thực chất khi bạn bổ sung một hành động nào đó vào filter thì tức là bạn bổ sung một đoạn code xử lý trước khi filter đó trả về quả về.

3. Action WordPress là gì?

Action hooks là danh sách các hook liên quan đến xử lý sự kiện. Ví dụ khi bạn lưu một bài viết thì ta có hook save_post, khi người dùng comment thì có hook comment_post.

Tất cả các hooks đều quan trọng vì nó giúp chúng ta can thiệp vào hệ thống core mà không cần phải phá source của WordPress. Ví dụ bạn muốn khi người dùng bình luận thì gửi email thông báo thì bạn sẽ viết một hàm gửi mail và đưa nó vào hook comment_post.

Ta sử dụng hàm add_action để bổ sung hành động vào Action Hook. Hàm này có các tham số như sau:

add_action ($tag, $function_to_add, $priority = 10, $accepted_args = 1 )

Trong đó:

  • $tag: là tên của filter hook
  • $function_to_add là hàm callback muốn bổ sung vào $tag
  • $priority là mức độ ưu tiên của hàm callback, mức độ ưu tiên càng cao thì hàm callback đó sẽ được gọi trước. Giá trị mặc định là 10.
  • $accepted_args là tổng số các tham số tham gia vào hàm callback và không được vượt quá tổng số của hook. Giá trị mặc định là 1

Ví du: Khi lưu bài viết nếu bài viết ở trạng thái public thì hãy gửi email đến cho admin

Action hook lưu bài viết là save_post, hook này có ba tham số truyền vào đó là:

  • $id: id bài viết đang lưu hoặc mới thêm
  • $post: toàn bộ nội dung như title, content của bài viết
  • $is_update: nếu TRUE tức hành động save post này là hành động update, ngược lại là hành động insert.

Ok bây giờ bạn mở file hook-action.php lên và code như sau:

function send_email_public($id, $post)
{
    if ($post->post_status == 'public'){
        // Thực hiện gửi email
        // Vì là ví dụ nên mình không code gửi email
    }
}

// Đưa hàm add_string_to_title vào hook filter the_title
add_action('save_post', 'send_email_public', 11, 2);

Quá đơn giản phải không các bạn :)

4. Lời kết

Tóm lại, qua bài này bạn đã học được những kiến thức như sau:

  • Hook WordPress chính là những điểm móc nằm trong hệ thống WordPress mà qua đó ta có thể can thiệp vào mà không cần phải thay đổi core.
  • Filter WordPress là những hook được dùng để xử lý nội dung dữ liệu trong WordPress.
  • Action WordPress là những hook được dùng để xử lý hành động trong WordPress.

Bài này tương đối khó hiểu, vì đây chính là nội dung trọng tâm và quan trọng nhất mà ban phải biết khi lập trình WordPress. Bạn phải hiểu nguyên lý hoạt động của nó thì sau này mới xây dựng được plugin và theme theo ý mình được.

Cùng chuyên mục:

Child theme là gì? Cách tạo Child theme trong WordPress

Child theme là gì? Cách tạo Child theme trong WordPress

Cách tạo Shortcodes trong WordPress từ A-Z

Cách tạo Shortcodes trong WordPress từ A-Z

Cách sửa lỗi SSL trong WordPress và cài đặt

Cách sửa lỗi SSL trong WordPress và cài đặt

Sử dụng  CSS & JavaScript trong Wordpress

Sử dụng CSS & JavaScript trong Wordpress

Cách tạo và sử dụng các template file trong theme Wordpress

Cách tạo và sử dụng các template file trong theme Wordpress

Cách tạo Widget trong Theme WordPress

Cách tạo Widget trong Theme WordPress

Theme trong WordPress là gì? Cách cài đặt Theme trong WordPress

Theme trong WordPress là gì? Cách cài đặt Theme trong WordPress

Cách tạo Theme WordPress từ Scratch từ A-Z

Cách tạo Theme WordPress từ Scratch từ A-Z

Bài 06: Tạo trang quản lý Options trong WordPress

Bài 06: Tạo trang quản lý Options trong WordPress

Ở bài trước mình có nêu ra một ví dụ về quản lý thông tin…

Bài 05: Options API trong WordPress: add_option / get_option ...

Bài 05: Options API trong WordPress: add_option / get_option ...

Trong database của WordPress bạn sẽ thấy một table ten là [prefix]_options, table này sẽ…

Bài 02: WordPress API là gì? Danh sách API trong WordPress

Bài 02: WordPress API là gì? Danh sách API trong WordPress

Đáng lẽ mình không viết bài này nhưng lúc đang viết bài tiếp theo thì…

Bài 01: WordPress là gì? Nên làm website bằng WordPress?

Bài 01: WordPress là gì? Nên làm website bằng WordPress?

WordPress là một CMS được phát triển trên ngôn ngữ lập trình PHP ...

Bài 12: Custom Taxonomy  trong WordPress

Bài 12: Custom Taxonomy trong WordPress

Bài trước mình đã hướng dẫn bạn tạo một thể loại bài viết mới bằng…

Bài 11: Tạo Custom Post Type trong WordPress

Bài 11: Tạo Custom Post Type trong WordPress

Đây là các thể loại mặc định có sẵn sau khi bạn cài đặt WordPress.…

Bài 10: Hiển thị metadata ngoài frontend

Bài 10: Hiển thị metadata ngoài frontend

Sẵn có bạn hỏi làm thế nào để hiển thị nội dung bài viết ra…

Bài 09: Bốn bước custom Meta Boxes trong WordPress

Bài 09: Bốn bước custom Meta Boxes trong WordPress

Tới bài thứ chín này thì khái niệm Custom Meta Boxes không còn xa lạ…

Bài 08: Metadata API trong WordPress

Bài 08: Metadata API trong WordPress

WordPress sử dụng mô hình EAV nhằm giúp lập trình viên có thể tùy biến…

Bài 07: Custom Meta Boxes trong WordPress

Bài 07: Custom Meta Boxes trong WordPress

WordPress là một CMS nên hệ thống dữ liệu của nó chỉ dừng lại ở…

Bài 06: Tạo menu trong Admin WordPress

Bài 06: Tạo menu trong Admin WordPress

Ở bài tạo trang quản lý Options mình đã hướng dẫn các bạn thêm một…

Bài 03: Các bước tạo plugin trong WordPress (căn bản)

Bài 03: Các bước tạo plugin trong WordPress (căn bản)

Như ta biết WordPress là một CMS mã nguồn mở giúp quản lý nội dung…

Top