register_activation_hook()
Реєструє функцію, яка спрацьовуватиме під час активації плагіна.
Ця функція прикріплює вказану функцію callback до хука activate_(plugin) і є обгорткою для цього хука. (Plugin) тут замінюється назвою відносного шляху до головного файлу плагіна. Наприклад, головний файл плагіна: wp-content/plugins/sampleplugin/sample.php
тоді назва хука буде: activate_sampleplugin/sample.php
.
З версії 3.1. хук спрацьовує лише під час активації плагіна і не спрацьовує під час автоматичного оновлення плагіна.
Докладніше про те, як працює активація плагіна.
Активація плагіна для мережі Мультисайт: дивіться тут .
Правила використання
Функція не буде працювати, якщо викликати її в момент спрацьовування будь-якого хука, plugins_loaded
наприклад init
. Функція повинна викликатись безпосередньо з головного файлу плагіна.
Правила активації:
register_activation_hook() повинна викликатися з основного файлу плагіна, з того, де розташована директива
Plugin Name: ...
і не повинна викликатися з будь-якого хука, на кшталтplugins_loaded
абоinit
.Функція хука повинна бути в тому ж файлі, що і хук або підключатися заздалегідь з іншого файлу.
Функція хука не працює на екран (echo). Тому що відбувається редирект і echo ви не побачите. Але можна використовувати die() .
- Глобальні змінні (якщо вони є) повинні бути явно визначені, щоб був доступ до них з функції хука.
Нотатка про область змінних
При активації плагіна, головний файл плагіна підключається над глобальної області, а всередині функції activate_plugin() . Тому змінні, які у звичайному режимі роботи плагіна вважаються глобальними, не будуть такими.
Так, функція, яка використовується в register_activation_hook() може не бачити глобальні змінні, навіть якщо ви оголосили їх як глобальні всередині цієї функції:
$ myvar = 'щось'; register_activation_hook( __FILE__, 'myplugin_activate'); function myplugin_activate(){ global $myvar; echo $ myvar; // Змінна не дорівнює 'щось' }
Через цю особливість усі глобальні змінні мають бути визначені як глобальні, навіть якщо змінна вказується в тілі плагіна. Доступ до них будь-де буде лише за такого підходу:
global $myvar; // Вказуємо явно, що це глобальна змінна $ myvar = 'щось'; register_activation_hook( __FILE__, 'myplugin_activate'); function myplugin_activate(){ global $myvar; echo $ myvar; //> щось }
Хуків немає.
Повертає
null
. Нічого не вертає.
Використання
register_activation_hook($file, $function);
-
$file
(рядок) (обов’язковий) -
Шлях до головного php файлу плагіна, включаючи назву самого плагіна. Зазвичай використовується магічна константа PHP
__FILE__ . -
$function
(рядок/масив/лямбда) (обов’язковий) Назва функції зворотного дзвінка. Для класів використовуйте масив:
array( $this, 'название_функции' );
.Функція отримає логічну змінну $network_wide – чи активується плагін для всієї мережі сайтів при мультисайті.
Приклади
Хороші приклади використання активації, деактивації та видалення плагіна всередині класу (ООП) дивіться в прикладах register_deactivation_hook .
#1 Запуск функції активації плагіна
Припустимо, у нас є функція my_plugin_activate() в основному файлі плагіна: wp-content/plugins/myplugin/myplugin.php
, тоді для запуску цієї функції під час активації плагіна використовуйте такий код:
register_activation_hook( __FILE__, 'my_plugin_activate' ); function my_plugin_activate() { // Код активації ... }
#2 Запуск методу класу
Якщо плагін використовує PHP клас, код активації додається так:
register_activation_hook( __FILE__, array( 'My_Plugin', 'install' ) ); class My_Plugin { static function install() { // Не створюйте тут жодного висновку... } }
#3 Запуск методу класу з окремого файлу
Якщо клас, який містить функцію активації, знаходиться в окремому файлі, то реєструйте функцію активації так:
include_once __DIR__ . '/class-My_Plugin.php'; register_activation_hook( __FILE__, array( 'My_Plugin', 'on_activate_function' ) );
#4 Запуск методу класу із самого класу
Якщо ви знаходитесь всередині __construct() . Важливо, __FILE__
має «дивитися» на головний файл плагіна:
register_activation_hook( __FILE__, array( $this, 'YOUR_METHOD_NAME' ) );
#5 Робимо щось відразу після активації плагіна
Після активації плагіна спрацьовують лише два хуки: activated_plugin
і shutdown
.
Коли потрібно зробити щось відразу після активації плагіна, можна причепити функцію до них.
Коли таке рішення не підходить, можна використовувати опції WP: зберігати дані в опцію і потім перевіряти наявність опції, і робити щось, якщо опція є:
Інший варіант зробити щось під час активації плагіна – це створити свою подію так:
function my_plugin_activate(){ // Встановлюємо свій хук, щоб до нього можна було причепитися із файлів самого плагіна do_action( 'my_plugin_activate'); } register_activation_hook( __FILE__, 'my_plugin_activate' );
#6 Ще демонстрація використання функції
Невеликий плагін, що демонструє, як потрібно використовувати функцію:
/* Plugin Name: A Test Description: A Test */ require_once dirname(__FILE__) . '/my_other_file.php'; /* Цей код не працюватиме. Хук активації повинен викликатись з основного файлу. register_activation_hook (dirname(__FILE__). '/my_other_file.php', 'my_other_function'); */ // Це робочий код. register_activation_hook( __FILE__, 'test_activated' ); /* Це правильний варіант оголошення та доступу до глобальних змінних. Глобальні змінні мають бути оголошені чітко. Без цього ви не матимете доступу до них. */ global $some_var; $some_var = 'hey'; // Функція активації function test_activated(){ // тут $some_var не буде рівно hey global $some_var; // А тут $some_var дорівнюватиме hey // Ця функція визначена у файлі 'my_other_file.php' my_other_function(); /* Цей варіант не працюватиме. Якщо потрібно записати логи у тимчасовий файл, використовуйте fopen/fwrite. Якщо ви хочете перевірити, чи працює хук активації, використовуйте exit() усередині функції хука. */ echo 'test_activated called!'; }
список змін
З версії 2.0.0 | Введено. |
Код register_activation_hook() register activation hook WP 6.0.2
function register_activation_hook( $file, $callback ) { $ file = plugin_basename ($ file); add_action( 'activate_' . $file, $callback ); }