Выполнение моей функции один раз в определенное время
На нашем веб-сайте WordPress мы используем плагин Events Manager Pro. Это позволяет нам создавать события. Однако нам нужно каким-то образом отправить электронное письмо с благодарностью присутствующим людям через 1 день после даты окончания мероприятия.
Я уже написал это:
add_action( 'em_bookings_added', 'mail_after_completion' );
function mail_after_completion (){
global $wpdb;
/*Get the email of who booked */
$person_id = $wpdb->get_var("SELECT person_id FROM mbc_em_bookings ORDER BY booking_date DESC LIMIT 1");
$person_email = $wpdb->get_var( $wpdb->prepare("SELECT user_email FROM mbc_users WHERE ID = %s",$person_id));
/*Get the event finish date */
$event_id = $wpdb->get_var("SELECT event_id FROM mbc_em_bookings ORDER BY booking_date DESC LIMIT 1");
$event_end_date = $wpdb->get_var( $wpdb->prepare("SELECT event_end_date FROM mbc_em_events WHERE event_id = %s",$event_id));
/*Send E-mail to the person who just booked */
$to = '$person_email';
$subject = "Thank you for attending";
$content = "Thank you for attending the event at $event_end_date";
$status = wp_mail($to, $subject, $content);
}
?>
Эта функция отправляет электронное письмо человеку всякий раз, когда он бронирует мероприятие. Однако я бы хотел, чтобы это произошло через 1 день после завершения мероприятия. Я много изучал CRON и wp_schedule_single_event()
, но, похоже, не могу выясните, как правильно его использовать.
Если бы кто-нибудь мог пролить некоторый свет на это, мы были бы очень признательны
С уважением!
1 answers
Итак, суть в том, что у вас есть ваша функция, вы подключаете ее к действию, а затем приказываете WordPress запустить это действие в определенное время по расписанию. Встроенные расписания, которые вам доступны, следующие:
hourly
twicedaily
daily
Если бы вы хотели запускать свое мероприятие каждый час, вы бы сделали что-то вроде этого:
<?php
wp_schedule_event(time(), 'hourly', 'em_bookings_added');
Если вы хотите, чтобы задача выполнялась в определенное время, вы можете просто передать unix метка времени в качестве первого аргумента:
<?php
$future_time = mktime(10,0,0,30,9,2016); // 2016-09-30 10:00:00 UTC
wp_schedule_event($future_time, 'hourly', 'em_bookings_added');
Если у вас есть какие-либо аргументы, которые вы хотите передать своему действию, вы можете передать их в качестве четвертого аргумента.
Вы также можете указать время, когда вы хотели бы, чтобы выполнялось ваше действие - это первый аргумент. Однако, пожалуйста, имейте в виду, что cron WordPress для запуска зависит от людей, посещающих сайт, и не так точен, как настоящая работа cron; нет посетителей == нет запуска cron.
Однако один из способов обойти это - установить задание cron на вашем собственном сервере для запуска wp-cron.php
вручную:
Взято из потрясающей статьи Тома Макфарлина о WordPress cron
// wp-config.php
define('DISABLE_WP_CRON', true);
// in your crontab
/15 * * * wget -q -O - http://example.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1
Подробнее см. в https://codex.wordpress.org/Function_Reference/wp_schedule_event