Зачем дополнительно передавать аргументы в 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 шт):

Автор решения: Simon

Вы говорите что аргументы уже переданы в функцию, но аргументы в функцию ведь и передаются из 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() происходит там же где и пишется ф-ция которую Вы туда цепляете.

→ Ссылка