web-dev-qa-db-fra.com

Utilisation de wp_cron avec un intervalle de temps personnalisé et du crochet d'activation de registre

Scénario 1: échec

L'ajout d'une tâche cron wp_schedule_event avec un intervalle personnalisé lors de l'activation du plug-in à l'aide de register_activation_hook en dehors de la définition de la classe ne fonctionne pas car l'intervalle personnalisé n'est pas encore reconnu;

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

}

Scénario 2: échec

L'ajout d'une tâche périodique avec wp_schedule_event avec un intervalle personnalisé lors de l'activation du plugin à l'aide de register_activation_hook dans le constructeur de la classe fonctionne, car l'appel à la fonction add_filter('cron_schedules', ...); est également déclenché dans le processus. chaîne d'événements.

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

} 

Question

Comment puis-je obtenir que les scénarios 1 ou 2 fonctionnent correctement avec un intervalle de temps personnalisé?.

Modifier:

Les deux scénarios échouent avec un intervalle personnalisé différent des intervalles incorporés par défaut.

4
userabuser

Donc, comme nous en avons discuté dans le chat, il y avait une chose (câblée):

Le nom du crochet ne doit pas (!) Contenir des traits de soulignement.

Pour rester sur le côté sauvé de la vie, mieux vaut aussi le mettre en minuscule.

0
kaiser