在结帐页面上更改送货方式时会触发哪种方法或操作挂钩?

时间:2016-05-05 19:01:55

标签: php wordpress woocommerce checkout shipping

当用户选择“本地取件”以外的送货方式时,我需要将地址字段更改为“必需”。

我默认使用过滤器使其默认为可选(默认选择本地拾取),如下所示:

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;
    }
}

但我需要使用动作动态更改它。

我试图在这里找到一个解决方案但找不到解决方案。

更改送货方式时是否有任何行动?
有什么想法吗?

1 个答案:

答案 0 :(得分:1)

要在更改送货方式时触发操作,您可以使用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_method_chosen (hookr.io)
Source code: class WC_Shipping (line 311)