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.