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' );
}
}
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' );
}
}
Comment puis-je obtenir que les scénarios 1 ou 2 fonctionnent correctement avec un intervalle de temps personnalisé?.
Les deux scénarios échouent avec un intervalle personnalisé différent des intervalles incorporés par défaut.
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.