add_filter()
является сопутствующей функцией для apply_filters()
.Перед запуском apply_filters
для определенного фильтра (аргумент $tag
в add_filter()
) вы можете использовать add_filter
, чтобы зарегистрировать фильтр для тега.Когда apply_filters()
выполняется с этим именем тега, он вызывает все зарегистрированные фильтры по порядку.Фильтры используются для передачи данных через функции для манипуляции.Например, я часто использую фильтр wp_list_pages.Я использую его для удаления разрывов строк из списка страниц.Вот как это работает:
Сначала я определяю функцию, которая принимает один параметр и возвращает его после работы с ним:
function my_list_pages_filter($pages){
$pages = preg_replace( array("\n","\r"), '', $pages );
return $pages;
}
Затем я добавляю ловушку фильтра: add_filter ('wp_list_pages', 'my_list_pages_filter');
add_filter
сообщает WordPress «Когда вызывается функция apply_filters
с первым аргументом, являющимся« wp_list_pages », вызывать my_list_pages_filter
».Фильтры должны отправлять хотя бы одно значение (любого типа: строка, массив, целое число и т. Д.), И они ожидают, что функция возвратит одно значение.
Они предоставляют вам способ манипулировать вводом перед его отправкой.назад.
do_action
- это совсем другой крючок.Чтобы отправить информацию в функцию фильтра, выполните следующие действия (взятые из вашего примера):
<div id="content" <?php $class='post post_content'; echo apply_filters('my_custom_classes', $class); ?>>
А затем в свой файл functions.php добавьте следующее:
add_filter('my_custom_classes','my_custom_classes_function');
function my_custom_classes_function($classes){
$output 'class="'. $classes.'"';
return $output;
}
Это довольно элементарное использование фильтров, но это только начало.Вы действительно можете получить представление о том, что вы можете сделать с фильтрами на том же примере с некоторыми улучшениями:
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;
}