Я открываю магазин, который продается только в одном городе. Я пытаюсь выяснить, как я могу ограничить выбор города предварительно заполненным полем.
Я уже ограничил страну и использую следующий код в моем 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, поэтому мне нужна помощь для достижения этой цели.
Так как 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 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 > Settings > General
установить местоположение таким образом:
Тогда вы получите что-то вроде этого на кассе:
Оба выпадающих списка имеют только одно значение … Таким образом, вы получаете то, что ожидаете.
Других решений пока нет …