Удалить выбранные поля оформления заказа с помощью woocommerce в зависимости от способа доставки - PullRequest
0 голосов
/ 24 мая 2018

Здравствуйте, поэтому я пытаюсь выяснить, как удалить некоторые поля для выставления счетов, используя woocommerce checkout в зависимости от выбранного способа доставки.Поэтому с помощью этого кода я пытаюсь сбросить адрес выставления счета, город выставления счета, состояние выставления счета и почтовый индекс, когда клиент выбирает местную доставку, но этот код не работает.Любая помощь будет оценена.

add_filter('woocommerce_checkout_fields', 'xa_remove_billing_checkout_fields');

function xa_remove_billing_checkout_fields($fields) {
$shipping_method ='local_pickup:1'; // Set the desired shipping method to hide the checkout field(s).

global $woocommerce;
$chosen_methods = WC()->session->get( 'chosen_shipping_methods' );
$chosen_shipping = $chosen_methods[0];

if ($chosen_shipping == $shipping_method) {
    unset($fields['billing']['billing_address_1']); // Add/change filed name to be hide
    unset($fields['billing']['billing_address_2']);
    unset($fields['billing']['billing_city']);
    unset($fields['billing']['billing_state']);
    unset($fields['billing']['billing_postcode']);
}
return $fields;
}

1 Ответ

0 голосов
/ 24 мая 2018

Вот как я бы решил эту проблему.
Это будет включать php, css и javascript (jQuery).

PHP

add_filter( 'woocommerce_checkout_fields', 'xa_remove_billing_checkout_fields' );
function xa_remove_billing_checkout_fields( $fields ) {
    // change below for the method
    $shipping_method ='local_pickup:1'; 
    // change below for the list of fields
    $hide_fields = array( 'billing_address_1', 'billing_address_2', 'billing_city', 'billing_state', 'billing_postcode' );

    $chosen_methods = WC()->session->get( 'chosen_shipping_methods' );
    // uncomment below line and reload checkout page to check current $chosen_methods
    // print_r($chosen_methods);
    $chosen_shipping = $chosen_methods[0];

    foreach($hide_fields as $field ) {
        if ($chosen_shipping == $shipping_method) {
            $fields['billing'][$field]['required'] = false;
            $fields['billing'][$field]['class'][] = 'hide';
        }
        $fields['billing'][$field]['class'][] = 'billing-dynamic';
    }

    return $fields;
}

Вместо того, чтобы сбрасывать поля, мы просто изменим его required ness.Это означает, что если выбранный метод является тем, который мы хотим проверить, мы не будем делать это обязательным.Затем мы добавим класс hide.При этом мы можем скрыть эти поля с помощью css.И woocommerce не выдаст ошибку, которая требуется.Используя jQuery, мы можем показать / скрыть эти поля.Так что, если мы удалили его при первом запуске, показывать нечего, потому что в первую очередь не было полей и с этим страница должна была перезагрузиться.

Итак, вот часть javascript и css.

add_action( 'wp_footer', 'cart_update_script', 999 );
function cart_update_script() {
    if (is_checkout()) :
    ?>
    <style>
        .hide {display: none!important;}
    </style>
    <script>
        jQuery( function( $ ) {

            // woocommerce_params is required to continue, ensure the object exists
            if ( typeof woocommerce_params === 'undefined' ) {
                return false;
            }

            $(document).on( 'change', '#shipping_method input[type="radio"]', function() {
                // change local_pickup:1 accordingly 
                $('.billing-dynamic').toggleClass('hide', this.value == 'local_pickup:1');
            });
        });
    </script>
    <?php
    endif;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...