Ở 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.
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.
Xem tiếp bài trong serie
Phần trước: Cách sử dụng Action Hook trong WordPressPhần kế tiếp: Thêm trường dữ liệu (custom field) cho bài viết