Обязательный выбор переключателя на кассе Woocommerce - PullRequest
0 голосов
/ 01 февраля 2020

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

add_action( 'woocommerce_review_order_before_payment', 'display_extra_fields_after_billing_address' , 10, 1 );
function display_extra_fields_after_billing_address () { ?>
    <h3 class="delivery-options-heading">Delivery Options <sup>*</sup></h3>
    <div class="delivery-options">
        <p><input type="radio" name="delivery_option" value="Have the courier leave a card." required /> Have the courier leave a card.</p>
        <p><input type="radio" name="delivery_option" value="Leave the consignment without a signature." required /> Leave the consignment without a signature.</p>
    </div>
<?php 
}

add_action( 'woocommerce_checkout_update_order_meta', 'add_delivery_option_to_order' , 10, 1);
function add_delivery_option_to_order ( $order_id ) {

    if ( isset( $_POST ['delivery_option'] ) &&  '' != $_POST ['delivery_option'] ) {
        add_post_meta( $order_id, '_delivery_option',  sanitize_text_field( $_POST ['delivery_option'] ) );
    }
}


add_filter( 'woocommerce_email_order_meta_fields', 'add_delivery_option_to_emails' , 10, 3 );

function add_delivery_option_to_emails ( $fields, $sent_to_admin, $order ) {
    if( version_compare( get_option( 'woocommerce_version' ), '3.0.0', ">=" ) ) {            
        $order_id = $order->get_id();
    } else {
        $order_id = $order->id;
    }

    $delivery_option = get_post_meta( $order_id, '_delivery_option', true );

    if ( '' != $delivery_option ) {
    $fields[ 'Delivery Date' ] = array(
        'label' => __( 'Delivery Option', 'delivery_option' ),
        'value' => $delivery_option,
    );
    }
    return $fields;
}

Каждая часть этого работает нормально, за исключением атрибутов required на переключателях, позволяя пользователь оформляет заказ без выбора, что не идеально. По какой-то причине атрибуты required игнорируются.

Как заставить пользователя выбрать одну из переключателей перед проверкой?

Ответы [ 2 ]

0 голосов
/ 01 февраля 2020

Это было решение, немного отличающееся от того, что предлагал Крунал Праджапати . Разница только во второй строке:

function action_woocommerce_after_checkout_validation( $data, $errors ) { 
    if ( empty( $_POST['delivery_option'] ) ) :
        $errors->add( 'required-field', __( 'No delivery option has been selected. Please choose delivery option.', 'woocommerce' ) );
    endif; //Endif
}
// add the action 
add_action( 'woocommerce_after_checkout_validation', 'action_woocommerce_after_checkout_validation', 10, 2 );
0 голосов
/ 01 февраля 2020

Пожалуйста, добавьте этот хук проверки вместе с вашим кодом, который подтвердит ваш выбор при оформлении заказа

function action_woocommerce_after_checkout_validation( $data, $errors ) { 
    if( !isset( $data['delivery_option'] ) || empty( $data['delivery_option'] ) ) :
        $errors->add( 'required-field', __( 'No delivery option has been selected. Please choose delivery option.', 'woocommerce' ) );
    endif; //Endif
}
// add the action 
add_action( 'woocommerce_after_checkout_validation', 'action_woocommerce_after_checkout_validation', 10, 2 );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...