register_deactivation_hook()
Реєструє функцію, яка запускатиметься після деактивації плагіна.
Вішає вказану в другому параметрі функцію подію, назва якої залежить від параметра $file : deactivate_$file
.
Хуків немає.
Повертає
null
. Нічого не вертає.
Використання
register_deactivation_hook($file, $function);
-
$file
(рядок) (обов’язковий) -
Шлях до головного файлу плагіна у рубриці
wp-content/plugins
. Можна вказати повний шлях. Зазвичай використовується магічна константа __FILE__. -
$function
(рядок/масив) (обов’язковий) - Назва функції зворотного виклику (callback), яка запускатиметься при деактивації плагіна.
Приклади
#1 Запуск функції при деактивації плагіна
Припустимо функція, яку нам потрібно запустити при деактивації плагіна називається 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 Звичайні функції (не класи)
Цей демонстраційний приклад показує як викликати функції Активація/деактивація/видалення у файлі плагіна:
<?php defined( 'ABSPATH' ) OR exit; /** * Plugin Name: (WCM) Activate/Deactivate/Uninstall - Functions * Description: Додаток Plug-in для show activation/deactivation/uninstall callbacks for plain functions. * Autor: 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}"); // Розкоментуйте цей рядок, щоб побачити функцію в дії // 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}"); // Розкоментуйте цей рядок, щоб побачити функцію в дії // 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' );
#3 Архітектура для OOП (PHP класи)
Якщо плагін написаний у вигляді класу PHP, то функції потрібно підключати так:
<?php defined( 'ABSPATH' ) OR exit; /** * Plugin Name: (WCM) Activate/Deactivate/Uninstall - CLASS * Description: Додаток Plug-in до show activation/deactivation/uninstall callbacks for classes/objects. * Autor: 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}"); // Розкоментуйте цей рядок, щоб побачити функцію в дії // 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}"); // Розкоментуйте цей рядок, щоб побачити функцію в дії // 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; // Розкоментуйте цей рядок, щоб побачити функцію в дії // exit (var_dump ($_GET)); } public function __construct() { // Запуск плагіна: додайте хуки на потрібні функції } }
список змін
З версії 2.0.0 | Введено. |
Код register_deactivation_hook() register deactivation hook WP 6.0.2
function register_deactivation_hook( $file, $callback ) { $ file = plugin_basename ($ file); add_action( 'deactivate_' . $file, $callback ); }