Добавить получателей электронной почты от фабрики полей wc для уведомления по электронной почте woocommerce
Я продаю продукт курса, используя woocommerce. Курс использует фабрику полей wc для пользовательских полей продукта для имени студента и адреса электронной почты студента. Имя поля для адреса электронной почты студента "student_email". Затем я пытаюсь взять значение из этого поля (адрес электронной почты) и использовать его в качестве получателя электронного письма от woocommerce при покупке этого продукта.
Введенные значения отображаются на странице корзины, в электронных письмах о получении заказа и т. Д. Настроенный мной настраиваемый шаблон электронной почты работает (в настоящее время он отправляет электронное письмо администратору, пока я не получу эту работу). Но я не могу понять, как получить значение адреса электронной почты студента для использования в качестве получателя.
Я пробовал несколько вещей, в том числе следующее:
$order_id = method_exists( $order, 'get_id' ) ? $order->get_id() : $order->id;
// Get "student email" custom field value
$student_emails = get_post_meta($order_id, "wccpf_student_email", true );
$this->recipient = $student_emails;
а также
function custom_add_to_cart_action_handler($_cart_item_data, $_product_id) {
if(isset($_cart_item_data[“wccpf_student_email”])) {
$value = $_cart_item_data[“wccpf_student_email”];
return $value;
}
}
add_filter(‘woocommerce_add_cart_item_data’, array( $this, ‘custom_add_to_cart_action_handler’ ), 100, 2);
$this->recipient = $value;
Это сделано в моем php-файле класса моей электронной почты. Но ничто, кажется, не захватывает значения поля настраиваемого продукта student_email. Любая помощь приветствуется!
1 ответ
Код обновлен
Так как ваши настраиваемые поля "student_email" установлены на странице продукта, они сохраняются в виде метаданных элементов заказа (а не метаданных заказа) с именем метки, которое вы для него установили…
Таким образом, мета-ключ должен быть "Электронная почта учащегося" (имя метки), и вам нужно будет циклически просматривать элементы заказа, чтобы получить эти значения электронной почты (если для заказа имеется более одного элемента.
Приведенный ниже код получит эти электронные письма (если они существуют) и добавит тему к получателям электронной почты для уведомлений о "обработке" и "выполненных" письмах:
add_filter( 'woocommerce_email_recipient_customer_processing_order', 'student_email_notification', 10, 2 );
add_filter( 'woocommerce_email_recipient_customer_completed_order', 'student_email_notification', 10, 2 );
function student_email_notification( $recipient, $order ) {
if ( ! is_a( $order, 'WC_Order' ) ) return $recipient;
$student_emails = array();
// Loop though Order IDs
foreach( $order->get_items() as $item_id => $item ){
// Get the student email
$student_email = wc_get_order_item_meta( $item_id, 'Student email', true );
if( ! empty($student_email) )
$student_emails[] = $student_email; // Add email to the array
}
// If any student email exist we add it
if( count($student_emails) > 0 ){
// Remove duplicates (if there is any)
$student_emails = array_unique($student_emails);
// Add the emails to existing recipients
$recipient .= ',' . implode( ',', $student_emails );
}
return $recipient;
}
Код помещается в файл function.php вашей активной дочерней темы (или активной темы). Сейчас проверено и работает.