#php #email #woocommerce
#php #Адрес электронной почты #woocommerce
Вопрос:
Я добавил некоторые дополнительные поля настроек в электронные письма клиентов и вывожу сохраненные значения во все шаблоны электронной почты клиентов с обратным вызовом на woocommerce_email_before_order_table
перехват.
Я специально тестирую электронную почту для обработки заказа. Когда это электронное письмо отправляется после оформления заказа, данные в электронном письме отсутствуют. Но. При изменении статуса на обработку электронное письмо содержит данные.
Упрощенный пример ниже
Добавление полей в электронные письма
add_action( 'woocommerce_email_classes', 'add_settings', 9999 );
function add_settings( $email_class_list ) {
foreach( $email_class_list as $email_class ) {
add_filter( 'woocommerce_settings_api_form_fields_' . $email_class->id, 'the_fields', 10, 1 );
}
return $email_class_list;
}
Поля
function the_fields( $form_fields ) {
$form_fields['field_id_one'] = array(
'title' => 'Title',
'description' => 'This text will appear above the email templats default content',
'type' => 'textarea',
'default' => '',
);
$form_fields['field_id_two'] = array(
'title' => 'Title',
'description' => 'This text will appear above the email templats default content',
'type' => 'textarea',
'default' => '',
);
return $form_fields;
}
Отображение данных в электронном письме
add_action( 'woocommerce_email_before_order_table', 'display_in_email', 20, 4 );
function display_in_email( $order, $sent_to_admin, $plain_text, $email ) {
echo wpautop( $email->get_option( 'field_id_one' ) );
}
Я попытался просто повторить некоторый произвольный текст, и с данными, работающими при изменении статуса, это не проблема с кодом внутри обратного вызова.
Я делаю этот вызов из файла в плагине.
Комментарии:
1. Не могли бы вы обновить свой вопрос, добавив весь затронутый код? Скорее всего, вы сохраняете данные после отправки электронной почты.
2. Данные находятся в базе данных. Он сохраняется при сохранении определенных параметров электронной почты. Я добавил поля через
woocommerce_settings_api_form_fields_
фильтр, и поэтому они сохраняются через класс WC_Settings_API. Я добавил полный код.3. Сохраняются ли данные как пользовательская мета заказа? Найдены ли пользовательские поля при оформлении заказа? Важно ли сохранять эти данные в качестве параметров электронной почты? Или ваша цель просто показать эти данные в теле письма?
4. Тело электронного письма. Это очень простая задача. И это работает, но не при первой отправке электронной почты. Добавьте поле в существующий массив настроек, который сохраняется в таблице параметров, а затем отобразите эту опцию в электронном письме. Он работает и в других электронных письмах. Просто не первый заказ получил электронное письмо, инициированное оформлением заказа. Но то же самое электронное письмо работает при инициализации ручного изменения статуса. Это не связано с заказом, и я мог бы переопределить шаблон в теме, но почему также не работает перехват?
5. Я попробовал ваш код, и он работает для меня. Чтобы выполнить тест, я просто добавил
default
ключ каждого поля с текстом-заполнителем. В каждом первом полученном электронном письме я правильно отображаю содержимоеfield_id_one
поля. Шаблоны следующие:WC_Email_New_Order
,WC_Email_Customer_On_Hold_Order
иWC_Email_Customer_Processing_Order
. Попробуйте увеличить приоритет фильтра следующим образом:add_filter( 'woocommerce_settings_api_form_fields_' . $email_class->id, 'the_fields', 9999, 1 );