register_activation_hook()

最后更新于:2021-11-27 21:18:13

register_activation_hook( string$file, callable$callback)

Set the activation hook for a plugin.

参数

$file

(string) (Required) The filename of the plugin including the path.

$callback

(callable) (Required) The function hooked to the ‘activate_PLUGIN’ action.

源文件

文件: gc-includes/plugin.php

function register_activation_hook( $file, $callback ) {
	$file = plugin_basename( $file );
	add_action( 'activate_' . $file, $callback );
}
register_activation_hook(__FILE__, 'my_plugin_activate');
function my_plugin_activate($network_wide){
	if($network_wide){ //Plugin is network activated
		$site_ids = get_sites(array('fields' => 'ids'));
	    foreach($site_ids as $site_id){
			//Perform something on all sites within the network
      		switch_to_blog($site_id);
      		my_plugin_install_site();
      		restore_current_blog();
    	}
		return;
	}

	my_plugin_install_site();

}

function my_plugin_install_site(){
	//Do something
}

<?php
/**
 * OOP GeChiUI Plugin Boilerplate
 *
 * Description for OOP Plugin
 *
 * @link              https://github.com/msn60/oop-gechiui-plugin-boilerplate
 * @since             1.0.0
 * @package           Plugin_Name_Name_Space
 *
 * @gechiui-plugin
 * Plugin Name:       OOP GeChiUI Plugin Boilerplate
 * Plugin URI:        https://github.com/msn60/oop-gechiui-pluging-boilerplate-light-version
 * Description:       Description for OOP Plugin
 * Version:           1.0.2
 * Author:            Mehdi Soltani <soltani.n.mehdi@gmail.com>
 * Author URI:        https://gcwebmaster.ir
 * License:           GPL-2.0+
 * License URI:       http://www.gnu.org/licenses/gpl-2.0.txt
 */

/*
 * Define your namespaces here by use keyword
 * */

use Plugin_Name_Name_SpaceIncludesInit{
 Constant, Activator
};
use Plugin_Name_Name_SpaceIncludesConfigInitial_Value;
use Plugin_Name_Name_SpaceIncludesUninstall{
	Deactivator, Uninstall
};

/**
 * If this file is called directly, then abort execution.
 */
if ( ! defined( 'ABSPATH' ) ) {
	exit;
}


/**
 * Class Plugin_Name_Plugin
 *
 * This class is primary file of plugin which is used from
 * singletone design pattern.
 *
 * @package    Plugin_Name_Name_Space
 * @author     Your_Name <youremail@nomail.com>
 * @see        Plugin_Name_Name_SpaceIncludesInitCore Class
 * @see        Plugin_Name_Name_SpaceIncludesInitConstant Class
 * @see        Plugin_Name_Name_SpaceIncludesInitActivator Class
 * @see        Plugin_Name_Name_SpaceIncludesUninstallDeactivator Class
 * @see        Plugin_Name_Name_SpaceIncludesUninstallUninstall Class
 */
final class Plugin_Name_Plugin {
	/**
	 * Instance property of Plugin_Name_Plugin Class.
	 * This is a property in your plugin primary class. You will use to create
	 * one object from Plugin_Name_Plugin class in whole of program execution.
	 *
	 * @access private
	 * @var    Plugin_Name_Plugin $instance create only one instance from plugin primary class
	 * @static
	 */
	private static $instance;
	/**
	 * @var Initial_Value $initial_values An object  to keep all of initial values for theme
	 */
	protected $initial_values;


	/**
	 * Plugin_Name_Plugin constructor.
	 * It defines related constant, include autoloader class, register activation hook,
	 * deactivation hook and uninstall hook and call Core class to run dependencies for plugin
	 *
	 * @access private
	 */
	public function __construct() {
		/*Define Autoloader class for plugin*/
		$autoloader_path = 'includes/class-autoloader.php';
		/**
		 * Include autoloader class to load all of classes inside this plugin
		 */
		require_once trailingslashit( plugin_dir_path( __FILE__ ) ) . $autoloader_path;
		/*Define required constant for plugin*/
		Constant::define_constant();

		/**
		 * Register activation hook.
		 * Register activation hook for this plugin by invoking activate
		 * in Plugin_Name_Plugin class.
		 *
		 * @param string   $file     path to the plugin file.
		 * @param callback $function The function to be run when the plugin is activated.
		 */
		register_activation_hook(
			__FILE__,
			function () {
				$this->activate(
					new Activator( intval( get_option( 'last_your_plugin_name_dbs_version' ) ) )
				);
			}
		);
		/**
		 * Register deactivation hook.
		 * Register deactivation hook for this plugin by invoking deactivate
		 * in Plugin_Name_Plugin class.
		 *
		 * @param string   $file     path to the plugin file.
		 * @param callback $function The function to be run when the plugin is deactivated.
		 */
		register_deactivation_hook(
			__FILE__,
			array( $this, 'deactivate' )
		);
	}

	/**
	 * Call activate method.
	 * This function calls activate method from Activator class.
	 * You can use from this method to run every thing you need when plugin is activated.
	 *
	 * @access public
	 * @since  1.0.0
	 * @see    Plugin_Name_Name_SpaceIncludesInitActivator Class
	 */
	public function activate( Activator $activator_object ) {
		global $gcdb;
		$activator_object->activate(
			true,
			new Table( $gcdb, PLUGIN_NAME_DB_VERSION, get_option( 'has_table_name' ) )
		);
	}

	/**
	 * Create an instance from Plugin_Name_Plugin class.
	 *
	 * @access public
	 * @since  1.0.0
	 * @return Plugin_Name_Plugin
	 */
	public static function instance() {
		if ( is_null( ( self::$instance ) ) ) {
			self::$instance = new self();
		}

		return self::$instance;
	}
	

	/**
	 * Load Core plugin class.
	 *
	 * @access public
	 * @since  1.0.0
	 */
	public function run_plugin_name_plugin() {
		// TODO: Do you codes here to run the plugin
	}

	/**
	 * Call deactivate method.
	 * This function calls deactivate method from Dectivator class.
	 * You can use from this method to run every thing you need when plugin is deactivated.
	 *
	 * @access public
	 * @since  1.0.0
	 */
	public function deactivate() {
		Deactivator::deactivate();
	}
}


$plugin_name_plugin_object = Plugin_Name_Plugin::instance();
$plugin_name_plugin_object->run_plugin_name_plugin();