Добавить получателей электронной почты от фабрики полей 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 вашей активной дочерней темы (или активной темы). Сейчас проверено и работает.

Другие вопросы по тегам