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, поэтому мне нужна помощь для достижения этой цели.

4

Решение

Так как 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 установить местоположение таким образом:

введите описание изображения здесь

Тогда вы получите что-то вроде этого на кассе:

введите описание изображения здесь

Оба выпадающих списка имеют только одно значение … Таким образом, вы получаете то, что ожидаете.

6

Другие решения

Других решений пока нет …