Мне нужно ограничить штат доставки woocommerce одним (один штат в Индии), не меняя штат в адресе выставления счета. Я попытался использовать хук woocommerce_states, но это заменит состояние как в адресе доставки, так и в адресе выставления счета.
Я искал решение в течение прошлой недели, но не смог найти правильного.
сначала установите место доставки на странице настроек доставки 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
};
Обзор ниже экрана
Код обновлен:
Сначала вам нужно сделать некоторые настройки для вашего магазина (где выбранным государством магазина будет штат доставки), и единственной доступной страной доставки будет Индия:
Следующий код установит состояние местоположения магазина как уникальное доступное состояние доставки и сделает раскрывающийся список доступным только для чтения (неактивным) в разделе «Оформление заказа» и «Моя учетная запись»> «Изменить страницы адреса»:
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 вашей активной дочерней темы (или активной темы). Проверено и работает.
Только одно состояние доставки доступно только для оформления заказа и адрес для редактирования моего аккаунта (состояние магазина):
Там не будет никаких проблем с проверкой страны, так как Индия предварительно выбрана в качестве единственной страны доставки.