WP отложенная отправка письма
Есть такая задача на WordPress. После того как статья была опубликована, отсылать первое письмо Админу сайта, а через N секунд второе письмо автору поста. Письма разные. Код для отсылок письма вот, рабочий.
/* Letter for Admin */
function emailForAdmin($post_id) {
global $wpdb;
$post = get_post($post_id);
$link = $post->guid;
$author = get_userdata($post->post_author);
$message = "Hi Admin, the user - <b>". $author->display_name."</b> create new post ". $post->post_title ." You can check it ".$link." ";
$headers = array(
'From: Me Myself <[email protected]>',
'content-type: text/html',
);
wp_mail( get_option('admin_email'), "Created new post - ". $post->post_title ." ", $message, $headers);
$delaySeconds = 10;
wp_schedule_single_event( time() + $delaySeconds, 'email_action_hook');
}
add_action('publish_post', 'emailForAdmin');
add_action( 'email_action_hook', 'authorNotification' );
/* Letter for Author */
function authorNotification($post_id) {
global $wpdb;
$post = get_post($post_id);
$link = $post->guid;
$author = get_userdata($post->post_author);
$message = "Hi ".$author->display_name.", Well done! Your post,". $post->post_title ." has been reviewed and just been published. View here ".$link."";
wp_mail($author->user_email, "Your article status", $message);
}
Проблема в отложенной отправке второго письма. Пользовался функцией wp_schedule_single_event про которую, тут так подробно расписано..., но вот не могу понять чего автору поста письмо не приходит. Как вообще можно подтвердить, что данная функция отрабатывает ? Пробовал как в примере, то emailадмина тоже не меняет.
Ответы (1 шт):
Тут надо понимать, как работает cron в WordPress. Это псевдокрон по умолчанию, который зависит от посещаемости сайта. Вы запускаете wp_schedule_single_event, которая не делает ничего, кроме записи с базу времени следующего запуска вашего события. Допустим, это 5 секунд.
Наличие события проверяется при очередном обращении к сайту. Если следующее обращение будет через 1 секунду, а второе - через год, то ваше событие сработает через год.
Другое дело,если сервер запускает wp-cron.php через жёстко заданные интервалы, привязанные к внутренним часам сервера. Это системный крон. В таком случае, все cron события будут проверяться в течение заданного системного интервала, например, 15 минут. Тогда ваше событие, назначенное через 5 секунд, гарантированно выполнится через 15 минут.
Но для настройки серверного крона вам нужен доступ к Linux root сервера.