我想在插件激活时添加到wp\\u schedule\\u事件中,我需要的代码确实会在一小时内运行,但似乎运行了两次,我不知道为什么,我希望我的调用方式不正确。
这就是我所拥有的
插件。php文件
namespace GrantName {
if ( ! defined(\'ABSPATH\' ) ){
die();
}
class Plugin {
private static $instance = null;
private static $plugin_dir;
private function __construct(){
$autoloader_path = self::getPluginFilePath("/autoloader.php");
require_once($autoloader_path);
Autoloader::register();
new AdminSupport();
$adminClass = new AdminSupport();
// These are the de/activation hooks.
register_activation_hook(__FILE__, array($adminClass, \'my_activation\'));
register_deactivation_hook( __FILE__, array($adminClass,\'my_deactivation\' ));
}
AdminSupport。php
namespace GrantName;
class AdminSupport {
public function onInitialize(){
add_action(\'my_hourly_event\', array($this, \'do_this_hourly\' ));
}
public function my_activation() {
wp_schedule_event( time(), \'hourly\', \'my_hourly_event\' );
}
public function do_this_hourly() {
// do something every hour
$this->assessplugins();
}
public function my_deactivation() {
wp_clear_scheduled_hook( \'my_hourly_event\' );
}
public function assessplugins(){
//Does some things
}
};
计划的任务似乎一个接一个地运行了两次。我安装了一个插件来显示任务,我看到作业有两个操作(
do_this_hourly()
两次)。
有人能看出我做错了什么吗?
编辑:我认为问题在于init
多次调用,因此我的挂钩被添加了多次。
最合适的回答,由SO网友:phatskat 整理而成
看起来您知道发生了什么-这里有一种避免多次运行激活方法的方法:
class AdminSupport {
protected static $activated = false;
public function onInitialize(){
add_action(\'my_hourly_event\', array($this, \'do_this_hourly\' ));
}
public function my_activation() {
if ( self::$activated ) {
return;
}
wp_schedule_event( time(), \'hourly\', \'my_hourly_event\' );
self::$activated = true;
}
public function do_this_hourly() {
// do something every hour
$this->assessplugins();
}
public function my_deactivation() {
wp_clear_scheduled_hook( \'my_hourly_event\' );
}
public function assessplugins(){
//Does some things
}
}