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

Posted

技术标签:

【中文标题】WooCommerce:结账时预先选择并限制在一个州和城市【英文标题】:WooCommerce: Pre-select and restrict to one state and city on checkout 【发布时间】: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 过滤器不是很熟悉,所以我需要帮助来实现这一点。

【问题讨论】:

【参考方案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 提供的精彩绝伦的解决方案

以上是关于WooCommerce:结账时预先选择并限制在一个州和城市的主要内容,如果未能解决你的问题,请参考以下文章

php 结账时默认检查WooCommerce条款和条件

Woocommerce,当用户在结帐时选择一个选项时添加费用

php 如果在结账时使用优惠券,请删除WooCommerce中的免费送货服务

Woocommerce 中特定支付网关的结帐附加字段

将用户发送到预先填写的亚马逊购物车结账处

结帐页面上的 Woocommerce 更改结帐总数