Ограничьте состояние доставки одним предварительно выбранным значением в Woocommerce 3

Мне нужно ограничить штат доставки woocommerce одним (один штат в Индии), не меняя штат в адресе выставления счета. Я попытался использовать хук woocommerce_states, но это заменит состояние как в адресе доставки, так и в адресе выставления счета.

Я искал решение в течение прошлой недели, но не смог найти правильного.

0

Решение

сначала установите место доставки на странице настроек доставки woo commerce. Я поставил «Индию»

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

Затем вставьте приведенный ниже код в файл вашей активной темы functions.php.
Я установил доставку только штат только «Тамилнаду».

add_action('wp_footer', 'checkout_shipping_states');
function checkout_shipping_states() {
if(!is_checkout()) {
return;
}
?>
<script type="text/javascript">
jQuery(document).ready(function($) {
$(document.body).on('country_to_state_changed', function(event, args) {
function set_shipping_states(states) {
var $shipping_state = $('#shipping_state');
$shipping_state.find('option:not([value=""])').remove();

for(state in states) {
$shipping_state.append('<option id="' + state + ' value="' + state + '">' + states[state] + '</option>');
}
}

var $shipping_country = $('#shipping_country');

var new_shipping_states = {};
switch($shipping_country.val()) {
case 'IN':
new_shipping_states = {
'TN': 'Tamil Nadu'
}
break;
}

if(!$.isEmptyObject(new_shipping_states)) {
set_shipping_states(new_shipping_states);
}
});
});
</script>
<?php
};

Обзор ниже экрана

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

3

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

Код обновлен:

Сначала вам нужно сделать некоторые настройки для вашего магазина (где выбранным государством магазина будет штат доставки), и единственной доступной страной доставки будет Индия:

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

Следующий код установит состояние местоположения магазина как уникальное доступное состояние доставки и сделает раскрывающийся список доступным только для чтения (неактивным) в разделе «Оформление заказа» и «Моя учетная запись»> «Изменить страницы адреса»:

add_filter('woocommerce_shipping_fields', 'shipping_state_preselected_read_only', 900, 1 );
function shipping_state_preselected_read_only($fields) {
// Get shop location country and state
$shop_country_code = WC()->countries->get_base_country();
$shop_state_code   = WC()->countries->get_base_state();
$shop_state_name   = WC()->countries->get_allowed_country_states()[$shop_country_code][$shop_state_code];

// Set customer shipping country and state to shop location
WC()->customer->set_shipping_country($shop_country_code);
WC()->customer->set_shipping_state($shop_state_code);

// Set shipping country field to shop location
$fields['shipping_state']['option']  = array( $shop_state_code => $shop_state_name );
$fields['shipping_state']['default'] = $shop_state_code;
$fields['shipping_state']['value']   = $shop_state_code;

// Make the field read only
$fields['shipping_state']['custom_attributes'] = array('disabled' => 'disabled');

return $fields;
}

Код помещается в файл function.php вашей активной дочерней темы (или активной темы). Проверено и работает.


Только одно состояние доставки доступно только для оформления заказа и адрес для редактирования моего аккаунта (состояние магазина):

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

Там не будет никаких проблем с проверкой страны, так как Индия предварительно выбрана в качестве единственной страны доставки.

3

По вопросам рекламы [email protected]