LẬP TRÌNH PLUGIN
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
Dự án mới của mình là gamehow.net, mời anh em ghé thăm và góp ý ạ.

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.

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?

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.

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ó.

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:

Cập nhật nhanh 3 bí kíp thiết kế web đẹp mới nhất 2021

Cập nhật nhanh 3 bí kíp thiết kế web đẹp mới nhất 2021

Sở hữu website đẹp, hấp dẫn và chuyên nghiệp là điều mà ...

Dịch vụ cài đặt blog bằng WordPress miễn phí

Dịch vụ cài đặt blog bằng WordPress miễn phí

Website là một công cụ không thể thiếu khi bán hàng online, nó giúp ta…

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ì…

Cách tùy biến theme WordPress căn bản cho người mới bắt đầu

Cách tùy biến theme WordPress căn bản cho người mới bắt đầu

Khi [cài đặt WordPress trên Hosting] xong thì bạn có thể cài đặt theme để…

Hướng dẫn làm website WordPress chạy tiếp thị liên kết với AT

Hướng dẫn làm website WordPress chạy tiếp thị liên kết với AT

Ngày nay, công nghệ ngày càng phát triển dẫn đến khái niệm [tiếp thị liên…

Tổng hợp mã CSS thường dùng để tùy biến theme WordPress

Tổng hợp mã CSS thường dùng để tùy biến theme WordPress

WordPress là một CMS dùng để làm website rất phổ biến, hay nói chính xác…

Đánh giá GeneratePress - Cách sử dụng theme GeneratePress

Đánh giá GeneratePress - Cách sử dụng theme GeneratePress

Nếu bạn đang muốn tìm kiếm một theme với các tiêu chí nhẹ, nhanh và…

Làm blog cá nhân bằng WordPress với theme GeneratePress

Làm blog cá nhân bằng WordPress với theme GeneratePress

Thời gian qua chắc hẳn bạn đã nghe đến theme GeneratePress rồi phải không nào?…

Cài đặt WordPress trên localhost

Cài đặt WordPress trên localhost

WordPress được lập trình bằng ngôn ngữ PHP và sử dụng MySQL để lưu trữ,…

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

Tặng license theme Generatepress khi mua Hosting Tinohost

Tặng license theme Generatepress khi mua Hosting Tinohost

Chào các bạn, hiện nay WordPress đang trở thành một phổ biến nhất thế giới,…

12 Wordpress plugin tốt nhất nên dùng cho website WordPress 2021

12 Wordpress plugin tốt nhất nên dùng cho website WordPress 2021

Bạn vừa tạo một blog WordPress mới và đang phân vân không biết nên chọn…

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 ở…

Top