Многие пользователи wordpress не представляют что такое хуки и зачем они нужны. Хотел бы немного об этом написать.
В кодексе написано, что хуки это есть "крючки". Я сторонник изучения от частного к общему в большинстве случаев, поэтому сразу пример, с который часто можно встретить на форумах или в вопросах пользователей.
Облако меток выводит метки слишком крупным шрифтом, т.е. появляется практическая задача уменьшить размер шрифта в облаке меток, но сделать это не представляется возможным в визуальном режиме в wordpress в настройках виджета.Тут есть как минимум 3 решения задачи.
1) Код всех дефолтных виджетов в ВП хранится в wp-include/default-widget.php. Можно просто отредактировать файлы движка, указав прям в коде движка нужные парамтеры вызова или параметры по умолчанию, но первая заповедь ВП разработчика гласит - не хач в движке. Т.е. не рекомендуется трогать файлы движка, т.к. это может вызвать проблемы и хаки движка сложно поддерживать при обновлении движка.
2) Вызвать код облака меток в шаблоне. Но виджеты внутри одной динамической области сайтбара не могут быть разделены кодом в шаблоне. Т.е. такой вариант уместен только если мы вызываем облако тэгов или вначале или в конце динамической области сайтбара, что опять же не очень гибко.
3) Хуки. Именно они являются наиболее правильным вариантом.
В ВП есть несколько разновидностей хуков: фильтры, экшены. Фильтры предоставляют возможность переопределить данные пропускаемые через фильтр. API движка устроено так, что почти везде параметры вызова и результат функции пропускаются через какой-то фильтр, т.е. прежде чем вернется результат, этот результат передается функции-фильтру, которая может изменить возвращаемое значение.
Также фильтры могут выполняться друг за другом, например один плагин позволяет заменять нам [cod] на какую-то конструкцию, а другой плагин формирует из контента анонс. Тут встает вопрос, какой из плагинов должен отработать раньше, т.е. сначала должна произойти замена, а потом сформироваться анонс или же наоборот. Для определения очередности выполнения фильтров фильтрам указывается приоритет.
Так же существуют экшены, для простоты понимания этой сущности, я бы назвал их событиями. События не передают фильтруют никаких данных, они просто возникают по ходу выполнения кода и к ним может быть подключена нужная нам логика. Например в момент возникновения события инициализации движка, мы можем подключить событие подключения нужной нам логики.
Фильтры и события являются основой для работы плагинов в wordpress. Большинство плагинов как раз либо фильтруют в нужном месте на нужный лад результаты или параметры функций, либо же выполняют свой код при возникновении тех или иных событий.
Ранее я разделял экшены еще на 2 подтипы, экшены без возврата и экшены с возвратом. Но после того как понял, что в экшен можно передать объект и все что с ним случится в более низком уровне кода отразится на нем и в более высоком уровне кода, т.к. передается именно оригинальный объект, а не создается копия объекта в рамках вызываемой области видимости.
Таким образом фильтры и экшены, которые реализованы в wordpress позволяют создавать расширения вроде плагинов и в любом месте кода не меняя код ядра изменить результат. Это одна из наиболее важных особенностей в разработке модульного ПО.
ordPress
плагины
