do_action()
Створює подію (можливість запустити php функції у потрібний момент роботи коду). Підключати php функцію до події за допомогою add_action() .
Також дивіться аналогічну функцію: do_action_ref_array() .
ВАЖЛИВО: Якщо не передати жоден параметр у хук, то функція хука все одно отримає один параметр зі значенням ''
(порожній рядок).
add_action( 'action_name', function( $first ){ var_dump($first); } ); do_action( 'action_name'); // виведе> string(0) ""
Не передавайте масив з одним об’єктом
При виклику do_action, якщо переданий $arg є масивом з одним об’єктом, замість нього буде переданий саме цей об’єкт, а не масив. Однак, якщо єдиний елемент масиву не є об’єктом, такої заміни не станеться.
Приклад:
function my_callback( $should_be_an_array ){ print_r ($ should_be_an_array); } add_action( 'my_action', 'my_callback'); do_action( 'my_action', array( new stdclass() ) ); /* stdClass Object() */ do_action( 'my_action', array( 'array_item_thats_not_an_object') ); /* Array ( [0] => array_item_thats_not_an_object ) */
Зверніть увагу, що вперше ми передали масив із класом stdclass, але функція зворотного виклику отримала лише клас stdclass, а не масив!
Крім подій WP також є фільтри – apply_filters() . Принцип роботи у них такий самий – створюємо фільтр і прикріплюємо до нього функцію php яка спрацює під час роботи фільтра.
Різниця між фільтрами та подіями у цьому, що фільтр отримує якісь дані і має повернути ці дані після їх обробки, тобто. він фільтрує (змінює) дані, а подія тільки запускає прикріплені до нього функції в потрібний момент, передавши в них якісь параметри.
(дуже швидко) | 50000 разів – 0.03 сек
(швидкість світла)
Хуків немає.
Повертає
null
. Нічого не вертає.
Використання
do_action( $tag, $arg_a, $arg_b, ...);
-
$tag
(рядок) (обов’язковий) - Назва хука, що створюється.
-
$arg_a
(рядок/масив/число/об’єкт/логічний) -
Значення аргументу, який буде передано.
За замовчуванням аргумент не існує -
$arg_b
(рядок/масив/число/об’єкт/логічний) -
Значення ще одного аргументу…
За замовчуванням аргумент не існує -
$arg_с
(рядок/масив/число/об’єкт/логічний) - Функції можна передавати безліч аргументів.
Приклади
#1 Приклад використання
Цю функцію можна використовувати в плагінах, темах і т.д., коли потрібно впровадитись у процес виконання коду, звідкись з іншого місця. Наприклад, “зачіпку” (хук) (do_action) ми встановили в плагіні, а “чіплятися” за неї будемо з файлу functions.php в той момент, коли спрацьовуватиме наша “зачіпка”.
Допустимо, ми використовували такий код у плагіні:
<?php // Визначаємо аргументи для хука action $a = $defined; // $defined якась динамічна логічна змінна $b = 'А це значення другої змінної'; // Включаємо хук. Тут він виконуватиметься do_action( 'my_hook', $a, $b);
Тепер ми можемо зробити якусь дію в момент спрацьовування функції do_action і при цьому описати нашу дію можна, наприклад, з файлу functions.php, розмістивши в ньому такий код:
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);
Дії відрізняються від фільтрів, тим що дані, що передаються дією, не повертаються назад у функцію і не використовуються там надалі, а всього лише передаються для використання в функції хука.
#2 Приклад використання 2
Десь у (mu-)плагіні, темі чи ядрі. Наприклад, у файлі functions.php:
/** * У вас може бути стільки аргументів, скільки ви хочете, * але ваша функція зворотного виклику та виклик add_action повинні бути узгоджені за кількістю аргументів. * Примітка: `add_action` вище має 2, а 'i_am_hook' приймає 2. * Ви знайдете подібні хуки дій у багатьох темах та плагінах та у багатьох місцях @core. * @see: https://codex.wordpress.org/Plugin_API/Action_Reference */ /** * Визначаємо функцію зворотного виклику * Всередині цієї функції ви можете робити все, що вам заманеться. * Зі змінними, які завантажені у викликі do_action() вище. */ function who_is_hook( $a, $b ) { print_r($a); // `print_r` дані масиву всередині 1-го аргументу echo $b; // Виводимо символ перекладу рядка та значення 2-го аргументу } // потім додати його в хук дії, зіставивши певну кількість (2) аргументів у do_action // див. [https://codex.wordpress.org/Function_Reference/add_action] у Кодексі // add_action($tag, $function_to_add, $priority, $accepted_args); add_action( 'i_am_hook', 'who_is_hook', 10, 2); // Define the arguments for the action hook $a = array( 'eye patch' => 'yes', 'parrot' => true, 'wooden leg' => 1 ); $b = 'And Hook said: "I ate ice cream with Peter Pan."'; // Executes the action hook named 'i_am_hook' do_action( 'i_am_hook', $a, $b);
Результат:
Array ( ['eye patch'] => 'yes' ['parrot'] => true ['wooden leg'] => 1 ) And hook said: "I ate ice cream with Peter Pan."
нотатки
- Global. WP_Hook[]. $wp_filter Stores all of the filters and actions.
- Global. int[]. $wp_actions Stores number of times each action був triggered.
- Global. Рядок[]. $wp_current_filter Stores список поточних filtrів з поточним одним останнім.
список змін
З версії 1.2.0 | Введено. |
З версії 5.3.0 | Formalizated existing and already documented …$arg parameter by adding it to the функція signature. |