woocommerce_email_recipient_new_order не срабатывает

Вопрос или проблема

Я хотел бы настроить получателя нового заказа в WooCommerce. Согласно документации и различным примерам, я могу сделать это следующим образом:

function wc_change_admin_new_order_email_recipient( $recipient, $order ) {
    global $woocommerce;

//некоторый код
    return $recipient;
}
add_filter('woocommerce_email_recipient_new_order', 'wc_change_admin_new_order_email_recipient', 10, 2);

Однако я не могу заставить этот фильтр сработать на своем локальном компьютере для разработки, и не могу заставить сайт отправлять электронные письма о заказе, даже если этот код удален.

У меня есть рабочий локальный отладчик, и код останавливается в различных точках класса wc_email, однако он доходит до функции get_recipient только при изменении электронной почты администратора в админке.

Вот что я попробовал:

  • отключил все остальные плагины
  • убедился, что WordPress, WooCommerce, тема обновлены
  • Некоторые файлы темы отображаются как не обновленные, но admin-new-order.php не включен в этот список
  • admin-new-order.php в папке переопределений идентичен версии WooCommerce, поэтому я также пытался полностью удалить переопределение
  • Функция сброса пароля отправляет мне электронное письмо на локальной системе (через Интернет), поэтому доставка электронной почты работает

Есть ли задача cron, используемая для доставки электронного письма администратора о новом заказе, и если да, как я могу ее запустить?

Есть ли еще идеи?

Уведомление о заказе для администратора отправляется как часть процесса уведомления о платеже – в данном случае Paypal IPN.

Чтобы протестировать это на локальном домене, самым лучшим способом было бы сгенерировать электронное письмо о заказе из списка заказов в админке.

Указанный выше код работает отлично.

Версия WordPress: 5.2.2

Версия WooCommerce: 3.7.0

Чтобы отправить статического получателя (переопределить по умолчанию)

add_filter( 'woocommerce_email_headers', 'hasan_headers_filter_function', 10, 2);

function hasan_headers_filter_function( $headers, $object ) {
  $headers="Тестовый Дилер <[email protected]>";
  return $headers;
}

Чтобы отправить дополнительного статического получателя вместе с администратором

add_filter( 'woocommerce_email_headers', 'hasan_headers_filter_function', 10, 2);

function hasan_headers_filter_function( $headers, $object ) {
  $headers .= 'CC: Тестовый Дилер <[email protected]>' . "\r\n";
  return $headers;
}

если вы хотите отправлять только когда заказ завершен

add_filter( 'woocommerce_email_headers', 'hasan_headers_filter_function', 10, 2);

function hasan_headers_filter_function( $headers, $object ) {
  if ($object == 'customer_completed_order') {
    $headers .= 'CC: Тестовый Дилер <[email protected]>' . "\r\n";
  }
  return $headers;
}

Ответ или решение

Проблемы с триггером woocommerce_email_recipient_new_order

Когда вы работаете с WooCommerce, возможность изменения получателя нового заказа через фильтр woocommerce_email_recipient_new_order может быть крайне полезной. Однако, как вы уже заметили, данный фильтр может не срабатывать по различным причинам, которые мы попробуем разобрать в данной статье.

Возможные причины не срабатывания фильтра

  1. Отсутствие триггера события отправки письма:

    • Убедитесь, что событие, которое вызывает данный фильтр, действительно происходит. Например, фильтр woocommerce_email_recipient_new_order вызывается только при создании нового заказа и отправке уведомления. Если заказы создаются, но уведомления не отправляются, стоит проверить настройки уведомлений в WooCommerce.
  2. Отладка конфигурации WooCommerce:

    • Убедитесь, что ваше окружение настроено корректно. Вы упомянули, что другой электронный адрес (например, для восстановления пароля) отправляется, что указывает на работоспособность почтовой системы. Попробуйте создать тестовый заказ через интерфейс администратора и проверьте журнал заказов для поиска возможных ошибок.
  3. Конфликт с другими плагинами:

    • Хотя вы отключили все плагины, стоит еще раз проверить, не остался ли включённым какой-либо плагин, который обрабатывает уведомления о заказах. Некоторые плагины могут переопределять стандартные методы WooCommerce, включая отправку уведомлений.
  4. Кастомные изменения темы:

    • Если в вашей теме есть переопределения WooCommerce, такие как admin-new-order.php, убедитесь, что они не содержат ошибок и соответствуют стандартам платформы. Вы уже упоминали, что содержимое этого файла идентично стандартной версии, но стоит проверить другие файлы, которые могут влиять на логику отправки электронных писем.
  5. Крон задачи и доступность расписаний:

    • WooCommerce использует WP Cron для планирования задач, включая отправку электронных писем. Если вы работаете на локальном сервере, убедитесь, что WP Cron активен и работает корректно. Иногда необходимо выполнить тестовый заказ вручную или запустить крон-задачи. Вы можете воспользоваться плагинами, такими как WP Crontrol, для проверки задач WP Cron.
  6. Логика обработки писем:

    • Для дальнейшего исследования, добавьте временные сообщения в ваши хук-функции, чтобы понять, когда функция wc_change_admin_new_order_email_recipient вызывается. Например, используйте error_log для записи сообщений в файл журнала:
    function wc_change_admin_new_order_email_recipient( $recipient, $order ) {
       error_log('Triggered wc_change_admin_new_order_email_recipient!'); // Добавлено для отладки
       // Ваш код здесь
       return $recipient;
    }

Альтернативные решения

Вместо того, чтобы зависеть от фильтра, можно попробовать непосредственно изменить заголовки электронных писем. Использование фильтра woocommerce_email_headers может помочь вам гибко настраивать получателей:

add_filter( 'woocommerce_email_headers', 'customize_email_recipients', 10, 2 );
function customize_email_recipients( $headers, $object ) {
    if ( $object instanceof WC_Order ) {
        $headers .= 'CC: test@example.com' . "\r\n"; // Добавление дополнительного получателя
    }
    return $headers;
}

Заключение

Если фильтр woocommerce_email_recipient_new_order не срабатывает, важно проверить все предыдущие этапы обработки заказов в WooCommerce. Внимательное внимание к деталям и методическая отладка помогут вам найти решение вашей проблемы. Не забывайте также о регулярном обновлении компонентов вашего окружения и наличии необходимых резервных копий.

Оцените материал
Добавить комментарий

Капча загружается...