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_country
和 default_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:结账时预先选择并限制在一个州和城市的主要内容,如果未能解决你的问题,请参考以下文章
Woocommerce,当用户在结帐时选择一个选项时添加费用