Использование wp cron с настраиваемым временным интервалом и крючком активации регистра
Сценарий 1: сбой
Добавление задачи cron wp_schedule_event
с пользовательским интервалом при активации плагина с использованием register_activation_hook
вне определения класса не работает, поскольку пользовательский интервал еще не распознан;
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' );
}
}
Сценарий 2: сбой
Добавление задачи cron с wp_schedule_event
с пользовательским интервалом при активации плагина с использованием register_activation_hook
внутри конструктора класса работает, потому что вызов add_filter('cron_schedules', ...);
также запускается в цепочке события.
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' );
}
}
Вопрос
Как я могу заставить сценарий 1 или 2 успешно работать с пользовательским интервалом времени.
Изменить:
Оба сценария завершаются ошибкой с настраиваемым интервалом времени, отличным от встроенных интервалов по умолчанию.
1 answers
Итак, когда мы обсуждали это в чате, была одна (проводная) вещь:
Имя крючка не должно (!) содержать подчеркивания.
Чтобы сохранить себя на стороне спасения жизни, лучше также использовать нижний регистр.