Wordpress 设置帐单地址可选

Wordpress 设置帐单地址可选,wordpress,woocommerce,checkout,Wordpress,Woocommerce,Checkout,我重新设计了我的Woo结帐页面,以便在选择条带网关时仅显示帐单地址字段,否则,如果选择支票网关,我不想收集他们的帐单地址。我已经完成了模板,jQuery调用工作得很好。但是,我在设置帐单地址字段为可选字段和发货地址字段为必需字段时遇到了问题 以下是我到目前为止所做的…我添加了以下过滤器,以使这两个地址字段都不是必需的: add_filter( 'woocommerce_default_address_fields' , 'custom_override_default_address_fiel

我重新设计了我的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选择条带网关时,我将删除此过滤器,以便账单地址字段按要求显示(如果选择支票,则重新应用),此行为适用于账单地址字段

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


这将根据需要成功显示shipping_first_名称和shipping_last_名称,但是,其余的shipping字段最初会根据需要呈现,但一秒钟后会恢复为可选。有没有人知道我做错了什么,使账单地址字段成为可选字段,发货地址字段成为必需字段?有更好的方法吗?

如前所述,您应该使用woocommerce\u default\u address\u 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文件中。测试和工作

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