Функция do_action_ref_array()
в WordPress вызывает функции обратного вызова, которые были добавлены к определённому хуку действия, передавая аргументы в виде массива. Эта функция полезна, когда вы хотите передать несколько аргументов, хранящихся в массиве, и при этом сохранять возможность изменять эти аргументы в самом обработчике.
do_action_ref_array( string $hook_name, array $args )
Параметры
- $hook_name (string) (обязательный): Название действия, которое должно быть выполнено.
- $args (array) (обязательный): Аргументы, передаваемые функциям, подключённым к хуку.
Возвращает
Функция ничего не возвращает (null).
Примечание
do_action_ref_array()
полезна, когда у вас есть массив аргументов, которые нужно передать обработчикам хуков. Также эта функция позволяет изменять значения аргументов по ссылке.
Пример 1: Создание хука с передачей параметра по ссылке
В этом примере мы создадим хук и изменим переданный параметр внутри функции обратного вызова.
// Добавляем коллбэк функцию к хуку
add_action('my_custom_hook', 'my_custom_callback');
function my_custom_callback(&$value) {
$value += 5; // Увеличиваем значение на 5
}
$num = 10; // Исходное значение
// Вызов хука
do_action_ref_array('my_custom_hook', array(&$num));
echo $num; // Выведет 15
Пример 2: Разница между do_action()
и do_action_ref_array()
Этот пример демонстрирует, как можно использовать do_action_ref_array()
с массивом аргументов.
$args = array('first_arg', 42, 'another_arg');
do_action_ref_array('another_custom_hook', $args);
// То же самое, что и
do_action('another_custom_hook', 'first_arg', 42, 'another_arg');
Оба способа приведут к вызову функций, подключённых к хуку another_custom_hook
, с переданными аргументами.
Пример 3: Использование объектов
Если массив содержит объект, его не нужно передавать по ссылке, так как объект передается по ссылке автоматически.
// Создаем объект
$my_object = new stdClass();
$my_object->value = 5;
// Добавляем коллбэк к хуку
add_action('my_object_hook', 'my_object_callback');
function my_object_callback($obj) {
$obj->value += 10; // Увеличиваем значение объекта на 10
}
// Вызов хука
do_action_ref_array('my_object_hook', array($my_object));
echo $my_object->value; // Выведет 15
В этом примере мы изменяем свойство объекта $my_object
внутри функции обратного вызова.
Пример 4: Передача множества параметров
В этом примере мы покажем, как передавать несколько параметров с помощью do_action_ref_array()
.
// Подключаем коллбэк к хуку с четырьмя параметрами
add_action('multi_param_hook', 'multi_param_callback', 10, 4);
function multi_param_callback($arg1, $arg2, $arg3, $arg4) {
print_r(func_get_args(); // Выводим переданные аргументы
}
$args = array('value1', 'value2', 'value3', 'value4');
// Вызов хуку с отдельными аргументами
do_action('multi_param_hook', $args[0], $args[1]);
// Вызов хуку с массивом аргументов
do_action_ref_array('multi_param_hook', $args);
Этот код демонстрирует, как передать несколько параметров как по отдельности, так и как массив.
Заключение
Функция do_action_ref_array()
предоставляет гибкость в передаче аргументов к хукам действий в WordPress. Используя её, разработчики могут динамически управлять аргументами и изменять их по ссылке, что делает код более эффективным и модульным.