Разница между do_action и add_action

20

Этот вопрос может быть неправильным, я не уверен в этом. Потому что я не совсем уверен в этом.

Я знаю, что add_actionон используется для привязки нашей функции к указанной функции. Например, add_action('wp_head'.'myfunc');теперь любой код в myfuncбудет выполняться в wp_head(). Это понятно, но у меня есть сомнения в do_actionтом, что он делает?

Я думаю, что он используется для создания наших собственных хуков, таких как уже доступные хуки (wp_head, wp_footer и т. Д.). Если я прав, может кто-нибудь показать мне простой понятный ответ на простом примере.

Я пробовал разницу в Интернете, но все указывают на разницу между add_action и add_filter. Я не хочу туда идти, потому что сначала я хочу уточнить это, а затем я перееду туда.

Кто-нибудь может мне помочь?

РЕДАКТИРОВАТЬ после вопроса POST

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');
солнце
источник
Что происходит, когда вы звоните do_action('custom'); после регистрации обратного вызова? И убедитесь, что jQuery загружен.
fuxia
я не получил предупреждающее сообщение ни на
вс
jQuery загружены. Когда я подключаю ту же функцию, wp_headона работает нормально, но не сcustom
вс
Солнце, я полагаю, что на твой оригинальный вопрос ответил toscho, и ты должен пометить это как решенное. Правки № 3 и № 4, которые вы сделали, относятся к новому Вопросу .
brasofilo

Ответы:

13

Используйте do_action( 'unique_name' )для создания своих собственных действий.

Вы можете использовать это, чтобы предложить API для вашего плагина , чтобы другие плагины могли регистрировать обратные вызовы для ваших пользовательских действий. Пример: мне нужно вызвать do_action в моем плагине?

Но вы также можете использовать настраиваемые действия (или фильтры) в теме. Пример: лучший способ внедрения пользовательских разделов в тему WordPress

И вы можете комбинировать и плагин, и тему, работающую вместе. Пример: Как сделать метод из плагина доступным в теме?

Сводка: add_action( 'foo' )регистрирует обратный вызов, do_action( 'foo' )выполняет тот зарегистрированный обратный вызов.

Фуксия
источник
Спасибо за помощь, которую я получил, это в основном для целей API. Я попробовал образец, но он не сработал. Можете ли вы найти какие-либо проблемы там? Проверьте мой РЕДАКТИРОВАТЬ @toscho
вс
Можем ли мы сказать это как еще один случай, как наследство? чтобы расширить и переопределить класс, мы идем этим путем. Это верно?
вс
@sun Хм, да, но вы можете объединить оба подхода , они не являются взаимоисключающими.
fuxia
1

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

Ваш код плагина выполняется ранее 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.
Дейв Скотезе
источник
0

do_action: Регистрирует ловушку действия while add_action: добавляет функцию обратного вызова к зарегистрированной ловушке.

пример

Учтите, что вы хотели напечатать что-то перед боковой панелью в вашем шаблоне.

  1. Вы добавите ловушку действия в свой файл шаблона index.phpчерез <?php add_action('bp_sidebar_left'); ?>.
  2. Теперь в вашем functions.phpфайле вы можете добавить функцию обратного вызова в этот хук, чтобы напечатать что-то, что вы хотите.

add_action('bp_sidebar_left', 'bp_sidebar_left_cb'); function bp_sidebar_left_cb() { echo 'Hello World !'; }

Аамер Шахзад
источник
-1

Вы должны использовать, как показано ниже:

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
user112289
источник
Это работает для меня
user112289