Я пытаюсь отправить уведомление, когда определенное событие должно произойти в течение одного часа.
В целях тестирования у меня в настоящее время запущен процесс cron раз в минуту. Но я подозреваю, что есть более эффективный способ сделать это.
Я пытаюсь избежать отслеживания уведомлений, и поэтому я пытаюсь просто встроить некоторую логику, чтобы я мог получить один триггер наУведомление.
Вот мой текущий процесс:
function webinar_starts_onehour() {
// Get all lessons that are in future
$today = time();
$args = array(
'post_type' => 'lessons',
'post_status' => 'publish',
'posts_per_page' => -1,
'meta_query' => array(
'key' => 'webinar_time',
'value' => $today,
'compare' => '>='
)
);
$lessons = get_posts( $args );
$notifications = get_notifications( 'webinar_starts_onehour' );
// Foreach lesson
foreach ( $lessons as $lesson ) {
$webinar_time = strtotime($lesson->webinar_time);
$difference = round(($webinar_time - $today) / 3600,2);
if (($difference > .98) && ($difference < 1.017)) {
// do something
}
}
}
Итак, что я пытаюсь сделать, это запустить его, если он находится на расстоянии чуть меньше часа или чуть больше (что+ одна минута).
Я подозреваю, что мое состояние может быть установлено дважды в некоторых ситуациях, и поэтому я пытаюсь найти более надежный способ убедиться, что с помощью cron, который срабатывает каждую минуту, это условие будетсрабатывает только один раз.
Идеи?
И если вы думаете, что это действительно ненадежно (я знаю, что это так), что было бы прагматичным способом добавить таблицу для отслеживания такого рода уведомлений? Могу ли я просто создать таблицу, скажем, sent_notifications
, которая будет иметь user_id
, notification_id
, lesson_id
, status
, а затем проверить, было ли успешное уведомление для этого конкретного урока, а для неудачных отправлений использовать другой cronпостоянно пытаться отправить неудачные?
спасибо, Брайан