Удалить поле заказа заметок для виртуальных продуктов только в Woocommerce - PullRequest
0 голосов
/ 26 сентября 2018

В Woocommerce я использую следующий код, который отключает все поля оформления заказа, кроме примечаний к заказу и заголовка «Дополнительная информация».

Если в корзине есть только виртуальные товары, нет полей, кроме «Имя», «Фамилия» и «Имя»поле электронной почты должно быть показано.

Код:

add_filter( 'woocommerce_checkout_fields' , 'simple_virtual_checkout' );
function simple_virtual_checkout( $fields ) {
    $only_virtual_products = true;
    foreach( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
    // Check if there are non-virtual products
    if ( ! $cart_item['data']->is_virtual() ) $only_virtual_products = false; 
    }
    if( $only_virtual_products ) {
    // remove billing fields
    unset($fields['billing']['billing_company']);
    unset($fields['billing']['billing_address_1']);
    unset($fields['billing']['billing_address_2']);
    unset($fields['billing']['billing_city']);
    unset($fields['billing']['billing_postcode']);
    unset($fields['billing']['billing_country']);
    unset($fields['billing']['billing_state']);
    unset($fields['billing']['billing_phone']);
    add_filter( 'woocommerce_enable_order_notes_field', '__return_false' );

    // remove shipping fields 
    unset($fields['shipping']['shipping_first_name']);    
    unset($fields['shipping']['shipping_last_name']);  
    unset($fields['shipping']['shipping_company']);
    unset($fields['shipping']['shipping_address_1']);
    unset($fields['shipping']['shipping_address_2']);
    unset($fields['shipping']['shipping_city']);
    unset($fields['shipping']['shipping_postcode']);
    unset($fields['shipping']['shipping_country']);
    unset($fields['shipping']['shipping_state']);
    }
    return $fields;
}

Любая помощь высоко ценится.

1 Ответ

0 голосов
/ 26 сентября 2018

Вам просто нужно добавить эту строку в вашу функцию:

unset($fields['order']['order_comments']);

Таким образом, ваш код будет:

add_filter( 'woocommerce_checkout_fields' , 'simple_virtual_checkout', 20, 1 );
function simple_virtual_checkout( $fields ) {
    $only_virtual_products = true;

    // Loop through cart items
    foreach( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
        // Check for non-virtual products
        if ( ! $cart_item['data']->is_virtual() ) 
            $only_virtual_products = false; 
    }

    if( $only_virtual_products ) {
        // remove billing fields
        unset($fields['billing']['billing_company']);
        unset($fields['billing']['billing_address_1']);
        unset($fields['billing']['billing_address_2']);
        unset($fields['billing']['billing_city']);
        unset($fields['billing']['billing_postcode']);
        unset($fields['billing']['billing_country']);
        unset($fields['billing']['billing_state']);
        unset($fields['billing']['billing_phone']);
        add_filter( 'woocommerce_enable_order_notes_field', '__return_false' );

        // remove shipping fields 
        unset($fields['shipping']['shipping_first_name']);    
        unset($fields['shipping']['shipping_last_name']);  
        unset($fields['shipping']['shipping_company']);
        unset($fields['shipping']['shipping_address_1']);
        unset($fields['shipping']['shipping_address_2']);
        unset($fields['shipping']['shipping_city']);
        unset($fields['shipping']['shipping_postcode']);
        unset($fields['shipping']['shipping_country']);
        unset($fields['shipping']['shipping_state']);
        unset($fields['shipping']['shipping_state']);

        // remove order notes
        unset($fields['order']['order_comments']);
    }
    return $fields;
}

Код помещается в файл function.php активной дочерней темы(или активная тема).Протестировано и работает.

По умолчанию на странице оформления заказа в Woocommerce, заголовок "Дополнительная информация" отсутствует .
Так что это, безусловно, связано с некоторыми настройками вашей темыили плагин.

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