web-dev-qa-db-ja.com

カスタムの時間間隔でwp_cronを使用し、登録活動化フック

シナリオ1:失敗

クラス定義の外でwp_schedule_eventを使用してプラグインをアクティブ化するときにカスタム間隔を指定してクーロン・タスクregister_activation_hookを追加すると、カスタム間隔がまだ認識されないため機能しません。

register_activation_hook(__FILE__, array('Test', 'test_plugin_activated' ) );
register_deactivation_hook(__FILE__, array('Test', 'test_plugin_deactivated' ) );  
add_action('plugins_loaded', array ( Test::get_instance(), 'plugin_setup' ) );

 class Test 
 {

    protected static $instance = NULL;

    public static function get_instance()
    {

        if ( null === self::$instance )
        {
            self::$instance = new self;
        }
        return self::$instance; 

    }

    public function plugin_setup()
    {
        //init stuff...        
    }

    public function __construct() 
    {
        add_filter( 'cron_schedules', array($this, 'custom_cron_schedule') );
    }

    public function custom_cron_schedule( $schedules ) 
    {
       $schedules['minute'] = array(
        'interval' => 60, 
        'display' => __( 'Once per minute' )
       );
       return $schedules;
    } 

    public static function test_plugin_activated() 
    {
        wp_schedule_event( time(), 'minute', 'MINUTE_EVENT') ;
    }

    public static function test_plugin_deactivated() 
    {
        wp_clear_scheduled_hook( 'MINUTE_EVENT' );
    }

}

シナリオ2:失敗

クラスコンストラクター内でwp_schedule_eventを使用したプラグインのアクティブ化でカスタム間隔を指定してregister_activation_hookを指定してcronタスクを追加すると、add_filter('cron_schedules', ...);への呼び出しも一連のイベントで起動されるので機能します。

add_action('plugins_loaded', array ( Test::get_instance(), 'plugin_setup' ) );

 class Test 
 {

    protected static $instance = NULL;

    public static function get_instance()
    {

        if ( null === self::$instance )
        {
            self::$instance = new self;
        }
        return self::$instance; 

    }

    public function plugin_setup()
    {
        //init stuff...        
    }

    public function __construct() 
    {
        register_activation_hook(__FILE__, array($this, 'test_plugin_activated' ) );
        register_deactivation_hook(__FILE__, array($this, 'test_plugin_deactivated' ) ); 
        add_filter( 'cron_schedules', array($this, 'custom_cron_schedule') );
    }

    public function custom_cron_schedule( $schedules ) 
    {
       $schedules['minute'] = array(
        'interval' => 60, 
        'display' => __( 'Once per minute' )
       );
       return $schedules;
    } 

    public function test_plugin_activated() 
    {
        wp_schedule_event( time(), 'minute', 'MINUTE_EVENT') ;
    }

    public function test_plugin_deactivated() 
    {
        wp_clear_scheduled_hook( 'MINUTE_EVENT' );
    }

} 

質問

カスタムの時間間隔でシナリオ1または2を正常に機能させるにはどうすればよいですか。

編集する

どちらのシナリオも、デフォルトの組み込み間隔以外のカスタム間隔時間で失敗します。

4
userabuser

チャットでこれについて説明したように、1つの(ワイヤード)ものがありました。

フック名はアンダースコアを含んではいけません(!)。

命を救う側に留まるために、同様にそれを小文字にします。

0
kaiser