Woocommerce设置帐单地址可选

问题描述 投票:0回答:1

我重新设计了我的Woo结帐页面,仅在选择条带网关时显示帐单地址字段,否则如果选中了检查网关,我不想收集其帐单邮寄地址。我完成了模板,jQuery调用就像魅力一样。但是,我在将帐单邮寄地址字段设为可选以及需要送货地址字段时遇到问题。

这是我到目前为止...我添加了以下过滤器,使两个地址字段不是必需的:

add_filter( 'woocommerce_default_address_fields' , 'custom_override_default_address_fields');
function custom_override_default_address_fields( $fields ) {
    // add or remove billing fields you do not want
    $keys = array(
        'first_name',
        'last_name',
        'company',
        'address_1',
        'address_2',
        'city',
        'postcode',
        'state',
        'country'
    );

    foreach( $keys as $key ) {
        $fields[$key]['required'] = false;
    }
    return $fields;}

当使用jQuery选择Stripe网关时,我删除了此过滤器,以便根据需要显示帐单地址字段(如果选中了check,则重新应用),此行为适用于帐单地址字段。

我现在需要根据需要显示送货地址字段,因此我尝试添加以下过滤器:

add_filter( 'woocommerce_checkout_fields', 'set_shipping_required_fields',9999 );
function set_shipping_required_fields( $fields ) {
    // add or remove billing fields you do not want

    $shipping_keys = array(
        'first_name',
        'last_name',
        'address_1',
        'city',
        'postcode',
        'state',
    );

    foreach( $shipping_keys as $key ) {
        $fields['shipping']['shipping_'.$key]['required'] = true;

    }
    return $fields;
}

这将成功显示shipping_first_name和shipping_last_name,但是,其余的发货字段最初会根据需要呈现,但稍后一瞬间将恢复为可选。有没有人有任何提示我做错了,使帐单地址字段可选,并要求送货地址字段?有没有更好的办法?

wordpress woocommerce checkout
1个回答
0
投票

你应该使用woocommerce_default_address_fields过滤器钩子,而不是here解释。

/ Billing and shipping addresses fields
add_filter( 'woocommerce_default_address_fields' , 'filter_default_address_fields', 20, 1 );
function filter_default_address_fields( $address_fields ) {
// Only on checkout page
if( ! is_checkout() ) return $address_fields;

// All field keys in this array
$key_fields = array('country','first_name','last_name','company','address_1','address_2','city','state','postcode');

// Loop through each address fields (billing and shipping)
foreach( $key_fields as $key_field )
    $address_fields[$key_field]['required'] = false;

return $address_fields;
}

由于默认情况下已经需要开票电子邮件和电话,如果您不需要它们,则需要以下附加代码:

// For billing email and phone - Make them not required
add_filter( 'woocommerce_billing_fields', 'filter_billing_fields', 20, 1 );
function filter_billing_fields( $billing_fields ) {
// Only on checkout page
if( ! is_checkout() ) return $billing_fields;

$billing_fields['billing_phone']['required'] = false;
$billing_fields['billing_email']['required'] = false;
return $billing_fields;

}

所有代码都在您的活动子主题(或活动主题)的function.php文件中。经过测试和工作。

© www.soinside.com 2019 - 2024. All rights reserved.