Поиск WordPress хуков

Категория: WordPress

К сожалению, официальная документация разработчика WP больше предназначена для поисковиков, чем для людей. И поиск названия нужного хука иногда занимает больше времени чем реализация поставленной задачи. Здесь я изложу результаты моего эксперимента по упрощению поиска нужного экшена (action) или фильтра (filter).

Примечание

Если Вы отчаялись найти нужный хук - обратитесь к debug_backtrace():

echo "<pre>"; print_r(debug_backtrace()); echo "</pre>";

Это долго.. Но вы в любом случае найдете то место, где подключается нужный шаблон или вызывается хук.

Поиск функций действий (action)

Linux way:

grep -rPo "(?<=do_action\(\s['\"])[^'\"]+" ./wp-includes

Здесь мы находим имена всех зарегистрированных экшенов в каталоге wp-includes.

Если мы хотим видеть какие параметры принимают функции:

grep -rPo "(?<=do_action\(\s['\"])[^\)]+" ./wp-includes
## Пример вывода списка действий ##
./wp-includes/general-template.php:get_header', $name
./wp-includes/general-template.php:get_footer', $name
./wp-includes/general-template.php:get_sidebar', $name
./wp-includes/general-template.php:get_template_part_{$slug}", $slug, $name

* Фильтр несколько похабный, т.к. выводит последнюю кавычку которая обрамляет имя эекшена. Но я не стал усложнять..

Мы нашли 441 хук действия:

grep -rPo "(?<=do_action\(\s['\"])[^'\"]+" ./wp-includes | wc -l

Если удалить дублирующиеся экшены - их останется 381:

grep -rPo "(?<=do_action\(\s['\"])[^'\"]+" ./wp-includes | sort | uniq | wc -l

Давайте уберем из вывода пути к файлам (параметр -h):

grep -rPoh "(?<=do_action\(\s['\"])[^'\"]+" ./wp-includes

Теперь найдем нужные нам WP хуки без аргументов и без путей к файлам (например все meta хуки):

grep -rPoh "(?<=do_action\(\s['\"])[^'\"]+" ./wp-includes | sort | uniq | grep meta

Список экшенов с путями без аргументов:

grep -rPo "(?<=do_action\(\s['\"])[^'\"]+" ./wp-includes | sort -u | grep meta

А так с полным "фаршем":

grep -rPo "(?<=do_action\(\s['\"])[^\)]+" ./wp-includes | sort -u | grep meta

Теперь уберем то, что нам не интересно из *meta* функций:

grep -rPoh "(?<=do_action\(\s['\"])[^'\"]+" ./ | sort -u | grep meta | grep -vP 'email|delete|add|update'

Поиск фильтров (filters)

Найти названия фильтров:

grep -rPoh "(?<=apply_filters\(\s['\"])[^'\"]+" ./ | sort -u | grep the_content

#wordpress, #hooks