Filter Hook

Коротко

Вид хука WordPress, который передаёт значение через цепочку подключённых функций: каждая может его изменить и обязана вернуть результат дальше.

Что такое «Filter Hook»

Фильтры нужны там, где WordPress готовит данные перед использованием: текст записи перед выводом, длину анонса, заголовок страницы, список классов у тега, письмо перед отправкой. В коде ядра такая точка выглядит как $value = apply_filters( 'имя', $value, ...доп. данные ). Подключённые через add_filter() функции выстраиваются по приоритету, и результат первой становится входом второй.

Вместе с action hook фильтры образуют систему хуков WordPress. Разница практическая: действие «делает», фильтр «меняет и отдаёт». Технически обе функции регистрируют обработчик одинаково, но вернуть значение из фильтра — обязанность разработчика.

Пример: короче анонсы и ссылка «Читать»

add_filter( 'excerpt_length', function () {
    return 25; // слов вместо стандартных 55
} );

add_filter( 'excerpt_more', function () {
    return ' … <a href="' . esc_url( get_permalink() ) . '">Читать</a>';
} );

Оба фильтра встроены в ядро и меняют вывод the_excerpt() во всех шаблонах темы сразу, без правки каждого файла.

Типичные ошибки

  • Функция ничего не возвращает. Тогда дальше по цепочке уходит null, и, например, у фильтра the_content пропадает текст всех записей.
  • Вывод через echo внутри фильтра. Текст появится не там, где ожидалось, — часто над шапкой сайта.
  • Забытый параметр $accepted_args. Если хук передаёт дополнительные аргументы, например ID записи, без указания их числа функция получит только первое значение.
  • Слишком тяжёлая работа в фильтре, который вызывается сотни раз за запрос: gettext, option_*. Запрос к базе внутри такого обработчика заметно замедляет страницу.

Когда фильтр не подходит

Если нужно не поменять данные, а отреагировать на событие — отправить уведомление, записать лог, — правильнее действие. Фильтр, у которого результат игнорируется, сбивает с толку тех, кто будет читать код после вас.

Обновлено:

Все термины раздела «WordPress»

Что будем искать? Например,Продвижение