Разница между действием "выполнить" и действием "добавить"
Этот вопрос может быть неправильным, я не уверен в этом. Потому что мне это не совсем ясно.
Я знаю, что add_action
он используется для подключения нашей функции к указанной функции. Напримерadd_action('wp_head'.'myfunc');
теперь любой код в myfunc
будет выполняться в wp_head()
. Это ясно, но у меня есть сомнения в do_action
том, что он делает?
Я думаю, что он используется для создания нашего собственного крючка, такого как уже доступные крючки (wp_head, wp_footer и т. Д.) Если я прав, может ли кто-нибудь показать мне простой понятный ответ на простом примере.
Я пробовал разницу в Интернете, но все указывают на разницу между add_action и add_filter. Я не хочу туда ехать, потому что сначала я хочу это прояснить, а потом перееду туда.
Кто-нибудь может мне помочь?
РЕДАКТИРОВАТЬ после СООБЩЕНИЯ с вопросом
function custom_register()
{
echo '<script>jQuery(document).ready(function(){alert("Learning Hooks");});</script>';
}
do_action('custom');
add_action('custom','custom_register');
Я попробовал это в плагине, но не получил предупреждающего сообщения.
Но когда я подключаю ту же функцию с помощью wp_head
, то она работает отлично
/******************working****************/
add_action('wp_head','custom_register');
4 answers
Используйте do_action( 'unique_name' )
для создания собственных действий.
Вы можете использовать это, чтобы предложить API для вашего плагина , чтобы другие плагины могли регистрировать обратные вызовы для вашего пользовательского действия. Пример: Нужно ли мне вызывать do_action в моем плагине?
Но вы также можете использовать пользовательские действия (или фильтры) в теме. Пример: Наилучший практический способ внедрения пользовательских разделов в тему WordPress
И вы можете объединить и то, и другое, чтобы плагин и тема работали вместе. Пример: Как сделать метод из плагина доступным в теме?
Сводка: add_action( 'foo' )
регистрирует обратный вызов, do_action( 'foo' )
выполняет этот зарегистрированный обратный вызов.
Это мое предположение, поэтому, если вы знаете лучше, пожалуйста, сделайте комментарий, чтобы я мог обновить свое предположение.
Ваш код плагина выполняется до wp_head()
(что, как мы можем предположить, вызовет действия, добавленные к нему). Когда вы add_action('wp_head','custom_register')
, вы говорите PHP, что когда (в будущем) будет вызван do_action('wp_head')
, также следует вызвать custom_register()
. То же самое относится и к вашему вызову add_action('custom','custom_register')
, но, как вы видите в своем коде, вызов do_action('custom')
уже был сделан, и когда он был вызван, к нему (еще) не было добавлено никаких действий.
Этот вот почему Тошо спросил, что происходит, когда ты звонишь do_action('custom')
после вы зарегистрировали обратный вызов. Ваш ответ о бэкэнде и интерфейсе неоднозначен. Если вы поменяете местами последние две строки в следующем коде, я думаю, это сработает:
function custom_register()
{
echo '<script>jQuery(document).ready(function(){alert("Learning Hooks");});</script>';
}
do_action('custom'); // This is called before it will have an effect.
add_action('custom','custom_register'); // Too late - do_action was already called.
do_action
: Регистрирует крючок действия, в то время как
add_action
: добавляет функцию обратного вызова к зарегистрированному перехвату.
Пример
Подумайте, что вы хотели напечатать что-то перед боковой панелью в своем шаблоне.
- Вы добавите крючок действия в файл шаблона
index.php
через<?php add_action('bp_sidebar_left'); ?>
. - Теперь в вашем файле
functions.php
вы можете добавить функцию обратного вызова к этому крючку, чтобы напечатать то, что вы хотите.
add_action('bp_sidebar_left', 'bp_sidebar_left_cb');
function bp_sidebar_left_cb() {
echo 'Hello World !';
}
Вы должны использовать, как показано ниже:
function custom_register()
{
echo '<script>jQuery(document).ready(function(){alert("Learning Hooks");});</script>';
}
.
add_action('custom','custom_register'); // Too late - do_action was already called.
do_action('custom'); // This is called before it will have an effect