使WooCommerce中不需要结帐地址字段 [英] Make checkout addresses fields not required in WooCommerce

查看:92
本文介绍了使WooCommerce中不需要结帐地址字段的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在Woocommerce中,我尝试使用下面的代码使结帐地址字段不是必需的...但是我有



如何制作WooCommerce中不需要的结帐地址字段?

解决方案

您应该使用 woocommerce_default_address_fields 过滤器钩子代替 此处



替换代码:

  //帐单和送货地址字段
add_filter('woocommerce_default_address_fields','filter_default_address_fields',20,1);
function filter_default_address_fields($ address_fields){
//仅在结帐页面上
if(!is_checkout())返回$ address_fields;

//此数组中的所有字段键
$ key_fields = array('country','first_name','last_name','company','address_1','address_2','城市,州,邮政编码);

//遍历每个地址字段(计费和发货)
foreach($ key_fields as $ key_field)
$ address_fields [$ key_field] ['required'] = false;

返回$ address_fields;
}

由于默认情况下已经需要帐单电子邮件和电话 ,如果您不想要求他们,则应该使用以下附加代码:

  / /为电子邮件和电话计费-使其不需要
add_filter('woocommerce_billing_fields','filter_billing_fields',20,1);
function filter_billing_fields($ billing_fields){
//仅在结帐页面上
if(!is_checkout())返回$ billing_fields;

$ billing_fields [’billing_phone’] [‘required’] =假;
$ billing_fields [’billing_email’] [‘required’] =假;
return $ billing_fields;
}

所有代码都放在活动子主题(或活动子主题)的function.php文件中主题)。经过测试,可以正常工作。


In Woocommerce I am trying to make checkout adresses fields not required with the code below… But I've got this error "Please enter an address to continue", when submitting checkout form.

My code to set adresses checkout fields not required:

add_filter( 'woocommerce_billing_fields', 'wc_npr_filter_phone', 10, 1 
);
function wc_npr_filter_phone( $address_fields ) {
    $address_fields['billing_phone']['required'] = true;
    $address_fields['billing_country']['required'] = false;
    $address_fields['billing_last_name']['required'] = false;
    $address_fields['billing_city']['required'] = false;
    $address_fields['billing_postcode']['required'] = false;
    $address_fields['billing_email']['required'] = false;
    $address_fields['billing_state']['required'] = false;
    $address_fields['billing_address_1']['required'] = false;
    $address_fields['billing_address_2']['required'] = false;
    return $address_fields;

}

//make shipping fields not required in checkout
add_filter( 'woocommerce_shipping_fields', 
'wc_npr_filter_shipping_fields', 10, 1 );
function wc_npr_filter_shipping_fields( $address_fields ) {
    $address_fields['shipping_first_name']['required'] = false;
    $address_fields['shipping_last_name']['required'] = false;
    $address_fields['shipping_address_1']['required'] = false;
    $address_fields['shipping_address_2']['required'] = false;
    $address_fields['shipping_city']['required'] = false;
    $address_fields['shipping_country']['required'] = false;
    $address_fields['shipping_postcode']['required'] = false;
    $address_fields['shipping_state']['required'] = false;
    return $address_fields;
}

The HTML seems to be okay too:

How to make checkout addresses fields not required in WooCommerce?

解决方案

You should need to use woocommerce_default_address_fields filter hook instead as explained here.

The replacement code:

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

As billing email and phone are already required by default, if you want them to be not required, you should need this additional code:

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

All code goes in function.php file of your active child theme (or active theme). Tested and works.

这篇关于使WooCommerce中不需要结帐地址字段的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆