register_deactivation_hook()
Регистрирует функцию, которая будет запускаться после деактивации плагина.
Вешает указанную во втором параметре функцию на событие deactivate_PLUGINNAME. Это событие вызывается, когда плагин деактивируется.
Здесь PLUGINNAME — это имя плагина:
-
Например, если плагин находится в
wp-content/plugins/sampleplugin/sample.php, то имя хука будет:deactivate_sampleplugin/sample.php. - Если плагин состоит только из одного файла
wp-content/plugins/sample.php,
то имя хука будет:deactivate_sample.php.
Хуков нет.
Возвращает
null. Ничего не возвращает.
Использование
register_deactivation_hook( $file, $function );
- $file(строка) (обязательный)
- Путь до главного файла плагина в рубрике
wp-content/plugins. Можно указать полный путь. Обычно используется волшебная константа __FILE__. - $function(строка/массив) (обязательный)
- Название функции обратного вызова (callback), которая будет запускаться при деактивации плагина.
Примеры
#1 Обычные функции (не классы)
Этот демонстрационный пример, показывает как вызывать функции Активация/деактивация/удаления в файле плагина:
<?php
defined( 'ABSPATH' ) OR exit;
/**
* Plugin Name: (WCM) Activate/Deactivate/Uninstall - Functions
* Description: Example Plugin to show activation/deactivation/uninstall callbacks for plain functions.
* Author: Franz Josef Kaiser/wecodemore
* Author URL: http://unserkaiser.com
* Plugin URL: http://wordpress.stackexchange.com/questions/25910/uninstall-activate-deactivate-a-plugin-typical-features-how-to/25979#25979
*/
function WCM_Setup_Demo_on_activation()
{
if ( ! current_user_can( 'activate_plugins' ) )
return;
$plugin = isset( $_REQUEST['plugin'] ) ? $_REQUEST['plugin'] : '';
check_admin_referer( "activate-plugin_{$plugin}" );
// Расcкомментируйте эту строку, чтобы увидеть функцию в действии
// exit( var_dump( $_GET ) );
}
function WCM_Setup_Demo_on_deactivation()
{
if ( ! current_user_can( 'activate_plugins' ) )
return;
$plugin = isset( $_REQUEST['plugin'] ) ? $_REQUEST['plugin'] : '';
check_admin_referer( "deactivate-plugin_{$plugin}" );
// Расcкомментируйте эту строку, чтобы увидеть функцию в действии
// exit( var_dump( $_GET ) );
}
function WCM_Setup_Demo_on_uninstall()
{
if ( ! current_user_can( 'activate_plugins' ) )
return;
check_admin_referer( 'bulk-plugins' );
// Важно: проверим тот ли это файл, который
// был зарегистрирован в процессе хука удаления.
if ( __FILE__ != WP_UNINSTALL_PLUGIN )
return;
// Раскомментируйте эту строку, чтобы увидеть функцию в действии
// exit( var_dump( $_GET ) );
}
register_activation_hook( __FILE__, 'WCM_Setup_Demo_on_activation' );
register_deactivation_hook( __FILE__, 'WCM_Setup_Demo_on_deactivation' );
register_uninstall_hook( __FILE__, 'WCM_Setup_Demo_on_uninstall' ); #2 Архитектура для OOП (PHP классы)
Если плагин написан в виде класса PHP, то функции нужно подключать так:
<?php
defined( 'ABSPATH' ) OR exit;
/**
* Plugin Name: (WCM) Activate/Deactivate/Uninstall - CLASS
* Description: Example Plugin to show activation/deactivation/uninstall callbacks for classes/objects.
* Author: Franz Josef Kaiser/wecodemore
* Author URL: http://unserkaiser.com
* Plugin URL: http://wordpress.stackexchange.com/questions/25910/uninstall-activate-deactivate-a-plugin-typical-features-how-to/25979#25979
*/
register_activation_hook( __FILE__, array( 'WCM_Setup_Demo_Class', 'on_activation' ) );
register_deactivation_hook( __FILE__, array( 'WCM_Setup_Demo_Class', 'on_deactivation' ) );
register_uninstall_hook( __FILE__, array( 'WCM_Setup_Demo_Class', 'on_uninstall' ) );
add_action( 'plugins_loaded', array( 'WCM_Setup_Demo_Class', 'init' ) );
class WCM_Setup_Demo_Class
{
protected static $instance;
public static function init()
{
is_null( self::$instance ) AND self::$instance = new self;
return self::$instance;
}
public static function on_activation()
{
if ( ! current_user_can( 'activate_plugins' ) )
return;
$plugin = isset( $_REQUEST['plugin'] ) ? $_REQUEST['plugin'] : '';
check_admin_referer( "activate-plugin_{$plugin}" );
// Расcкомментируйте эту строку, чтобы увидеть функцию в действии
// exit( var_dump( $_GET ) );
}
public static function on_deactivation()
{
if ( ! current_user_can( 'activate_plugins' ) )
return;
$plugin = isset( $_REQUEST['plugin'] ) ? $_REQUEST['plugin'] : '';
check_admin_referer( "deactivate-plugin_{$plugin}" );
// Расcкомментируйте эту строку, чтобы увидеть функцию в действии
// exit( var_dump( $_GET ) );
}
public static function on_uninstall()
{
if ( ! current_user_can( 'activate_plugins' ) )
return;
check_admin_referer( 'bulk-plugins' );
// Важно: проверим тот ли это файл, который
// был зарегистрирован во время удаления плагина.
if ( __FILE__ != WP_UNINSTALL_PLUGIN )
return;
// Расcкомментируйте эту строку, чтобы увидеть функцию в действии
// exit( var_dump( $_GET ) );
}
public function __construct()
{
// Запуск плагина: добавьте хуки на нужные функции
}
} #3 Запуск функции при деактивации плагина
Предположим функция, которую нам нужно запустить при деактивации плагина называется: myplugin_deactivate() и находится она в основном файле плагина:
wp-content/plugins/myplugin.php
или
wp-content/plugins/myplugin/myplugin.php
Тогда, используйте такой код, чтобы вызвать функцию деактивации:
register_deactivation_hook( __FILE__, 'myplugin_deactivate' );
function myplugin_deactivate(){
// делаем что нужно при деактивации плагина.
}
Эта строка вызовет функцию myplugin_deactivate() в момент деактивации плагина.
Список изменений
| С версии 2.0.0 | Введена. |
Код register_deactivation_hook() register deactivation hook WP 6.9.1
function register_deactivation_hook( $file, $callback ) {
$file = plugin_basename( $file );
add_action( 'deactivate_' . $file, $callback );
}