У меня есть специальное мероприятие, запланированное для системы управления персоналом в Wordpress. Мне нужно запланировать предупреждения об истечении срока для загруженных документов, но мой хук не срабатывает.
function do_this_in_a_minunte($args) {
$to = "[email protected]";
$subject = 'New expiry email';
$body = "Hello " . $args;
$headers = array('From: ' . get_bloginfo ( 'name' ) . ' <' . get_bloginfo ( 'admin_email' ) . '>', 'Content-Type: text/html; charset=UTF-8');
wp_mail( $to, $subject, $body, $headers );
print_r($args);
}
add_action( 'my_new_event', 'do_this_in_a_minunte', 1, 2 );
$args = array(array('email' => 'test', 'title' => 'hello'));
wp_schedule_single_event( time() + (60 * 1), 'my_new_event', $args);
wp_schedule_single_event( time() + (60 * 2), 'my_new_event', $args);
wp_schedule_single_event( time() + (60 * 3), 'my_new_event', $args);
Задания правильно добавляются в планировщик, но электронные письма никогда не отправляются. Сайт отправляет отладочное электронное письмо перед этим блоком, поэтому я знаю, что может отправляет электронные письма.
Я не могу отлаживать сайт локально, что меня раздражает, и журналы не показывают ничего интересного. Любая помощь приветствуется.
Я проверил ваш код и получаю письма. Можете ли вы установить плагин журнала электронной почты и проверить, отправляет ли ваш сценарий электронное письмо, тогда будет запись.






Я разобрался, и это было ужасно, но я отвечу на свой вопрос.
Весь код находился внутри действия настраиваемой формы Elementor.
public function run( $record, $ajax_handler ) {
function do_this_in_a_minunte($args) {
$to = "[email protected]";
$subject = 'New expiry email';
$body = "Hello " . $args;
$headers = array('From: ' . get_bloginfo ( 'name' ) . ' <' . get_bloginfo ( 'admin_email' ) . '>', 'Content-Type: text/html; charset=UTF-8');
wp_mail( $to, $subject, $body, $headers );
print_r($args);
}
add_action( 'my_new_event', 'do_this_in_a_minunte', 1, 2 );
$args = array(array('email' => 'test', 'title' => 'hello'));
wp_schedule_single_event( time() + (60 * 1), 'my_new_event', $args);
wp_schedule_single_event( time() + (60 * 2), 'my_new_event', $args);
wp_schedule_single_event( time() + (60 * 3), 'my_new_event', $args);
}
«Задачи cron» Wordpress не запускаются, если кто-то не заходит на сайт, поэтому я переместил код за пределы метода класса в файл functions.php, поэтому, когда задание запускается, когда кто-то попадает на сайт и очередь обрабатывается, ловушка для отправки электронное письмо действительно существует и может быть запущено.
add_action( 'one_day_before_event', 'some_function', 10, 2 );
function some_function($post_id, $user_id) {
error_log("some_function firing");
$to = "[email protected]";
$subject = 'TEST';
$body = $post_id . " - " . $user_id;
$headers = array('From: ' . get_bloginfo ( 'name' ) . ' <' . get_bloginfo ( 'admin_email' ) . '>', 'Content-Type: text/html; charset=UTF-8');
wp_mail( $to, $subject, $body, $headers );
}
Ответ - убедитесь, что ваш хук существует вне метода класса, который вы настраиваете, иначе он не существует, когда его нужно запустить.
Работает на меня. Я также получаю электронные письма.