Uncategorized — May 30, 2016 at 4:04 am

Filter Hook là gì?Cách sử dụng một Filter Hook như thế nào?

by

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):

01
02
03
04
    <?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.

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.

01
02
03
04
05
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é.

01
02
03
04
05
06
07
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.

01
02
03
04
05
06
07
08
09
<?php
add_filter('wp_handle_upload_prefilter', 'custom_upload_filter' );
function custom_upload_filter( $file ){
    $file['name'] = 'wordpress-is-awesome-' . $file['name'];
    return $file;
}
?>

Leave a Comment

Your email address will not be published. Required fields are marked *