Какой метод или действие срабатывает при изменении способа доставки на странице оформления заказа?


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

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

add_filter( 'woocommerce_checkout_fields', 'disable_required_address_shipping' );

function disable_required_address_shipping($fields ) {
    if ( check_if_local_pickup() ) {

        $fields['billing']['billing_address_1']['required'] = false;
        $fields['billing']['billing_address_2']['required'] = false;
        $fields['billing']['billing_city']['required'] = false;
    }

    return $fields;

}

function check_if_local_pickup() {
    $chosen_methods = WC()->session->get( 'chosen_shipping_methods' );
    $chosen_shipping = $chosen_methods[0]; 
    if ($chosen_shipping == 'local_pickup') { 
        return true;
    }
}

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

Я пытался найти решение здесь и не смог его найти.

Есть ли какое-либо действие, которое срабатывает при изменении способа доставки?
Есть идеи?

Author: LoicTheAztec, 2016-05-05

1 answers

Для запуска действия при изменении способа доставки вы можете использовать do_action( 'woocommerce_shipping_method_chosen', $chosen_method );:

do_action( 'woocommerce_shipping_method_chosen', 'check_if_local_pickup', 10, 1 );
function check_if_local_pickup( $chosen_method ) {
    $chosen_methods = WC()->session->get( 'chosen_shipping_methods' );
    $chosen_shipping = $chosen_methods[0]; 
    if ($chosen_shipping == 'local_pickup') { 
        return true;
    }
}

Ссылки:
woocommerce_shipping_метод_выбран (hookr.io)
Исходный код: класс WC_Shipping (строка 311)

 1
Author: LoicTheAztec, 2016-05-06 14:37:38