Intereting Posts
Как сделать число сообщений в блоге настраиваемым полем? «paged» в wp_query не работает Пользовательское значение поля, основанное на других настраиваемых значениях поля Тема WordPress не обновляется в других браузерах Невозможно переключиться между визуальными и текстовыми или экранными параметрами Enqueue javascript, который вставляет пользовательский php-виджет в построенный jQuery div Добавление html-баннера в сообщения Пользовательский тип сообщения, который приводит к типу почтового типа вместо короткого кода модального Как отключить уведомления электронной почты WordPress? Перезаписать textdomain плагинов по умолчанию – Lost Translation Увеличить выход Walker отключить комментарии, если существует массив Перенаправление страницы 1 по умолчанию Виджеты исчезли с домашней страницы, а сообщения на домашней странице отключены? Дата фильтрации из метаданных, когда дата находится в строковом формате

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

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

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

Поскольку 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 );