Usando wp_cron com intervalo de tempo personalizado e o gancho de ativação de registro

4

Cenário 1: falha

A adição de uma tarefa Cronada wp_schedule_event com um intervalo personalizado na ativação do plug-in usando register_activation_hook fora da definição de classe não funciona porque o intervalo personalizado ainda não foi reconhecido;

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' );
    }

}

Cenário 2: falha

Adicionar uma tarefa Cron com wp_schedule_event com um intervalo personalizado na ativação de plug-ins usando register_activation_hook dentro do construtor de classe funciona porque a chamada para add_filter('cron_schedules', ...); também é disparada na cadeia de eventos.

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' );
    }

} 

Pergunta

Como posso fazer o cenário 1 ou 2 funcionar com sucesso com um intervalo de tempo personalizado?

Editar:

Ambos os cenários falham com um tempo de intervalo personalizado, diferente dos intervalos embutidos padrão.

    
por userabuser 14.06.2013 / 12:32

1 resposta

0

Então, como discutimos isso no bate-papo, havia uma coisa (com fio):

  

O nome do hook não deve (!) conter underscores.

Para manter-se no lado negativo da vida, melhore-a também.

    
por kaiser 14.06.2013 / 14:41