Trang chủ WordpressWordpress Development Cách dùng Filter Hook trong WordPress

Cách dùng Filter Hook trong WordPress

bởi Thạch Phạm
5 bình luận 21,6K views

Tham gia nhóm hỗ trợ WordPress

Tham gia nhóm Hỗ trợ Server - Hosting & WordPress để cùng nhau hỏi đáp và hỗ trợ các vấn đề về WordPress, tối ưu máy chủ/server.

Tham gia ngay
Bài này thuộc phần 7 của 10 phần trong serie WordPress nâng cao



Ở phần trước chúng ta đã tìm hiểu qua một loại hook thông dụng trong WordPress là Action Hook. Nhưng bên cạnh Action Hook, chúng ta còn một loại hook nữa cũng sử dụng rất thường xuyên và đóng vai trò quan trọng không kém khi lập trình trong WordPress, đó là Filter Hook.

Filter Hook là gì?

Filter Hook nghĩa là một điểm neo được khai báo trong mã nguồn WordPress, plugin hoặc theme để chúng ta có thể sửa lại kịch bản PHP tại nơi mà điểm neo đó đã được khai báo.

Cách sử dụng Filter Hook

Filter Hook được khai báo bằng hàm apply_filters() như thế này (có thể đặt thử vào template footer.php):


    <?php
        $copyright = ‘Design by ThachPham’;
        echo apply_filters( ‘thachpham_copyright’, $copyright );
    ?>

Như bạn thấy, thay vì echo cái biến $copyright ra thì mình sẽ cho biến này vào hàm apply_filters(), trong đó thachpham_copyright là tên Filter Hook của mình.

Khuyến mãi Black Friday

Bây giờ mình muốn nó không echo cái $copyright nữa mà sẽ là biến khác do tự đặt lại thì chúng ta không cần sửa trực tiếp vào code trên mà có thể tạo ra một hàm callback rồi sử dụng hàm add_filter() để gọi nó. Và nhắc lại, đây không phải là template tag nên cho vào functions.php của theme hoặc plugin của bạn.


function thachpham_change_copyright( $output ) {
    $output = ‘Design by WordPress’;
    return $output;
}
add_filter( ‘thachpham_copyright’, ‘thachpham_change_copyright’ );

Bây giờ bạn thấy, cái dòng Design by ThachPham đã được thay thế thành chuỗi dữ liệu mới là Design by WordPress thông qua việc filter.

Filter này chỉ đơn giản là chúng ta khai báo tham số bất kỳ trong hàm callback, nó sẽ tự hiểu đây là hàm chứa dữ liệu, sau đó ở trong hàm chúng ta gán cho nó một giá trị mới và return về, cuối cùng là dùng add_filter() móc vào cái filter hook cần thay đổi.

Một số ví dụ Filter Hook trong WordPress

Cũng giống như Action Hook, WordPress có một số filter hook có sẵn mà bạn có thể sử dụng. Ở đây mình sẽ nói qua một vài filter hook điển hình để bạn thực hành.

the_content

Hook này sẽ giúp chúng ta lọc lại nội dung hiển thị ra bên ngoài. Chúng ta thử áp dụng nó vào việc in đậm một từ khoá nào đó bằng việc kết hợp hàm str_replace() trong PHP nhé.


function thachpham_content_filter( $content ) {
    $find = ‘hello’;
    $replacement = "<strong>hello</strong>";
    $content = str_replace( $find, $replacement, $content );
    return $content;
}
add_filter( ‘the_content’, ‘thachpham_content_filter’ );

wp_handle_upload_prefilter

Hook này sẽ được gọi ra để lọc lại tập tin upload lên Media Library của WordPress. Dựa vào hook này, bạn có thể sử dụng tham số $file để đổi tên tập tin sau khi upload lên server.


<?php
add_filter(‘wp_handle_upload_prefilter’, ‘custom_upload_filter’ );

function custom_upload_filter( $file ){
    $file[‘name’] = ‘wordpress-is-awesome-‘ . $file[‘name’];
    return $file;
}

?>

Lời kết

Cũng đơn giản phải không nào? Chỉ cần chịu khó đọc kỹ một xíu và siêng tìm đọc code trong WordPress, bạn có thể biết sử dụng một số filter có sẵn của nó rất hay để phục vụ mục đích của mình, nó cũng đơn giản giống như Action Hook thôi chứ không có gì cả. Nhưng từ cái đơn giản này, bạn có thể sẽ làm được rất nhiều việc, từ việc sử dụng một số theme framework hay tự viết plugin cho riêng mình.

5/5 - (2 bình chọn)
5 bình luận

Hiện tại blog tạm đóng bình luận vì mình cần tập trung thời gian vào cập nhật bài viết. Bình luận sẽ mở ra cho đến khi mình sẵn sàng.