WP_Schedule_Event似乎被添加了两次

时间:2017-05-01 作者:mozman2

我想在插件激活时添加到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 多次调用,因此我的挂钩被添加了多次。

1 个回复
最合适的回答,由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
    }
}

相关推荐