Зачем дополнительно передавать аргументы в do_action() Wordpress, если они уже переданы функции
Есть код (приведен ниже), который используется, чтобы продемонстрировать работу хуков WP.
Возник вопрос:
зачем в do_action( 'my_hook' ); дополнительно передавать аргументы $a и $b, если они уже приняты функцией do_my_hook() при ее запуске, обработаны, и мы получим результат их обработки?
А по связке add_action( 'my_hook', 'do_my_hook'); - do_action( 'my_hook' ); просто запускается эта функция.
<?php
// Определяем аргументы для хука action
$a = $defined; // $defined какая-нибудь динамическая логическая переменная
$b = 'А это значение второй переменной';
// Включаем хук. Здесь он будет выполняться
do_action( 'my_hook', $a, $b );
function do_my_hook( $a, $b ){
// если переданная переменная $a равна true,
// то, например, удалим запись 10
if( $a===true )
wp_delete_post(10);
// а тут просто выведем переменную на экран
echo '<br />'.$b; // выведет значение второй переменной
}
// Регистрируем хук через
// add_action( $tag, $function_to_add, $priority, $accepted_args );
add_action( 'my_hook', 'do_my_hook', 10, 2 );
Ответы (1 шт):
Вы говорите что аргументы уже переданы в функцию, но аргументы в функцию ведь и передаются из do_action() (Вы же делаете ее вызов используя do_action()) или Вы можете показать какое-то другое место где Вы еще их можете передать или передаете?
В WordPress do_action(), можно сказать, что это некий аналог использования или вызова ф-ции в PHP, а Вы ведь аргументы передаете при вызове ф-ции, верно? В тоже время add_action(), это аналог создания ф-ции, а при создании вы ведь туда не передаете никаких аргументов, аргументы Вы передаете уже при ее вызове.
если они уже приняты функцией do_my_hook() при ее запуске, обработаны, и мы получим результат их обработки
Я вижу что Вы немного подредактировали вопрос. Где они приняты и обработаны если Вы, допустим, не передаете их в do_action()? Разве у Вас в коде есть какое-то другое место где вызывается функция do_my_hook()?
Скорее всего Вы не понимаете сути самого примера. Допустим Ваша ф-ция function do_my_hook( $a, $b ){} будет лежать в файле functions.php, Вы ее там создали, а делать вызов этой функции при помощи do_action() вы будете в файле header.php и каким образом Ваша ф-ция получит эти аргументы и откуда, если Вы их не передадите? При написании PHP функции Вы только указываете, что она принимает такие-то аргументы, но Вы их туда не передаете, передаете Вы их при вызове самой функции. Ну и Вы же не думаете что вызов хука при помощи do_action() происходит там же где и пишется ф-ция которую Вы туда цепляете.