【问题标题】:Keep state field as a dropdown when one allowed country on Woocommerce当 Woocommerce 允许一个国家/地区时,将状态字段保留为下拉列表
【发布时间】:2019-02-01 00:26:48
【问题描述】:

我认为这很容易,但我没有得到我想要的结果。基本上我在 woocommerce CA 和美国有 2 个国家。我正在尝试有条件地删除一个,我可以使用下面的代码来做到这一点。但是,当我从 2 个国家转到 1 个国家时,下拉菜单仍然出现。我也注意到以下代码的一件奇怪的事情是,如果我进入我的 Woocommerce 设置,那么使用此代码删除的国家也会从“销售到特定国家/地区”选项中删除......不是确定发生了什么。提前致谢。

add_filter( 'woocommerce_countries', 'custom_woocommerce_countries_limit');
function custom_woocommerce_countries_limit( $countries ) {     
        /*
        will place a conditional here if x then remove country
        */
        unset($countries['CA']);
        $countries = array(
            'US'  => __( 'United States', 'woocommerce' )
         ); 
    return $countries;
}

编辑:使用这个钩子可能接近答案,但是当我使用这个钩子时,状态不会变成下拉列表...?

add_filter( 'woocommerce_countries_allowed_countries', 'custom_woocommerce_countries_limit');

【问题讨论】:

    标签: php wordpress woocommerce checkout countries


    【解决方案1】:

    您可以使用woocommerce_countries_allowed_countries 过滤钩子,但您需要一些额外的代码来强制状态字段成为状态下拉列表(选择字段)

    add_filter( 'woocommerce_countries_allowed_countries', 'filter_allowed_countries_conditionally');
    function filter_allowed_countries_conditionally( $countries ) {
        // will place a conditional here if x then remove country
        if( true ) {
            $countries = array( 'US'  => __( 'United States', 'woocommerce' ) );
        } else {
            $countries = array( 'CA'  => __( 'Canada', 'woocommerce' ) );
        }
        return $countries;
    }
    
    // Force billing state field type to be a dropdown
    add_filter( 'woocommerce_billing_fields', 'filter_billing_state_fields', 100, 1 );
    function filter_billing_state_fields( $fields ) {
        $fields['billing_state']['type'] = 'state';
        return $fields;
    }
    
    // Force shipping state field type to be a dropdown 
    add_filter( 'woocommerce_shipping_fields', 'filter_shipping_state_fields', 100, 1 );
    function filter_shipping_state_fields( $fields ) {
        $fields['shipping_state']['type'] = 'state';
        return $fields;
    }
    

    代码进入您的活动子主题(或活动主题)的 function.php 文件中。经过测试并且可以工作。

    【讨论】:

      猜你喜欢
      • 2019-02-16
      • 2019-04-07
      • 2012-06-18
      • 2021-03-24
      • 2021-11-22
      • 2017-03-06
      • 2011-01-09
      • 2013-02-27
      • 1970-01-01
      相关资源
      最近更新 更多