Поддержка Проблемы и решения аргумент для callback-функции в add_action

  • Всем привет.

    Не пойму как в функцию, которая цепляется на add_action передать аргумент.

    Из того что пишут, вроде как через do_action это должно работать.

    Однако взять если самый даже примитивный пример:

    $var = 1;
    function name($var) {
        echo "rezult:".$var;
    }
    add_action('wp_head', 'name', 10, 1);
    do_action('name', $var);

    И в результате выводиться только: rezult:

    Заранее спасибо.

Просмотр 5 ответов — с 1 по 5 (всего 5)
  • видимо к wp_head нельзя прикрутить параметры напрямую, такой код работает:

    $var = 1;
    function name() {}
    add_action('wp_head', 'name', 10);
    
    function name_attached_function($var) {
    	echo "rezult:".$var;
    }
    add_action('name', 'name_attached_function', 10, 1);
    
    do_action('name', $var);

    смысл в том, чтобы навесить на wp_head пустую функцию, а уже к этой пустой функции присобачить функцию с параметрами.

    wp_head взята для примера. Я не совсем понял как функции, которую цепляешь на хук передавать параметры. Из ответов слышал использовать глобальные переменные.. но этот вариант мне не нравиться..

    Вроде как через do_action если я правильно понял можно передавать параметры для некоторых, но не всех хуков..

    Модератор Yuri

    (@yube)

    Вроде как через do_action если я правильно понял можно передавать параметры для некоторых, но не всех хуков..

    do_action() как раз и определяет новый хук и параметры, которые могут передаваться его обработчикам. Хукам, определенным в движке/плагинах/теме, нельзя поменять количество параметров, не вмешиваясь руками в их код. А лезть руками в чужой код — mauvais ton (в сообществе Вордпресс).

    add_action() задает имя функции — обработчика для указанного хука и количество принимаемых параметров (может быть меньше допустимого для хука, по умолчанию — 1). Функции передаются те параметры, которые указаны в соотв. do_action().

    Поэтому Ваш «примитивный пример», в котором do_action и add_action используют разные имена хуков как бы не совсем годится для иллюстрации.

    Вот примитивный пример хука и обработчика с двумя параметрами.

    function my_hook_handler($arg_1, $arg_2) {
      echo "arg_1 = $arg_1, arg_2 = $arg_2\n";
    }
    
    add_action('my_hook', 'my_hook_handler', 10, 2); # 2 - два параметра
    
    do_action('my_hook', 'foo', 'bar');

    > Из ответов слышал использовать глобальные переменные.. но этот вариант мне не нравиться..

    Используйте классы (в том числе для написания кода) и их свойства, если просто глобальные не нравятся

    Спасибо за ответы. Теперь есть представление как действовать дальше. 🙂

Просмотр 5 ответов — с 1 по 5 (всего 5)
  • Тема «аргумент для callback-функции в add_action» закрыта для новых ответов.