Условные получатели электронной почты на странице оформления заказа WooCommerce с использованием нескольких флажков? - PullRequest
1 голос
/ 07 января 2020

Буду признателен за любую помощь в следующих вопросах ...

На моей странице оформления заказа в WooCommerce мне нужно разрешить своим клиентам выбирать своих нескольких предпочтительных дистрибьюторов, а затем отправлять мне письма с новым заказом и только дилеры, которых они выбирают.

Я не могу на всю жизнь понять, как настроить его, используя мульти-флажки, которые позволили бы им выбрать более одного (т.е. они выбирают Дистрибьютора 1 и 3). и только трое из нас получают новое электронное письмо с заказом.)

Мне удалось выяснить это с помощью выпадающего меню (благодаря прочтению различных сообщений в этом сообществе). Любая помощь будет принята с благодарностью! :)

Текущий код, который я смог собрать вместе (просто немного горжусь собой, потому что он действительно работает):

// // Add custom checkout field
add_action( 'woocommerce_after_order_notes', 'sj_custom_checkout_field' );
function sj_custom_checkout_field( $checkout ) {
    echo '<div id="sj_custom_checkout_field"><h2>' . __('Distributor') . '</h2>';

    woocommerce_form_field( 'my_field_name', array(
        'type'      => 'select',
        'class'     => array('wps-drop'),
        'required'  => true, // Missing
        'options'   => array(
            ''          => __( 'Select Your Preferred Distributor', 'wps' ),
            'Distributor 1'   => __( 'Distributor 1', 'wps' ),
            'Distributor 2'      => __( 'Distributor 2', 'wps' ),
            'Distributor 3'    => __( 'Distributor 3', 'wps' ),
            'Distributor 4'    => __( 'Distributor 4', 'wps' ),
            'Distributor 5'    => __( 'Distributor 5', 'wps' )

        )
    ), $checkout->get_value( 'my_field_name' ) );
    echo '</div>';
}

// Process the checkout
add_action('woocommerce_checkout_process', 'sj_custom_checkout_field_process');
function sj_custom_checkout_field_process() {
    // Check if set, if its not set add an error.
    if ( empty( $_POST['my_field_name'] ) )
        wc_add_notice( __( 'Please select your preferred distributor.' ), 'error' );
}

// Save the custom checkout field in the order meta
add_action( 'woocommerce_checkout_update_order_meta', 'sj_custom_field_checkout_update_order_meta', 10, 1 );
function sj_custom_field_checkout_update_order_meta( $order_id ) {

    if ( ! empty( $_POST['my_field_name'] ) )
        update_post_meta( $order_id, 'my_field_name', $_POST['my_field_name'] );
}

add_filter( 'woocommerce_email_recipient_new_order',  'new_order_conditional_email_recipient', 10, 2 );
function new_order_conditional_email_recipient( $recipient, $order ) {
    if( is_admin() ) return $recipient;

    // Get the order ID (Woocommerce retro compatibility)
    $order_id = method_exists( $order, 'get_id' ) ? $order->get_id() : $order->id;


    // Get the custom field value (with the right $order_id)
    $my_field_name = get_post_meta( $order_id, 'my_field_name', true );


    if ($my_field_name == "Distributor 1")
        $recipient .= ',1@email.com';
    elseif ($my_field_name == "Distributor 2")
        $recipient .= ',2@email.com';
    elseif ($my_field_name == "Distributor 3")
        $recipient .= ',3@email.com';
    elseif ($my_field_name == "Distributor 4")
        $recipient .= ',4@email.com';
     elseif ($my_field_name == "Distributor 5")
        $recipient .= ',5@email.com';

    return $recipient;
}

1 Ответ

0 голосов
/ 07 января 2020

В качестве альтернативы, типы select и radio имеют одинаковые аргументы, вы можете изменить select на radio. Используйте css, чтобы радио выглядело как флажки , если вам действительно нужен стиль, чтобы выглядеть как флажок.

woocommerce_form_field( 'my_field_name', array(
    'type'      => 'radio',
    'class'     => array('wps-drop'),
    'required'  => true, // Missing
    'options'   => array(
        ''          => __( 'Select Your Preferred Distributor', 'wps' ),
        'Distributor 1'   => __( 'Distributor 1', 'wps' ),
        'Distributor 2'      => __( 'Distributor 2', 'wps' ),
        'Distributor 3'    => __( 'Distributor 3', 'wps' ),
        'Distributor 4'    => __( 'Distributor 4', 'wps' ),
        'Distributor 5'    => __( 'Distributor 5', 'wps' )

    )
), $checkout->get_value( 'my_field_name' ) );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...