【问题标题】:WooCommerce: Pre-select and restrict to one state and city on checkoutWooCommerce:结账时预先选择并限制在一个州和城市
【发布时间】:2018-01-08 17:19:20
【问题描述】:

我正在开设一家只向一个城市销售的商店。我正在尝试弄清楚如何将城市选项限制为预先填写的字段。

我已经限制了国家,并在我的functions.php 中使用了以下代码:

add_filter( 'default_checkout_country', 'change_default_checkout_country' );
add_filter( 'default_checkout_state', 'change_default_checkout_state' );

function change_default_checkout_country() {
  return 'PK'; // country code
}

function change_default_checkout_state() {
  return 'SD'; // state code
}

我已经使用以下方法预先选择了状态:

add_filter( 'woocommerce_states', 'bbloomer_custom_woocommerce_states' );

function bbloomer_custom_woocommerce_states( $states ) {
$states['PK'] = array(
'SD' => 'Sindh',
);
return $states;
}

但是……现在城市来了,我迷路了。我试过使用$fields['billing']['billing_city']$fields['billing']['billing_city']['value'] 无济于事。

我希望客户仅限于卡拉奇。我对 WooCommerce 过滤器不是很熟悉,所以我需要帮助来实现这一点。

【问题讨论】:

    标签: php wordpress woocommerce checkout city


    【解决方案1】:

    从 woocommerce 3 开始,default_checkout_countrydefault_checkout_state 过滤器挂钩现已弃用和替换。

    同样在您的最后一个函数中,如果您只想限制一个城市,则不应将您的城市包含在州数组中。相反,您应该只返回一个可能的值。

    所以这将是你的代码:

    // default checkout country
    add_filter( 'default_checkout_billing_country', 'change_default_checkout_country' );
    add_filter( 'default_checkout_shipping_country', 'change_default_checkout_country' );
    function change_default_checkout_country() {
        return 'PK'; // country code
    }
    
    // default checkout state
    add_filter( 'default_checkout_billing_state', 'change_default_checkout_state' );
    add_filter( 'default_checkout_shipping_state', 'change_default_checkout_state' );
    function change_default_checkout_state() {
        return 'SD'; // state code
    }
    
    // Setting one state only
    add_filter( 'woocommerce_states', 'custom_woocommerce_state', 10, 1 );
    function custom_woocommerce_state( $states ) {
        // Returning a unique state
        return array('PK' => array('SD' => 'Sindh'));
    }
    
    // Only one city at checkout
    add_filter( 'woocommerce_checkout_fields', 'custom_checkout_fields', 10, 1 );
    function custom_checkout_fields( $fields ) {
    
        $fields['billing']['billing_city']['type'] = 'select';
        $fields['billing']['billing_city']['options'] = array('Karachi' => 'Karachi');
        $fields['shipping']['shipping_city']['type'] = 'select';
        $fields['shipping']['shipping_city']['options'] = array('Karachi' => 'Karachi');
    
        return $fields;
    }
    

    代码位于您的活动子主题(或主题)的 function.php 文件中或任何插件文件中。

    此代码经过测试,适用于 wooCommerce 版本 3+

    添加上述代码并保存后,您需要在WooCommerce > Settings > General 中以这种方式设置位置:

    然后你会在结帐时得到这样的东西:

    两个下拉菜单只有一个值……所以你得到了你所期望的。

    【讨论】:

    • 这真的很好,我正在为美国的一个网站做这个。更改数组值后,是否需要为城市添加新的添加过滤器功能,还是使用 custom_checkout_fields 功能自行处理?另外,在functions.php文件中是否有一个特定的位置供我添加,或者我可以将它添加到文件的底部?感谢您的宝贵时间。
    • 别介意我的朋友,我在一个网站上试过这个,效果很好。再次感谢您的知识。
    • 感谢@LoicTheAztec 提供的精彩绝伦的解决方案
    猜你喜欢
    • 2020-04-05
    • 2023-03-25
    • 1970-01-01
    • 2020-02-18
    • 2011-01-22
    • 2021-10-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-15
    相关资源
    最近更新 更多