2017-08-01 69 views
1

我正在设立一家只向一个城市销售的商店。我试图弄清楚如何将城市选项限制在预填充字段。WooCommerce:在结帐时预先选择并限制为一个州和城市

我已经限制了国家,使用下面的代码在我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过滤器不太了解,所以我需要帮助来实现这一点。

回答

2

由于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文件或也以任何插件文件。

此代码测试,适用于3+

一旦加入上面的代码并保存wooCommerce版本,则需要在WooCommerce > Settings > General设置的位置是这样的:

enter image description here

那么你会得到这样的结帐:

enter image description here

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

相关问题