Фильтры

Фильтры - это функции, через которые 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, при его удалении нужно указать этот приоритет.

Еще функции в Кодексе (на английском) : has_filter(), apply_filters(), current_filter(), merge_filters(), remove_all_filters()
Справочник фильтров: Filter Reference

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *