add_filter()
là một chức năng đồng hành với apply_filters()
. Trước khi apply_filters
chạy cho một bộ lọc nhất định (đối số $tag
trong add_filter()
), bạn có thể sử dụng add_filter
để đăng ký bộ lọc cho thẻ. Khi apply_filters()
được thực thi với tên thẻ đó, nó sẽ gọi tất cả các bộ lọc đã đăng ký theo thứ tự. Các bộ lọc được sử dụng để truyền dữ liệu qua các hàm để thao tác. Ví dụ, cái mà tôi thường thấy mình sử dụng là bộ lọc wp_list_pages. Tôi sử dụng nó để xóa các ngắt dòng khỏi danh sách trang. Vì vậy, dưới đây là cách hoạt động:
Trước tiên tôi định nghĩa một hàm mang theo một tham số và trả về nó sau khi làm việc với nó:
function my_list_pages_filter($pages){
$pages = preg_replace(array("\n","\r"), '', $pages);
return $pages;
}
Sau đó, tôi thêm móc lọc: add_filter ('wp_list_pages', 'my_list_pages_filter ');
add_filter
thông báo cho WordPress "Khi hàm apply_filters
được gọi với đối số đầu tiên là 'wp_list_pages', hãy gọi my_list_pages_filter
." Bộ lọc phải gửi ít nhất một giá trị (thuộc bất kỳ loại nào: chuỗi, mảng, số nguyên, v.v.) và chúng mong đợi hàm trả về một giá trị.
Chúng cung cấp cho bạn cách để thao tác đầu vào trước khi gửi lại.
do_action
là một móc hoàn toàn khác. Để gửi thông tin đến chức năng lọc của bạn, hãy thực hiện theo các bước sau (lấy từ ví dụ của bạn):
<div id="content" <?php $class='post post_content'; echo apply_filters('my_custom_classes', $class); ?>>
Và sau đó trong các chức năng của bạn.tệp php, hãy thêm thông tin này:
add_filter('my_custom_classes','my_custom_classes_function');
function my_custom_classes_function($classes){
$output 'class="'. $classes.'"';
return $output;
}
Đó là cách sử dụng khá thô sơ của bộ lọc nhưng đó là sự khởi đầu. Bạn thực sự có thể có được một ý tưởng về những gì bạn có thể làm với các bộ lọc với các ví dụ tương tự với một số cải tiến:
function my_custom_classes_function($classes){
$classes = explode(' ', $classes);
if(is_home())
$classes[] = 'home_content';
if(is_single())
$classes[] = 'single_content';
if(is_page())
$classes[] = 'page_content';
if(is_tag())
$classes[] = 'tag_content';
$output 'class="'. implode(' ', $classes) .'"';
return $output;
}
Tôi nghĩ rằng tut chỉ gây nhầm lẫn hơn nếu bạn đã gặp sự cố khi hiểu bộ lọc và hành động. Bạn có thể giải thích ngữ cảnh mà bạn đang cố gắng sử dụng chúng không? Sau đó, chúng tôi có thể trả lời cụ thể hơn cho nhu cầu của bạn, thay vì chỉ lặp lại Codex. – TheDeadMedic