Отправлять уведомление по электронной почте, когда код купона используется в заказе WooCommerce - PullRequest
3 голосов
/ 04 августа 2020

Как отправить уведомление о заказе деловому партнеру, когда используется специальный купон c?

Я нашел решение для случая, когда купон применяется здесь: Отправить уведомление по электронной почте, когда в WooCommerce применяется специальный код купона c

Однако мне нужно найти решение, когда после отправки заказа, потому что заказ не всегда отправляется после применения купона.

У каждого купона будет свой адрес электронной почты.

1 Ответ

1 голос
/ 04 августа 2020

Сначала мы добавляем поле настройки на административные страницы купонов, чтобы указать получателя электронной почты для купона:

// Add a custom field to Admin coupon settings pages
add_action( 'woocommerce_coupon_options', 'add_coupon_text_field', 10 );
function add_coupon_text_field() {
    woocommerce_wp_text_input( array(
        'id'                => 'email_recipient',
        'label'             => __( 'Email recipient', 'woocommerce' ),
        'placeholder'       => '',
        'description'       => __( 'Send an email notification to a defined recipient' ),
        'desc_tip'    => true, // Or false

    ) );
}

// Save the custom field value from Admin coupon settings pages
add_action( 'woocommerce_coupon_options_save', 'save_coupon_text_field', 10, 2 );
function save_coupon_text_field( $post_id, $coupon ) {
    if( isset( $_POST['email_recipient'] ) ) {
        $coupon->update_meta_data( 'email_recipient', sanitize_text_field( $_POST['email_recipient'] ) );
        $coupon->save();
    }
}

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

Внимание! выберите только одну из следующих функций:

Для версий woocommerce До 4.3 (новый крючок)

// For Woocommerce version 4.3+
add_action( 'woocommerce_checkout_order_created', 'custom_email_for_orders_with_applied_coupon' );
function custom_email_for_orders_with_applied_coupon( $order ){
    $used_coupons = $order->get_used_coupons();

    if( ! empty($used_coupons) ){
        foreach ( $used_coupons as $coupon_code ) {
            $coupon    = new WC_Coupon( $coupon_code ); // WC_Coupon Object
            $recipient = $coupon->get_meta('email_recipient'); // get recipient

            if( ! empty($recipient) ) {
                $subject = sprintf( __('Coupon "%s" has been applied'), $coupon_code );
                $content = sprintf( __('The coupon code "%s" has been applied by a customer'), $coupon_code );
                wp_mail( $recipient, $subject, $content ); // Send email
            }
        }
    }
}

Или для всех версий WooCommerce (начиная с версии 3.0)

// For all Woocommerce versions (since 3.0)
add_action( 'woocommerce_checkout_update_order_meta', 'custom_email_for_orders_with_applied_coupon' );
function custom_email_for_orders_with_applied_coupon( $order_id ){
    $order = wc_get_order( $order_id );

    $used_coupons = $order->get_used_coupons();

    if( ! empty($used_coupons) ){
        foreach ( $used_coupons as $coupon_code ) {
            $coupon    = new WC_Coupon( $coupon_code ); // WC_Coupon Object
            $recipient = $coupon->get_meta('email_recipient'); // get recipient

            if( ! empty($recipient) ) {
                $subject = sprintf( __('Coupon "%s" has been applied'), $coupon_code );
                $content = sprintf( __('The coupon code "%s" has been applied by a customer'), $coupon_code );
                wp_mail( $recipient, $subject, $content ); // Send email
            }
        }
    }
}

Код входит в functions. php файл вашей активной дочерней темы (или активной темы ). Проверено и работает.

введите описание изображения здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...