php - WooCommerce - 从我的帐户页面中删除国家/地区字段可防止保存地址
问题描述
我只向一个国家销售和运送产品,因此我不想向客户显示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
class intoform-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删除它。
但是....它在我的帐户页面上修复了我的帐单和送货地址中的课程!我仍然不知道这怎么把我的表格弄得这么乱。
解决方案
推荐阅读
- sql - 两个互相引用的 postgresql 表
- java - 调整手势目标的大小后,JavaFX 11 拖放对手势目标无效
- github - 如何阻止您的存储库的 github https 克隆访问
- react-native - 为什么 React Native 的样式组件的 npm 安装失败?
- mysql - 从数据库差异生成更新或替换语句
- java - 如何在事件处理程序中“关闭”JMenu - Java
- javascript - 如何使用 requestFullscreen() 方法从全屏显示的元素中显示模态元素?
- c++ - 未知行但恒定列
- reactjs - 在没有额外渲染的情况下设置更改的依赖项的状态(有一个没有额外渲染的加载器)
- vue.js - VueJS - 在其他绑定的定义中重用道具(字段名)