Обновлено
Я пытаюсь установить sh повторяющуюся задачу при активации плагина с использованием пользовательского 5-минутного интервала. Связывание моего действия с моим пользовательским интервалом не работает.
Если я выберу интервал по умолчанию, например, «ежедневно», все будет работать.
Когда я эхом отражаю результаты wp_get_schedules()
непосредственно над моим вызовом wp_schedule_event()
, я вижу свой пользовательский интервал ,
Насколько я могу судить, мой пользовательский интервал успешно регистрируется, когда я пытаюсь его использовать, но моя задача никогда не ассоциируется с ним.
Если я выведу результаты $crons
и $schedules
в хрон. php wp_schedule_event()
и _set_cron_array()
, я смогу увидеть, что моя задача правильно связана с моим настраиваемым интервалом. Но после завершения активации плагина моя задача не отражается в Cron Manager / db.
В качестве теста я добавил свой пользовательский интервал непосредственно в значения по умолчанию WP в cron. php - когда я это делаю, Я могу успешно наметить свою задачу с этим.
Я делаю следующее в функции, вызываемой через register_activation_hook()
:
add_filter( 'cron_schedules', function($schedules) {
$schedules['5_min'] = array(
'interval' => MINUTE_IN_SECONDS * 5,
'display' => __( 'Every 5 minutes' ),
);
return $schedules;
}
);
function my_plugin_import_handler() {
// ...
}
add_action( 'my_plugin_import_hook', 'my_plugin_import_handler' );
wp_schedule_event( time(), '5_min', 'my_plugin_import_hook' );
Чего мне не хватает?
Обновление
Я установил бесплатную sh копию WordPress, установил Advanced Cron Manager и добавил простой плагин с приведенным ниже кодом. Я вижу две взаимосвязанные вещи.
- Если я планирую свою задачу с отметкой времени (), то она не будет запланирована, но если я планирую ее на будущее, она будет запланирована.
- При просмотре моей задачи в Advanced Cron Manager она определяется как «одиночное событие» и не повторяется.
Имеет смысл, что моя задача никогда не связана с моим настраиваемым интервалом, если это отдельное событие и назначенное ему время начала теперь.
Так что же я делаю, чтобы это событие было единичным, а не повторяющимся?
register_activation_hook( __FILE__, 'activate_test_plugin' );
function activate_test_plugin()
{
add_filter( 'cron_schedules', function($schedules) {
$schedules['5_min'] = array(
'interval' => MINUTE_IN_SECONDS * 5,
'display' => __( 'Every 5 minutes' ),
);
return $schedules;
});
add_action( 'my_test_import_hook', 'my_test_import_handler' );
function my_test_import_handler()
{
echo 'import is beginning';
}
if ( ! wp_next_scheduled ( 'my_test_import_hook' ))
{
wp_schedule_event( time() + 3600, '5_min', 'my_test_import_hook' );
}
}