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

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

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

Ответы [ 2 ]

0 голосов
/ 29 сентября 2018

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

Обзор ниже экрана.enter image description here

Затем вставьте приведенный ниже код в файл вашей активной темы 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
};

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

enter image description here

0 голосов
/ 29 сентября 2018

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

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

enter image description here

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

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 вашей активной дочерней темы (или активной темы).Протестировано и работает.


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

enter image description here

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...