首页 文章

WooCommerce:在结账时预先选择并限制到一个州和城市

提问于
浏览
4

我正在 Build 一家只卖给一个城市的商店 . 我试图找出如何将城市选项限制为预先填充的字段 .

我已经限制了国家/地区并在我的_136682中使用了以下代码:

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过滤器不太熟悉,所以我需要帮助才能实现这一目标 .

1 回答

  • 5

    由于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 country 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>设置>常规中以这种方式设置位置:

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

    两个下拉列表只有一个值...所以你得到了你所期望的 .

相关问题