Использование wp cron с настраиваемым временным интервалом и крючком активации регистра


Сценарий 1: сбой

Добавление задачи cron 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: сбой

Добавление задачи cron с wp_schedule_event с пользовательским интервалом при активации плагина с использованием register_activation_hook внутри конструктора класса работает, потому что вызов 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 успешно работать с пользовательским интервалом времени.

Изменить:

Оба сценария завершаются ошибкой с настраиваемым интервалом времени, отличным от встроенных интервалов по умолчанию.

Author: Adam, 2013-06-14

1 answers

Итак, когда мы обсуждали это в чате, была одна (проводная) вещь:

Имя крючка не должно (!) содержать подчеркивания.

Чтобы сохранить себя на стороне спасения жизни, лучше также использовать нижний регистр.

 0
Author: kaiser, 2013-06-14 12:41:52