Usando wp_cron con un intervalo de tiempo personalizado y el enlace de activación de registro

4

Escenario 1: falla

La adición de una tarea cron wp_schedule_event con un intervalo personalizado en la activación del complemento usando register_activation_hook fuera de la definición de la clase no funciona porque el intervalo personalizado aún no se reconoce;

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

}

Escenario 2: falla

Agregar una tarea cron con wp_schedule_event con intervalo personalizado en la activación del complemento usando register_activation_hook dentro del constructor de la clase no funciona porque la llamada al add_filter('cron_schedules', ...); también se activa en la cadena 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' );
    }

} 

Pregunta

¿Cómo puedo conseguir que el escenario 1 o 2 funcione correctamente con un intervalo de tiempo personalizado?

Editar:

Ambos escenarios fallan con un intervalo de tiempo personalizado, distinto de los intervalos incorporados predeterminados.

    
pregunta userabuser 14.06.2013 - 12:32

1 respuesta

0

Entonces, cuando discutimos esto en el chat, había una cosa (conectada):

  

El nombre del enlace no debe (!) contener guiones bajos.

Para mantenerte en el lado seguro de la vida, mejor minúscula también.

    
respondido por el kaiser 14.06.2013 - 14:41

Lea otras preguntas en las etiquetas