Установи sh задание wp-cron при активации плагина с заданным интервалом - PullRequest
0 голосов
/ 16 января 2020

Обновлено

Я пытаюсь установить 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 и добавил простой плагин с приведенным ниже кодом. Я вижу две взаимосвязанные вещи.

  1. Если я планирую свою задачу с отметкой времени (), то она не будет запланирована, но если я планирую ее на будущее, она будет запланирована.
  2. При просмотре моей задачи в 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' );
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...