Поиск 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