gavin
  • 0
Новичок

Запланированное событие не будет запущено

  • 0

Я пытаюсь настроить отдельные одноразовые события расписания в плагине. Что бы я ни делал, я не могу запустить события. Я использую плагин Cron View, чтобы увидеть, что находится в очереди, и события добавляются и удаляются полностью по расписанию. Однако я никогда не получаю электронное письмо, которое я установил для отправки в целевой функции действия (просто для того, чтобы проверить событие, позже там будет больше). Я протестировал функцию вне запланированных событий, она работает. Вот код:

GLOBAL $new_workshop_id;
$new_workshop_id = $wpdb->insert_id;

function send_reminders() {
 GLOBAL $new_workshop_id;
 wp_mail('my@emailaddress.tld', 'Automatic ID: '.$new_workshop_id, 'here it is!');
}

if (!wp_next_scheduled('send_reminder_emails_'.$new_workshop_id)) {
 wp_schedule_single_event( time()+30, 'send_reminder_emails_'.$new_workshop_id );
}

do_action( 'send_reminder_emails_'.$new_workshop_id );
add_action( 'send_reminder_emails_'.$new_workshop_id, 'send_reminders' );

Единственное, что вызывает у меня подозрения, это размещение do_acton и самой функции, send_reminders() . Вышеприведенный код находится в некоторых операторах if, проверяющих POST-переменные, поэтому возможно, что функция не может быть доступна заданию CRON — так где я должен поместить функцию? Я пробовал прямо в верхней части файла плагина. Из того, что я прочитал, do_action должен вызывать функцию и выполнять ее везде, где вы поместили do_action, но я думаю, мне нужно знать, куда поставить send_reminders() в первую очередь, чтобы она была доступна либо заданием cron, либо do_action.

Спасибо заранее за любые данные!

Share
  1. Использование cron arg выглядит странно. Идентификатор вставки вернет мусор к моменту вызова вашей функции.

    Точно так же я считаю, что лучше всегда планировать его с аргументом id при вставке, если это для ведения журнала. В противном случае вы будете дросселировать свои журналы, в основном.

    Наконец, вы уверены, что wp_mail() работает?

    • 0
    • Извините, мне трудно понять ваши первые два пункта… использование cron arg? журналы? Не могли бы вы уточнить/перефразировать? Я протестировал send_reminders функцию сам по себе, в том числе wp_mail, так что да, я знаю, что это работает. Спасибо за ответ!

      • 0
    • Что касается первого вопроса, к моменту запуска cron ваша переменная больше не устанавливается (потому что это другой процесс) для того, с чем она использовалась. во-вторых, вы можете передавать аргументы функции wp_schedule_single_event(); дайте ему аргумент insert_id и передайте его своей функции. Вопреки тому, что говорит кодекс WP, фактическая подпись: wp_schedule_single_event($timestamp, $hook, $args = array()). (см. wp-includes/cron.php)

      • 0
    • Ааа, это полезно — документация очень искажена в отношении передачи аргументов запланированному действию. Однако, даже когда я удаляю переменную из действия и просто использую жестко закодированный текст в электронном письме, оно все равно никогда не отправляет… любые идеи о том, что еще я могу использовать в этом действии, чтобы посмотреть, работает ли оно с чем-то другим, кроме wp_mail, возможно? Я также пробовал mail .

      • 0
    • Для журналов я лично добавляю в файл…

      • 0
    • Извините за задержку — я все еще не могу запустить функцию. У меня сама функция успешно пишет сообщение «завершено», но этого никогда не происходит, когда задача cron исчезает с монитора cron. Я попытался поместить функцию в файл моего плагина и в файл функций моей темы.

      • 0

Оставить ответ

You must login to add an answer.