Функция register_activation_hook()
позволяет вам регистрировать хук активации для вашего плагина в WordPress. Когда плагин активируется, вызывается действие activate_PLUGINNAME
, где PLUGINNAME
— это имя вашего плагина, включая опциональный подпапку. Например, если ваш плагин расположен в wp-content/plugins/my_custom_plugin/my_plugin.php
, хук будет выглядеть как activate_my_custom_plugin/my_plugin.php
. Если плагин состоит всего из одного файла, то хук будет просто activate_my_plugin.php
.
register_activation_hook( string $file, callable $callback )
Параметры
- $file (string, обязательный): Полное имя файла плагина, включая путь.
- $callback (callable, обязательный): Функция, которая будет вызываться при активации плагина.
Пример использования
В следующем примере мы создадим простую функцию для активации плагина, которая будет добавлять опцию в базу данных:
// Основной файл плагина
function my_custom_plugin_activate() {
// Добавляем опцию в базу данных
add_option('my_custom_plugin_option', 'значение по умолчанию');
// Другой код активации плагина
}
register_activation_hook(__FILE__, 'my_custom_plugin_activate');
Примечание о потоке выполнения
Важно помнить, что после активации плагина происходит немедленный редирект. Это означает, что нельзя использовать функции add_action()
или add_filter()
до выполнения редиректа. Чтобы обойти это ограничение, можно использовать add_option()
или вызывать действия сразу после активации:
function my_custom_plugin_activate() {
add_option('activated_plugin', 'my_custom_plugin');
}
register_activation_hook(__FILE__, 'my_custom_plugin_activate');
function load_plugin() {
if (is_admin() && get_option('activated_plugin') === 'my_custom_plugin') {
delete_option('activated_plugin');
// Выполняем действия после активации
}
}
add_action('admin_init', 'load_plugin');
Важно помнить о области видимости переменных
Если вы используете глобальные переменные, то ваша функция, переданная в register_activation_hook()
, может не иметь к ним доступа. Например:
$myvar = 'значение';
function my_plugin_activate() {
global $myvar;
echo $myvar; // Это не выведет 'значение'!
}
register_activation_hook(__FILE__, 'my_plugin_activate');
Чтобы это исправить, нужно объявить переменную как глобальную в каждой функции, где вы хотите к ней обратиться.
Примеры использования register_activation_hook()
- Создание таблицы в базе данных
Описание, как использовать хук для создания таблицы при активации плагина:
function my_plugin_create_table() {
global $wpdb;
$table_name = $wpdb->prefix . 'my_custom_table';
$charset_collate = $wpdb->get_charset_collate();
$sql = "CREATE TABLE $table_name (
id mediumint(9) NOT NULL AUTO_INCREMENT,
name tinytext NOT NULL,
PRIMARY KEY (id)
) $charset_collate;";
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
dbDelta($sql);
}
register_activation_hook(__FILE__, 'my_plugin_create_table');
- Настройка параметров плагина
Пример, как использовать хук для добавления параметров по умолчанию:
function my_plugin_activate() {
add_option('my_plugin_setting', 'default_value');
}
register_activation_hook(__FILE__, 'my_plugin_activate');
- Создание пользовательских записей
Создание пользовательских записей при активации:
function my_plugin_create_custom_post_type() {
// Создание пользовательского типа записи
register_post_type('my_custom_post', array(
'label' => 'My Custom Posts',
'public' => true,
'supports' => array('title', 'editor', 'thumbnail'),
));
}
register_activation_hook(__FILE__, 'my_plugin_create_custom_post_type');
- Обработка возможных ошибок при активации плагина:
Добавление проверки на наличие ошибок и вывод сообщений:
function my_plugin_activate() {
global $wpdb;
// Пример кода для создания таблицы
// ...
if ($result) {
// Успешное создание
} else {
// Обработка ошибки
deactivate_plugins(plugin_basename(__FILE__)); // Деактивация плагина
wp_die('Ошибка активации плагина. Пожалуйста, проверьте логи.');
}
}
register_activation_hook(__FILE__, 'my_plugin_activate');
Заключение
Функция register_activation_hook()
является важной частью разработки плагинов для WordPress, позволяя вам выполнять код во время активации. Убедитесь, что вы правильно используете хуки и учитываете особенности области видимости переменных, чтобы избежать неожиданных ошибок.