Разница между действием "выполнить" и действием "добавить"


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

Я знаю, что 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');
Author: sun, 2013-10-28

4 answers

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

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

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

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

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

 18
Author: fuxia, 2017-04-13 12:37:42

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

Ваш код плагина выполняется до 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.
 2
Author: Dave Scotese, 2016-02-14 19:23:47

do_action : Регистрирует крючок действия, в то время как 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
Author: Aamer Shahzad, 2018-04-19 06:10:05

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

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
 -1
Author: user112289, 2017-02-01 17:12:41