Хотя крючки в WordPress удивительно, и каждый использует их сознательно или неосознанно, я получаю впечатление, что некоторые продвинутые пользователи и особенно передние разработчики по-прежнему, кажется, чтобы избежать их. Если вы чувствуете, как вы были сдерживая на крючки, тоже, то эта статья поможет вам начать. Я также собираюсь раскрыть некоторые интересные детали для тех, кто думает, что они достаточно знакомы с крючками.
Вы хотите прочитать эту статью, особенно если вы хотите:
- понять фрагменты кода с крючками, такими как те, которые встречаются на форумах;
- расширить WordPress, плагины и темы, не нарушая обновления;
- узнать, как избежать общих проблем;
- позволить другим расширить ваш код.
Мои примеры взяты из WordPress ‘ядро и из моей работы в качестве внештатного разработчика и автора расширенных объявлений плагин.
Что такое крючки?
Всякий раз, когда вы хотите сделать что-то или настроить что-то в WordPress, то есть очень вероятно, крючок вы можете использовать.
Крюк «делать» называется «действие». Там, где определено действие, вы можете выполнить свой собственный код. Вот несколько примеров:
- отправить письмо автору после публикации публикации публикации;
- загрузить пользовательский файл скрипта в колонтитул страницы;
- добавить инструкции над формой входа.
Самое главное в действиях крючки является положение. Есть действия крючки по всему WordPress ядро, которые позволяют делать свое дело.
Дальнейшее чтение на SmashingMag: Ссылка
- Расширение WordPress с пользовательскими типами контента
- Подробное руководство по WordPress пользовательские шаблоны страницы
- Настройка WordPress Архивы для категорий, теги
- Создание пользовательского архива Страница для WordPress
«Настраиваемый» крюк называется «фильтром». Фильтр позволяет изменить или настроить значение и вернуть его в новой форме. Некоторые примеры:
- капитализация названия поста,
- прикрепляя ссылки на связанные посты после основного содержания,
- изменение опции, извлеченной из базы данных.
Важно не только положение для фильтра, но и данные и возвращенные значения. Как и в действиях, можно предположить, что WordPress имеет фильтр для почти каждого значения, которое он обрабатывает.
Элементы крючка рутины
Сам по себе крючок — это просто позиция. Ничего не происходит здесь по умолчанию. Чтобы заставить его работать, вам нужно по крайней мере три основные функции, которые, в сочетании, я хотел бы назвать «крюк рутины».
Давайте использовать wp_head
крючок в качестве примера для действий и the_content
для фильтров.
Крюк (существить)
Сам крючок, когда и где происходит волшебство. Представьте себе, что это вид крючка альпинист будет положить в горном лице. Он имеет определенное положение, и если они или другие альпинисты хотят двигаться вперед, они могут использовать его.
Действия крючки размещены с do_action()
, как и в следующем:
do_action( 'wp_head' );
Фильтр крючки apply_filters()
использовать, следующим образом:
$content = apply_filters( 'the_content', $content );
Как вы можете видеть, мы должны поймать выход фильтра, тоже.
Действия и фильтр
Следующим элементом в рутине крючка является действие или фильтр. Это, по крайней мере, одна функция, которую вы определяете, чтобы сделать или отфильтровать что-то. Это будет фактический альпинист, который готов использовать любой крюк, чтобы получить немного выше.
Действие, которое срабатывает в wp_head
это noindex()
.
function noindex() {
// If the blog is not public, tell robots to go away.
if ( '0' == get_option('blog_public') )
wp_no_robots();
}
Это просто проверяет, есть ли у вас отключен параметр для видимости поисковой системы. Если это так, wp_no_robots()
добавляет роботы мета теги говорю поисковых систем не индексировать ваш сайт.
Пример фильтра на the_content
wpautop()
. Он отвечает за упаковку абзацев в <p>
теги и использование <br />
для разрывов строк. Важная часть плагина заключается в этом:
function wpautop( $pee, $br = true ) {
// …
return $pee;
}
Помимо действия, функция фильтра нуждается по крайней мере в одном аргументе. Этот аргумент должен быть возвращен позже.
Крюк (Верб)
В то время как наш настоящий альпинист знает, что они могут сделать с крючком, в режиме крючка WordPress мы должны сказать им, что этот очень специфический крюк предназначен для их использования. Это означает, что мы должны подключить (глагол) нашу функцию в крючок (существительный).
Это делается с помощью функции, которая часто также неправильно называют «крюк» (существите). Когда я объясняю процедуру крючка, это выражается как глагол, но если мне нужно использовать существительный, то я бы назвал это «соединение».
Для wp_head
крючка и noindex()
действия, соединение сделано с этой строкой:
add_action( 'wp_head', 'noindex', 1 );
Третий параметр является приоритетом, который мы будем охватывать ниже.
Подключение wpautop()
к the_content
это делается с этой строкой:
add_filter( 'the_content', 'wpautop' );
Это основы крючка рутины. Мы рассмотрим больше из них в следующих разделах.
Вы уже используете эти крючки
Действия и фильтр скрыты глубоко в ядре, но вы просто заинтересованы в изменении вашей темы, так почему вы должны беспокоиться с ними?
Истина заключается в том, что, даже если вы «просто» темы кода или иногда положить что-то в вашей functions.php
теме, вы, вероятно, уже с помощью действий и фильтров.
wp’head
Давайте посмотрим на head
раздел Двадцать Пятнадцать тему, которая может быть найдена в wp-content/themes/twentyfifteen/header.php
.
<!DOCTYPE html>
<html <?php language_attributes(); ?> class="no-js">
<head>
<meta charset="<?php bloginfo( 'charset' ); ?>">
<meta name="viewport" content="width=device-width">
<link rel="profile" href="http://gmpg.org/xfn/11">
<link rel="pingback" href="<?php bloginfo( 'pingback_url' ); ?>">
<!--[if lt IE 9]>
<script src="<?php echo esc_url( get_template_directory_uri() ); ?>/js/html5.js"></script>
<![endif]-->
<?php wp_head(); ?>
</head>
Существует не очень много между запуском и закрытием <head>
тегов, так что взгляните на исходный код в вашем браузере. Вы увидите все виды метаэлементов, включая <title>
тег.
Элементы, которые могут быть отсутствовать в header.php
файле, добавляются с wp_head()
функцией. Если у вас есть IDE открытым (т.е. программное обеспечение, с которым вы пишете код), и это позволяет перейти к определению функции, то вы должны действительно использовать это сейчас и проверить содержимое wp_head()
.
/**
* Fire the wp_head action
*
* @since 1.2.0
*/
function wp_head() {
/**
* Print scripts or data in the head tag on the front end.
*
* @since 1.5.0
*/
do_action( 'wp_head' );
}
Если вы должны были удалить комментарии, то вы увидите, что единственное, что wp_head()
делает это размещение wp_head
крючка.
Практически, это означает, что ваша тема может также просто do_action( ‘wp_head’ );
использовать, а не wp_head();
.
Этот крюк уже используется ядром. Вот некоторые соединения, которые WordPress определяет по умолчанию:
add_action( 'wp_head','_wp_render_title_tag', 1);
add_action( 'wp_head','wp_enqueue_scripts', 1);
add_action( 'wp_head','feed_links', 2);
add_action( 'wp_head','feed_links_extra', 3);
add_action( 'wp_head','rsd_link');
add_action( 'wp_head','wlwmanifest_link');
add_action( 'wp_head','adjacent_posts_rel_link_wp_head', 10, 0 );
add_action( 'wp_head','locale_stylesheet');
add_action( 'wp_head','noindex', 1);
add_action( 'wp_head','print_emoji_detection_script', 7);
add_action( 'wp_head','wp_print_styles', 8);
add_action( 'wp_head','wp_print_head_scripts', 9);
add_action( 'wp_head','wp_generator');
add_action( 'wp_head','rel_canonical');
add_action( 'wp_head','wp_shortlink_wp_head', 10, 0 );
add_action( 'wp_head','wp_site_icon', 99);
Среди них наше noindex()
действие, а также (с WordPress 4.1) призыв к _wp_render_title_tag()
, который генерирует title
тег.
the’content
Пример фильтра крючка, который вы использовали несколько раз, не зная, что это the_content
.
Он скрыт за the_content()
функцией, которая используется для вывода содержимого публикации или страницы. Он также содержит вызов к the_content
крючку.
function the_content( $more_link_text = null, $strip_teaser = false) {
$content = get_the_content( $more_link_text, $strip_teaser );
// …
$content = apply_filters( 'the_content', $content );
$content = str_replace( ']]>', ']]>', $content );
echo $content;
}
При the_content()
вызове в чистой установке WordPress, несколько фильтров уже подключены к the_content
.
add_filter( 'the_content', 'wptexturize' );
add_filter( 'the_content', 'convert_smilies' );
add_filter( 'the_content', 'convert_chars' );
add_filter( 'the_content', 'wpautop' );
add_filter( 'the_content', 'shortcode_unautop' );
add_filter( 'the_content', 'prepend_attachment' );
Фильтры по умолчанию заботятся о формате и некоторых специальных знаках в тексте. Он также широко используется многими плагинами, чтобы прикрепить элементы, такие как социальные иконки обмена или связанных должностей в конце основного содержания поста.
Уроки от использования контента
Даже если вы сознательно не использовать этот крючок, это хорошо, чтобы узнать немного о нем, чтобы понять общие проблемы. Вот две истории, в которых неправильное использование предотвращает работу функций должным образом.
Как вы можете видеть в the_content()
, есть также призыв к get_the_content()
. Я видел, что последнее использовало вместо бывшего в несколько тем. Это, однако, обходит крючок, и многие функции, в том числе форматирование поста по умолчанию, не будет работать.
Если вы подключите в the_content
, то также имейте в виду, что он используется не только на страницах содержания, но и на страницах списка,таких как архив и домашняя страница. Я до сих пор помню клиента связаться со мной о его первой странице, которая была медленной из-за популярного плагина, который вводили социального обмена виджет ниже тизер каждого поста, каждый из которых называется обратно домой одновременно. Не было никакого «выключенного» переключателя для такого поведения.
Параметры в крючок Рутина
Наиболее распространенными параметрами, о каких наиболее распространенных параметрах необходимо знать при построении или отладке процедуры крючка, являются название крючка, название функции, приоритет и аргументы, которые вы даете функции.
Излишне говорить, что дьявол в деталях.
Для вашей ссылки, это то, что основной вызов add_filter()
выглядит, включая все параметры:
add_filter( $tag, $function, $priority, $accepted_args );
Именование крючков ($tag)
Вы не можете сделать что-нибыдь о названии крючка который использован в сердечнике WordPress или в плагинах или темах, но держите в разуме немного вещей создавая ваши собственные имена.
Правило большого пальца я следую заключается в том, что действия должны содержать момент их вызова, и фильтры должны содержать момент и значение, которое будет изменено.
wp_head
и wp_footer
являются хорошими примерами действий, называемых в соответствии с позицией. Также часто используют префикс или суффикс, такие before
pre
как, begin
и after
end
.
Функция wp_delete_post()
, которая, очевидно, отвечает за удаляние должности, включает в себя следующие крючки:
before_delete_post
delete_post
deleted_post
after_delete_post
Когда я пишу фильтр, я стараюсь включить отфильтрованное значение, тоже. the_content
служит хорошим примером этого.
Крюк Имя Префикс
Помимо положения и значения, вы должны дать ваш крючок префикс, который определяет его как свой собственный. Следуйте следующим примерам:
-
wpseo_
от Yoast SEO, -
genesis_
из рамок Бытия, -
advanced_ads_
от моего Расширенный объявления плагин.
Это служит двум целям.
Во-первых, это предотвратить конфликты с крючками в других плагинов или темы.
Во-вторых, если кто-то использует ваш крючок в теме или плагине, то третьи стороны будут легче понять, где именно крючок берет начало.
Динамические имена крюк
Представьте, что у вас есть много вариантов в плагине, и вы хотите, чтобы другие могли использовать фильтр на каждом из них. Вы можете либо призвать apply_filters()
к каждому варианту или использовать идею динамического названия крючка, как WordPress ядро делает в get_options()
функции.
Он содержит следующие крючки:
'pre_option_' . $option
'default_option_' . $option
'option_' . $option
Зная это, вы можете подключить option_blogname
или изменить название или описание option_blogdescription
блога динамически.
Это также может быть причиной, почему вы не можете найти крючок вы читали о в исходном коде без сокращения динамической части.
Волшебное «все»
Специальный all
тег может быть использован в качестве названия крючка при вызове и add_action()
add_filter()
. Это приведет к подключенной функции, которая будет использоваться для каждого крючка (как действия и фильтры).
Единственный раз, когда я когда-либо нуждался в этом, когда отладка всей среды крючка.
Имена функций
При вызове простой функции добавьте префикс. Это предотвратит конфликты с другими помощниками функций, которые идентифицируют его.
На форумах, вы часто найдете названия функций, начиная с my_
. Измените это на то, что впоследствии может быть идентифицировано как ваше.
add_filter( 'the_content', 'bestpluginever_capitalize_all_words' );
Возможно также подключение статической функции к классу:
add_filter( 'the_content', array( 'bestpluginever', 'capitalize_all_words' ) );
Вызов его в экземпляре этого класса будет следующим образом:
add_filter( 'the_content', array( $bestpluginever, 'capitalize_all_words' ) );
Вы также можете вызвать метод в экземпляре одного и того же класса, так как:
add_filter( 'the_content', array( $this, 'capitalize_all_words' ) );
Убедитесь, что функции являются открытыми, а также.
Используйте функции PHP по умолчанию, слишком
Иногда создание собственной функции не требуется.
Этот крючок рутины капитализирует первую букву каждого слова в названии поста:
Фильтры по умолчанию заботятся о формате и некоторых специальных знаках в тексте. Он также широко используется многими плагинами, чтобы прикрепить элементы, такие как социальные иконки обмена или связанных должностей в конце основного содержания поста.
Уроки от использования контента
Даже если вы сознательно не использовать этот крючок, это хорошо, чтобы узнать немного о нем, чтобы понять общие проблемы. Вот две истории, в которых неправильное использование предотвращает работу функций должным образом.
Как вы можете видеть в the_content()
, есть также призыв к get_the_content()
. Я видел, что последнее использовало вместо бывшего в несколько тем. Это, однако, обходит крючок, и многие функции, в том числе форматирование поста по умолчанию, не будет работать.
Если вы подключите в the_content
, то также имейте в виду, что он используется не только на страницах содержания, но и на страницах списка,таких как архив и домашняя страница. Я до сих пор помню клиента связаться со мной о его первой странице, которая была медленной из-за популярного плагина, который вводили социального обмена виджет ниже тизер каждого поста, каждый из которых называется обратно домой одновременно. Не было никакого «выключенного» переключателя для такого поведения.
Параметры в крючок Рутина
Наиболее распространенными параметрами, о каких наиболее распространенных параметрах необходимо знать при построении или отладке процедуры крючка, являются название крючка, название функции, приоритет и аргументы, которые вы даете функции.
Излишне говорить, что дьявол в деталях.
Для вашей ссылки, это то, что основной вызов add_filter()
выглядит, включая все параметры:
add_filter( $tag, $function, $priority, $accepted_args );
Именование крючков ($tag)
Вы не можете сделать что-нибыдь о названии крючка который использован в сердечнике WordPress или в плагинах или темах, но держите в разуме немного вещей создавая ваши собственные имена.
Правило большого пальца я следую заключается в том, что действия должны содержать момент их вызова, и фильтры должны содержать момент и значение, которое будет изменено.
wp_head
и wp_footer
являются хорошими примерами действий, называемых в соответствии с позицией. Также часто используют префикс или суффикс, такие before
pre
как, begin
и after
end
.
Функция wp_delete_post()
, которая, очевидно, отвечает за удаляние должности, включает в себя следующие крючки:
before_delete_post
delete_post
deleted_post
after_delete_post
Когда я пишу фильтр, я стараюсь включить отфильтрованное значение, тоже. the_content
служит хорошим примером этого.
Крюк Имя Префикс
Помимо положения и значения, вы должны дать ваш крючок префикс, который определяет его как свой собственный. Следуйте следующим примерам:
-
wpseo_
от Yoast SEO, -
genesis_
из рамок Бытия, -
advanced_ads_
от моего Расширенный объявления плагин.
Это служит двум целям.
Во-первых, это предотвратить конфликты с крючками в других плагинов или темы.
Во-вторых, если кто-то использует ваш крючок в теме или плагине, то третьи стороны будут легче понять, где именно крючок берет начало.
Динамические имена крюк
Представьте, что у вас есть много вариантов в плагине, и вы хотите, чтобы другие могли использовать фильтр на каждом из них. Вы можете либо призвать apply_filters()
к каждому варианту или использовать идею динамического названия крючка, как WordPress ядро делает в get_options()
функции.
Он содержит следующие крючки:
'pre_option_' . $option
'default_option_' . $option
'option_' . $option
Зная это, вы можете подключить option_blogname
или изменить название или описание option_blogdescription
блога динамически.
Это также может быть причиной, почему вы не можете найти крючок вы читали о в исходном коде без сокращения динамической части.
Волшебное «все»
Специальный all
тег может быть использован в качестве названия крючка при вызове и add_action()
add_filter()
. Это приведет к подключенной функции, которая будет использоваться для каждого крючка (как действия и фильтры).
Единственный раз, когда я когда-либо нуждался в этом, когда отладка всей среды крючка.
Имена функций
При вызове простой функции добавьте префикс. Это предотвратит конфликты с другими помощниками функций, которые идентифицируют его.
На форумах, вы часто найдете названия функций, начиная с my_
. Измените это на то, что впоследствии может быть идентифицировано как ваше.
add_filter( 'the_content', 'bestpluginever_capitalize_all_words' );
Возможно также подключение статической функции к классу:
add_filter( 'the_content', array( 'bestpluginever', 'capitalize_all_words' ) );
Вызов его в экземпляре этого класса будет следующим образом:
add_filter( 'the_content', array( $bestpluginever, 'capitalize_all_words' ) );
Вы также можете вызвать метод в экземпляре одного и того же класса, так как:
add_filter( 'the_content', array( $this, 'capitalize_all_words' ) );
Убедитесь, что функции являются открытыми, а также.
Используйте функции PHP по умолчанию, слишком
Иногда создание собственной функции не требуется.
Этот крючок рутины капитализирует первую букву каждого слова в названии поста:
function bestpluginever_capitalize_title( $title ){
return ucwords( $title );
}
add_filter( 'the_title', 'bestpluginever_capitalize_title' );
Поскольку ucwords()
это нормальная функция PHP, которая получает и возвращает значение, как и любая другая функция фильтра, вы также можете сократить четыре строки к этому:
add_filter( 'the_title', 'ucwords' );
Приоритет
Третий параметр add_action()
в и add_filter()
является приоритетом. Он устанавливает порядок, в котором вызываются несколько крючковатых функций.
Этот параметр является необязательным и будет по умолчанию, 10
если неопределен. Несколько функций с одинаковым приоритетом будут вызваны в том порядке, в котором они были зарегистрированы на крючок.
Приоритетный параметр стоил мне много нервов. Расширенные объявления the_content
используются при инъекционных объявлениях до или после содержимого. Как я уже упоминал, многие другие плагины делать то же самое, чтобы вставить содержание, такие как последние или аналогичные должности.
Параметр определяет, прикрепляется ли объявление или другое содержимое в первую очередь. Чтобы сократить запросы на поддержку о «неправильном» порядке элементов, который на самом деле имеет очень конкретное определение, я в конечном итоге позволяет пользователю выбрать приоритет фильтра в качестве опции.
Убедившись, что действие уже произошло
Чтобы проверить, пройдо ли конкретное действие, можно did_action()
использовать.
Вы можете помнить, что _wp_render_title_tag
был подключен в wp_head
. Это пример того, как ядро гарантирует, что title
тег действительно создан только там.
function _wp_render_title_tag() {
if ( ! current_theme_supports( 'title-tag' ) ) {
return;
}
// This can only work internally on wp_head.
if ( ! did_action( 'wp_head' ) && ! doing_action( 'wp_head' ) ) {
return;
}
echo '<title>' . wp_title( '|', false, 'right' ) . "</title>n";
}
did_action( $hook )
возвращает количество выстрелов, включая текущий вызов. Он вернется, 1
если _wp_render_title_tag()
в настоящее время срабатывает в wp_head
. doing_action( ‘wp_head’ )
гарантирует, что мы находимся в wp_head
действии прямо сейчас. Практически, код выше, является двойной проверки, которая также может быть причиной, почему он будет удален в WordPress 4.4.0.
doing_action()
только проверяет, происходит ли действие в настоящее время, но логика, лежащая в его основе, является темой для целой другой статьи.
Проверьте, использовался ли фильтр уже
Существует не псевдоним did_action()
для и doing_action()
для фильтров.
Вам нужно будет использовать has_filter( $hook, $function )
вместо этого. Если $hook
указано только, то он вернется, true
если какая-либо функция зарегистрирована на крючок, или false
если нет.
Если $function
он дается, он вернет приоритет этой функции, или false
если эта функция не подключена к крючку.
При инъекционных объявлений после конкретного пункта, мой расширенный плагин объявлений необходимо убедиться, что wpautop()
называется до моей собственной функции фильтра применяется.
$wpautop_priority = has_filter( 'the_content', 'wpautop');
if ( $wpautop_priority && $advads_content_injection_priority() < $wpautop_priority ) {
$content = wpautop( $content );
}
В этом фрагменте я проверяю, является ли приоритет wpautop()
выше приоритета впрыски. Это будет означать, что пункты еще не установлены, и это заставляет плагин, чтобы создать их в первую очередь.
Аргументы
В то время как фильтр крючки необходимо по крайней мере один аргумент (значение, которое фильтруется), действия не нужны. Тем не менее, это не означает, что оба не могут иметь больше.
Давайте посмотрим на delete_term
крючок, который выстрелил после того, как термин удаляется из базы данных.
do_action( 'delete_term', $term, $tt_id, $taxonomy, $deleted_term );
При использовании add_action()
add_filter()
функции, четвертый параметр — это количество аргументов, ожидаемых функцией действия или фильтра.
В нашем случае, крючковатая функция может использовать эти четыре аргумента, но это не нужно, как вы можете видеть из этого соединения, сделанного в ядре:
add_action( 'delete_term', '_wp_delete_tax_menu_item', 10, 3 );
Акция заинтересована только в первых трех аргументах, а не в $deleted_term
.
function _wp_delete_tax_menu_item( $object_id = 0, $tt_id, $taxonomy ) {
// …
}
Ловушка номеров аргументов
Заявленное количество аргументов должно соответствовать аргументам, которые использует функция, но оно может быть исключено, если оно пусто или 1
.
Я постоянно натыкаюсь на ту же проблему с этим аргументом, потому что это не совсем необязательно. Если ваша функция нуждается в большем количестве аргументов, то вам придется установить их, иначе вы получите сообщение об ошибке. Если вы установите их, то вам также нужно установить приоритет, который, во многих случаях, на самом деле необязательным.
Начните с возвращения
Еще один совет я хочу дать вам проблемы функции фильтра. Если вы пишете сложные фильтры с большим количеством условий, то может случиться, что вы забудете вернуть значение, которое практически удалит его. Это не раз случалось в развитии, что содержание моего поста было пусто, пока я не понял причину.
На некоторое время теперь, я начинал мои фильтры с return $value
заявлением на конце, которое уменьшало проблемы как это к минимуму.
Удаление действий и фильтров
Удаление действия или фильтра с крючка не является редкостью. Популярным примером было удаление смайликов из WordPress 4.2.
Весь плагин Disable Emojis можно свести к этому коду:
function disable_emojis() {
remove_action( 'wp_head', 'print_emoji_detection_script', 7 );
remove_action( 'admin_print_scripts', 'print_emoji_detection_script' );
remove_action( 'wp_print_styles', 'print_emoji_styles' );
remove_action( 'admin_print_styles', 'print_emoji_styles' );
remove_filter( 'the_content_feed', 'wp_staticize_emoji' );
remove_filter( 'comment_text_rss', 'wp_staticize_emoji' );
remove_filter( 'wp_mail', 'wp_staticize_emoji_for_email' );
}
add_action( 'init', 'disable_emojis' );
И Есть также плагины, которые отключают wpautop()
функцию, которая может быть только одна строка в вашей теме functions.php
.
remove_filter( 'the_content', 'wpautop' );
Как вы могли догадаться из этих примеров, remove_action()
и remove_filter()
принять три аргумента:
- Крюк
- Функции
- Приоритет.
Все они должны соответствовать значениям от add_action()
и add_filter()
. Сложная часть здесь заключается в том, что соединение будет удалено только в том случае, если оно уже добавлено.
Как найти крючки?
Это может быть страшно думать о 1957 (!) Крючки, что WordPress в настоящее время, в соответствии с крючком базы данных Адама Брауна,но вы не должны учиться их. Вам нужно только знать, что, что бы вы хотели изменить или добавить, есть, вероятно, крючок для него.
Для начала можно просто изучить функции, которые вы уже используете в существующем коде, как я сделал wp_head()
выше, и the_content()
.
Другим ресурсом является страница для плагина API, в котором перечислены важные функции и их детали.
Отладка крючков
Чтобы широко отладить крючки, можно создать список всех крючковатых действий и фильтров, как показано на Jean-Baptiste Jung.
Использование ошибки()
Для отладки фильтров, особенно в живых средах, я хотел бы использовать error_log()
в сочетании с DEBUG-LOG включен. Это напишет мой выход в debug.log
файл, но не отобразит его в передней части.
function example_content_filter( $content ){
$option = get_option( 'add_haha' );
error_log( $option );
if( $option === true ){
$content .= 'HAHA<br/>' . $content;
}
return $content;
}
add_filter( 'the_content', 'example_content_filter' );
В сценарии выше, я подготовила HAHA
строку к содержанию, но только если мой вариант возвращается true
. Если это не работает по какой-то причине, я могу использовать error_log( $option );
для отладки значение опциона, написав его в журнал, чтобы проверить позже, не нарушая содержимое, которое видно посетителям в передней части.
Использование API Крючка
Еще один способ отладить крючки с помощью одной из функций, упомянутых выше, как doing_action()
или did_action()
.
Один отсутствует в этом списке: current_filter()
(или current_action()
). Его можно использовать для отображения имени текущего крючка, как в этом примере, взятом из Кодекса:
function my_filter() {
echo current_filter(); // 'the_content'
}
add_filter( 'the_content', 'my_filter' );
Если вы хотите увидеть где-то, что ядро использует это, а затем проверить капитал -P’dangit(). Бьюсь об заклад, что большинство из вас не знали, такой фильтр существует.
Использование плагина
Есть также бесчисленное множество плагинов для отладки там, что позволяет увидеть список всех крючков и крючковатых функций в передней части. Я лично остановился на debug объектов.
Начало работы
Обучение крючки, как изучение права: Вам не нужно знать все заявления и пункты, только где их найти. Вы также никогда не понадобится все из них, но я надеюсь, что теперь вы понимаете, решения размещены в форумах немного лучше. Или вы можете начать, приболее поближе взглянув на любую функцию, которую вы уже используете.
Препятствуйте мне знать в комментариях о вашем опыте «крючка».
Источник: smashingmagazine.com