Фильтры - это функции, через которые WordPress пропускает данные перед выводом, например, в базу данных или в HTML-код веб-страницы. Плагин может добавлять свой фильтр. Для этого нужно функцию фильтрации привязать к определенной точке с помощью хука add_filter().
Функция фильтрации
Функция фильтрации (с уникальным именем!) принимает исходные данные и возвращает измененные данные или null в знак того, что данные удалены и ничего выводить не нужно. Если функция фильтрации не изменяет данные, она должна вернуть исходные данные. Например, если вы хотите запретить выводить какие-то слова в комментариях, можно создать список запрещенных слов ($profanities) и использовать такую PHP-функцию:
function filter_profanity($content) {
$profanities = array('badword','alsobad','...');
$content=str_ireplace($profanities,'{цензура}',$content);
return $content;
}
*** Функция str_ireplace (в отличие от str_replace) не чувствительна к регистру символов.
И зарегистрировать фильтр, привязав функцию фильтрации к функции, результат которой она должна фильтровать.
add_filter('comment_text','filter_profanity');
Регистрация фильтра: add_filter
add_filter ( 'hook_name', 'your_filter', [priority], [accepted_args] );
Параметры:
hook_name - имя функции WordPress задает, когда будет применяться фильтрация
your_filter - имя функции фильтрации. Это может быть стандартная PHP-функция, функция WordPress или пользовательская функция.
priority - (integer ) необязательный, задает порядок выполнения функций, привязанных к фильтру. По умолчанию 10, чем меньше это значение, тем выше приоритет. Функции с одинаковым приоритетом выполняются в порядке их добавления.
accepted_args - (integer ) необязательный, задает, сколько аргументов может принимать функция. По умолчанию 1, но некоторые хуки могут передавать прикрепляемым функциям более одного аргумента.
Удаление фильтра: remove_filter
Иногда нужно, чтобы плагин отключал один из фильтров WordPress или другого плагина, что, конечно, нужно делать с осторожностью
remove_filter('filter_hook','filter_function')
Аналогично удаляется действие, например, отмена отправки пингов при создании новой записи:
remove_action('publish_post','generic_ping');
*** Если хук был зарегистрирован с приоритетом, отличным от 10, при его удалении нужно указать этот приоритет.
Еще функции в Кодексе (на английском) : , , , ,
Справочник фильтров: