php - 如何根据国家/地区隐藏 WooCommerce 结帐时的州字段

标签 php wordpress woocommerce checkout

基于How to remove all Woocommerce checkout billing fields without errors答案代码,这是我的代码尝试:

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

我的目标是根据国家/地区隐藏州字段。例如。

  • 如果国家/地区 = 意大利,则显示州字段
  • 如果国家 = 法国,则隐藏州字段。

因此我尝试插入 if 条件,但没有得到所需的结果。

如果有人能给我建议,我将不胜感激。

最佳答案

您的代码包含一些错误和缺点

  • 尝试对您的代码进行的基于州的修改并不适用于该国家/地区
  • 您的代码包含一个 fatal error :“未捕获错误: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 );

关于php - 如何根据国家/地区隐藏 WooCommerce 结帐时的州字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69390394/

相关文章:

wordpress - 根据特定类别 woocommerce 获取最小价格变化和最大价格变化

php - 如何删除结帐页面上的帐单详细信息并将帐单详细信息更改为 MailChimp 时事通讯

php - Woocommerce 自定义支付网关重定向

http-status-code-404 - 自定义帖子类型上的 Wordpress 预览中断

php - 如何在 PHP 中实现完整的观察者模式

wordpress - TinyMCE自定义插件,如何根据当前光标位置自动选择单词?

html - 如何获取作者的 ID - Blogger

javascript - 如何为 Woocommerce 中的变体选项强制设置 "selected"属性?

php - 同一患者的不同订单号只能让我从 DB 获取一份

没有框架的 PHP 单元测试......可能吗?建议?