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
». Фильтры должны отправлять хотя бы одно значение (любого типа: string, array, integer и т. Д.), И они ожидают, что функция вернет одно значение.
Они предоставляют вам способ управления вводом перед отправкой обратно.
do_action
- совсем другой крюк. Для того, чтобы отправить информацию в вашу функцию фильтра, выполните следующие действия (взято из вашего примера):
<div id="content" <?php $class='post post_content'; echo apply_filters('my_custom_classes', $class); ?>>
И тогда в ваших функциях.php file, добавьте это:
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;
}
Я думаю, что tut только более запутанным, если у вас уже возникли проблемы с пониманием фильтров и действий. Можете ли вы объяснить контекст, в котором вы пытаетесь их использовать? Тогда мы можем более точно ответить на ваши потребности, а не просто повторять Кодекс. – TheDeadMedic