Intereting Posts
Преобразование одиночных вершин в тире в постоянных ссылках Что нужно отключить для работы во внутренней сети без доступа к Интернету? Элемент меню и его последние 10 сообщений в качестве подменю Асинхронные загрузчики Javascript Включение создания пользователя с помощью «Интеграция с Active Directory» Счетчик в петле в foreach Почтовые запросы по широте и долготе ТипError: this.each, когда wp.media.open () после использования popper.js для начальной загрузки 4 Многоязычные сайты WordPress отображаются в раскрывающемся меню, но не в меню «Сайты» Фильтровать плагин индексной страницы Использование переменной в имени динамически называемой вспомогательной функции Как определить, какой javascript выполняется WordPress отключить некоторые плагины для catagory? Blogname и Blogdescription в Pagelines Панель параметров DMS Предварительный просмотр пользовательских настроек JS- Попытка привязки к URL-адресу изображения html без везения

Как сделать сообщения WordPress асинхронными

Недавно у меня была проблема на моем сайте, где электронные письма не были отправлены. Это была проблема, но большая проблема заключалась в том, что отказ привел к тому, что сценарий был тайм-аутом, который действительно заслонил пользовательский интерфейс.

Я отправляю свое решение для того, чтобы сделать wp_mail асинхронным в надежде получить некоторую обратную связь по этой идее. Это хорошее решение? Какие подводные камни я встречу?

Solutions Collecting From Web of "Как сделать сообщения WordPress асинхронными"

Поскольку wp_mail подключается, мы можем выборочно переопределить его. Я запускаю следующий код в своем общем функциональном плагине:

 /** * Email Async. * * We override the wp_mail function for all non-cron requests with a function that simply * captures the arguments and schedules a cron event to send the email. */ if ( ! defined( 'DOING_CRON' ) || ( defined( 'DOING_CRON' ) && ! DOING_CRON ) ) { function wp_mail() { // Get the args passed to the wp_mail function $args = func_get_args(); // Add a random value to work around that fact that identical events scheduled within 10 minutes of each other // will not work. See: http://codex.wordpress.org/Function_Reference/wp_schedule_single_event $args[] = mt_rand(); // Schedule the email to be sent wp_schedule_single_event( time() + 5, 'cron_send_mail', $args ); } } 

Затем у меня есть следующая функция, предназначенная для отправки электронной почты.

 /** * This function runs during cron requests to send emails previously scheduled by our * overrided wp_mail function. We remove the last argument because it is just a random * value added to make sure the cron job schedules correctly. * * @hook cron_send_mail 10 */ function example_cron_send_mail() { $args = func_get_args(); // Remove the random number that was added to the arguments array_pop( $args ); call_user_func_array( 'wp_mail', $args ); } /** * Hook the mail sender. We accept more arguments than wp_mail currently takes just in case * they add more in the future. */ add_action( 'cron_send_mail', 'example_cron_send_mail', 10, 10 );