Hook, Filter và Action trong WordPress

Khi mở các file trong WordPress như functions.php chúng ta sẽ thấy xuất hiện hàm add_filter()add_action(). Đã bao giờ bạn tự hỏi Hooks, FiltersActions là cái gì chưa? Đây là những hàm khiến cho chúng ta hơi bị khó hiểu. Nhưng bài viết này Quách Quỳnh sẽ giải thích rõ và tường tận về Hooks, Filters và Actions là gì.

Hooks là gì?

Khi chúng ta muốn sửa một cái gì đó trong Theme, Plugin cách tốt nhất là không nên đụng tới Core. Bởi trong trường hợp chúng ta cập nhật thì các đoạn mã mới sẽ ghi đè lên. Như vậy sẽ rất mất công chỉnh sửa. Một giải pháp tuyệt vời đó chính là sử dụng Hooks. Khi dùng Hooks các thay đổi sẽ ghi đè khi bạn cập nhật plugin đó.

Có 2 loại Hooks được WordPress hỗ trợ:

  • Filter: để thay đổi giá trị của một biến đã tồn tại bằng cách ghi đè nội dung lên
  • Action: Thực hiện một hành động mới chưa từng thực hiện

Đến đây bạn đã biết được Hooks là gì rồi phải không nào. Tuy nhiên với Filter và Action còn hơi mơ hồ. Tiếp tục theo dõi để hiểu sâu hơn nhé.

Hàm Action Hook là gì?

Action hook là một hành động mới chưa từng thực hiện trên Theme. Một action hook không cần trả về giá trị.

Action hook (Các móc hành động) là các móc được kích hoạt trong một sự kiện hoặc hành động cụ thể xảy ra trong luồng của một yêu cầu cụ thể trong WordPress. Người ta có thể thêm chức năng riêng trên các hành động như vậy, và cũng có thể thực hiện một số nhiệm vụ bổ sung trên hành động cụ thể đó.

Ví dụ:

Mình sẽ viết một đoạn code trong file header.php như sau:

<header class="site-header">
<?php do_action( 'before_nav' ); ?>
</header>

Sau đó chèn đoạn code này vào file functions.php

add_action( 'before_nav', function() {
echo '<img class="logo" src="...">';
} );

Ta sẽ thấy có mối liên hệ giữa hai tập tin này. Trong header.php sẽ sử dụng hàm do_action() để thực hiện hành động. Còn tại functions.php sử dụng add_action để thêm hành động đó thêm hình ảnh cho logo.

Hàm Filter Hook là gì?

Filter Hook là ghi đè lên một biến hay một thứ gì đó đã tồn tại rồi, có thể là trong Plugin hoặc Theme. Lúc này chúng ta sẽ sửa lại kịch bản ngôn ngữ PHP ở ngay tại nơi mà điểm neo đó đã được khai báo.

Filter Hook là hành động chúng tôi có thể sửa đổi nội dung trả về. Nội dung đó có thể là văn bản của một trang hoặc bài đăng, tên tác giả hoặc bất kỳ tùy chọn nào truy xuất từ ​​cơ sở dữ liệu. Nói một cách thực tế hơn, với Filter thường làm việc trên nội dung, thực hiện các “thay đổi” và sau đó trả lại nội dung đó.

Các bộ lọc trong WordPress thường được kích hoạt trước khi bất kỳ nội dung nào được lưu hoặc hiển thị trên màn hình. Người ta có thể thêm một chức năng trên một bộ lọc và thay đổi nội dung sẽ được lưu hoặc hiển thị trên trình duyệt.

Cũng tương tự như do_action, ở đây chúng ta có hàm apply_filters ().

Ví dụ:

Tại file footer.php thường được viết

<?php
$copyright = 'Design by Quach Quynh';
echo apply_filters( 'quachquynh_copyright', $copyright );
?>

Bây giờ muốn thay đổi dòng chữ đó ta vào functions.php thêm đoạn code

<?php
function quachquynh_copyright_filter( $content ) {
$content = 'Copyright by Quach Quynh';
return $content;
}
add_filter( 'quachquynh_copyright', 'quachquynh_copyright_filter' );
?>

Kết luận: Action Hooks và Filter Hooks là những thứ cốt lõi trong WordPress. Những điều này làm cho nền tảng WordPress hoàn toàn có thể mở rộng mà không cần phải sửa đổi các tệp ở trong bộ Core. Trong plugin hoặc Theme, bạn có thể thực thi mã riêng theo các hành động cụ thể mà không cần phải thực hiện bất kỳ sửa đổi nào đối với bất kỳ tệp lõi trong WordPress.