【发布时间】:2021-01-25 03:03:58
【问题描述】:
我只向一个国家/地区销售和运送产品,因此我不想向客户显示 billing_country 和 shipping_country 字段。 我使用unset($fields['billing_country'])从结帐和我的帐户地址页面中删除了字段。
结帐工作正常,但在我从我的帐户页面中删除这些字段后,我无法保存或编辑我的帐户地址页面上的任何地址。页面只会自行刷新,不会改变任何东西。
这是我的主题中的 functions.php。
add_filter( 'woocommerce_checkout_fields' , 'custom_override_checkout_fields' );
function custom_override_checkout_fields( $fields ) {
unset($fields['billing']['billing_country']);
unset($fields['shipping']['shipping_country']);
unset($fields['billing']['billing_address_2']);
unset($fields['shipping']['shipping_address_2']);
unset($fields['shipping']['shipping_phone']);
return $fields;
}
add_filter( 'woocommerce_billing_fields' , 'custom_override_billing_fields' );
function custom_override_billing_fields( $fields ) {
unset($fields['billing_country']);
unset($fields['billing_address_2']);
return $fields;
}
add_filter( 'woocommerce_shipping_fields' , 'custom_override_shipping_fields' );
function custom_override_shipping_fields( $fields ) {
unset($fields['shipping_country']);
unset($fields['shipping_address_2']);
unset($fields['shipping_phone']);
return $fields;
}
如果我注释掉
unset($fields['billing_country']); 或
unset($fields['shipping_country']);
一切正常,它保存任何地址。取消设置其他字段也可以。我做错了什么,有没有其他方法可以删除这些字段?谢谢。
更新:
警告 - 长篇大论
最奇怪的事情发生了。我使用 css 隐藏了这些字段,并将它们设置在 functions.php 中。但是后来,我的帐单和送货地址类搞砸了!
我的 woocommerce_billing_fields 过滤器钩子中有这些行:
$fields['billing_city']['class'] = array('form-row-last');
$fields['billing_postcode']['class'] = array('form-row-first');
$fields['billing_email']['class'] = array('form-row-last');
$fields['billing_phone']['class'] = array('form-row-first');
这应该使这 4 个字段占据帐单地址表单中行的 50% 宽度。 它适用于电子邮件和电话,但城市和邮政编码保持 100% 宽度。它应该将 form-row-wide 类替换为 form-row-first/last 并且这样做了,但仅限于两个。
所以我查看了浏览器,发现不知何故这两个元素具有data-o_class 属性。
这是我发现的:
<p class="form-row validate-required validate-postcode form-row-wide address-field"
id="billing_postcode_field" data-priority="65"
data-o_class="form-row form-row-first validate-required validate-postcode"></p>
上面的元素有问题并且有这个包含所有类的data-o_class 属性,但是,下面的元素很好并且他的类被替换了:
<p class="form-row form-row-first validate-required validate-phone"
id="billing_phone_field"
data-priority="100"></p>
当我使用unset($fields['billing_country']) 删除国家/地区字段时,问题消失了,但我又无法保存地址。
为了修复它,我不得不使用另一个过滤器 - woocommerce_default_address_fields -
这就是我在functions.php 中所做的:
add_filter( 'woocommerce_default_address_fields','custom_override_default_address_fields' );
function custom_override_default_address_fields( $fields ){
unset($fields['country']);
return $fields;
}
做得更好!
它使国家/地区字段再次出现在结帐和我的帐户页面上,即使 它仍然没有设置其他过滤器。但它没有以正确的顺序出现,没有样式并且在表单的末尾。因此,我不得不再次使用 css 将其删除。
但是....它在我的帐户页面上修复了我的帐单和送货地址中的类!我仍然不知道这是怎么把我的表格弄得这么乱的。
【问题讨论】:
-
我也使用
filter hooks,而且你的做法是正确的。所以有什么问题?运行这些钩子时,您是否遇到任何错误? -
@Ruvee 没有错误,在调试模式下一切都清楚,不知道是什么问题。我检查了整个主题,没有发现任何错误。所以我继续将字段隐藏在 css 中,它并不满足我,但它就是这样。
标签: php wordpress woocommerce hook-woocommerce