php - 如何根据国家/地区隐藏 WooCommerce 结帐时的状态字段
问题描述
基于How to remove all Woocommerce checkout billing fields without errors answer code,这是我的代码尝试:
add_action( 'woocommerce_before_checkout_form', 'hide_checkout_billing_country', 5 );
function hide_checkout_billing_country() {
echo '<style>#billing_state_field{display:none !important;}</style>';
}
add_filter('woocommerce_billing_fields', 'customize_checkout_fields', 100 );
function customize_checkout_fields( $fields ) {
if ( is_checkout() ) {
// HERE set the required key fields below
$chosen_fields = array('first_name', 'last_name', 'address_1', 'address_2', 'city', 'postcode', 'country', 'state');
foreach( $chosen_fields as $key ) {
if( isset($fields['billing_'.$key]) && $key !== 'state') {
unset($fields['billing_'.$key]); // Remove all define fields except country
}
}
}
return $fields;
}
我的目标是根据国家/地区隐藏状态字段。例如。
- 如果 country = Italy 则显示 state 字段
- 如果国家=法国,则隐藏状态字段..
所以我尝试插入一个 if 条件,但没有得到想要的结果。
如果有人能给我建议,将不胜感激。
解决方案
您的代码包含一些错误和缺点
- 您的代码尝试中的修改,基于状态不适用于国家
- 您的代码包含致命错误:“未捕获的错误:call_user_func_array():参数 #1 ($callback) 必须是有效的回调,未找到函数“customize_checkout_fields”或..我已经编辑了这个
- 您可以使用
WC()->customer->get_billing_country()
来获取帐单国家/地区
所以你得到:
function filter_woocommerce_billing_fields( $fields ) {
// Returns true when viewing the checkout page
if ( is_checkout() ) {
// Get billing country
$billing_country = WC()->customer->get_billing_country();
// Multiple country codes can be added, separated by a comma
$countries = array( 'IT' );
// NOT in array
if ( ! in_array( $billing_country, $countries ) ) {
// HERE set the fields below, multiple fields can be added, separated by a comma
$chosen_fields = array( 'state' );
// Loop through
foreach( $chosen_fields as $key ) {
// Isset
if ( isset( $fields['billing_' . $key] ) ) {
// Remove all defined fields
unset( $fields['billing_' . $key] );
}
}
}
}
return $fields;
}
add_filter( 'woocommerce_billing_fields', 'filter_woocommerce_billing_fields', 10, 1 );
推荐阅读
- amazon-web-services - Packer 可以在本地构建 AMI(即,不连接到 AWS)吗?
- python - 舍入包含数字和字符串的数据框中的所有数字?
- javascript - Nuxtjs toastr 和数据表插件在 adminLTE - 3 模板中不起作用
- c# - 如何使用 C# 将不同方法的结果加载到变量中
- apache-spark - 在 Kubernetes 上运行 Spark 时,是否可以作为另一个用户以 root 身份运行?
- java - 休眠:无法确定类型:> java.util.List
- qr-code - 使用 MS Pos for .Net 无法控制 EPSON TM88 V 上打印的 QR 码的大小
- scala - 如何映射 Spark Vector?
- python-3.x - Python JSON 计数
- gatsby - 使用 gatsby-plugin-algolia 在 Algolia 仪表板中上传降价结果时出现问题