×

زندگی شما زمانی بهتر می شود که خودتان بهتر شوید.

اگر تلاش می کنید از تابع register_activation_hook درون هوک plugins_loaded استفاده کنید کاری اشتباه است و اتفاقی نخواهد افتاد.

چون هوک plugins_loaded زمانی fire می شود که افزونه های فعال شده (و نه در حال فعال شدن) در حال لود شدن هستند.

کد زیر کار نمی کند …

class MyPluginInit {
	private static $instance;

	public static function getInstance() {
                if (!self::$instance) {
                        self::$instance = new self();
                }
                return self::$instance;
	}

	private function __construct() {
		// application initialization code
		register_activation_hook( MY_PLUGIN_FILE, array( &$this, 'activate_plugin' ) );
	}

	public function activate_plugin() {
		// one-time plugin activation code
	}
}

add_action( 'plugins_loaded', array( 'MyPluginInit', 'getInstance' ) );

پس لازم است آن را خارج از این هوک استفاده کنید.

class MyPluginInit {
	private static $instance;

	public static function getInstance() {
                if (!self::$instance) {
                        self::$instance = new self();
                }
                return self::$instance;
	}

	private function __construct() {
		// application initialization code
		
	}

	public function activate_plugin() {
		// one-time plugin activation code
	}
}

add_action( 'plugins_loaded', array( 'MyPluginInit', 'getInstance' ) );

register_activation_hook( MY_PLUGIN_FILE, array( 'MyPluginInit', 'activate_plugin' ) );

ممکن است نیاز داشته باشید تا شی instance را در تابع register_activation_hook استفاده کنید. در این صورت می توانید از solution زیر استفاده نمایید.


class MyPluginInit {
	private static $instance;

	public static function getInstance() {
		if( !self::$instance ) {
			$class = __CLASS__;
			new $class;
		}
		return self::$instance;
	}

	private function __construct() {
		register_activation_hook( MY_PLUGIN_FILE, array( &$this, 'activate_plugin' ) );
		add_action( 'plugins_loaded', array( &$this, 'init' ) );
	}

	public function init() {
		// application initialization code
	}

	public function activate_plugin() {
		$this->init();
		// one-time plugin activation code
	}
}

MyPluginInit::getInstance();

درباره نویسنده:

نوین تِک بیش از 4 سال سابقه طراحی و توسعه وردپرس دارم. تمام اوقات روز رو به مطالعه و کار بر روی پروژه های وردپرسی می گذرانم. هم اکنون بیشتر پروژه های من توسعه هسته وردپرس و طراحی افزونه های مختلف می باشد. برای ارتباط با من می توانید با شماره 09119140628 تماس بگیرید. در تلگرام نیز با این شماره حضور دارم.
مشاهده سایت

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *