@html_student
Молодой и глупый.

Минимальная сумма заказа для каждого способа доставки woocomerce?

Голову ломаю уже не один день, не могу найти решение чтоб от способа доставки ставилась минимальная сумма заказа.
Плагинов готовых не нашел.
Доставка у меня на странице checkout

// Функция для вывода минимальной суммы заказа на странице checkout
function display_min_order_amount_notice() {
  // Получите текущий метод доставки
  $chosen_shipping_method = WC()->session->get( 'chosen_shipping_methods' );
  $chosen_shipping_method = $chosen_shipping_method[0];

  // Получите минимальную сумму заказа для выбранного метода доставки
  $min_order_amount = get_min_order_amount_for_shipping_method( $chosen_shipping_method );

  if ( ! empty( $min_order_amount ) ) {
      // Получите текущую сумму заказа
      $order_total = WC()->cart->subtotal;

      // Если сумма заказа меньше минимальной, выведите уведомление и предотвратите оформление заказа
      if ( $order_total < $min_order_amount ) {
          wc_add_notice( sprintf( 'Минимальная сумма заказа для выбранного метода доставки: %s', wc_price( $min_order_amount ) ), 'error' );
          remove_action( 'woocommerce_checkout_order_review', 'woocommerce_order_review', 10 );
      }
  }
}

add_action( 'woocommerce_before_checkout_form', 'display_min_order_amount_notice' );

// Функция для получения минимальной суммы заказа для метода доставки
function get_min_order_amount_for_shipping_method( $chosen_shipping_method ) {
  // Создайте массив с минимальными суммами заказа для каждого метода доставки
  $min_order_amounts = array(
      'flat_rate:7' => 10000, 
      'flat_rate:8' => 10000, 
      'flat_rate:9' => 5000, 
      'flat_rate:10' => 1000, 
  );

  // Проверьте, есть ли минимальная сумма заказа для выбранного метода доставки
  if ( isset( $min_order_amounts[ $chosen_shipping_method ] ) ) {
      return $min_order_amounts[ $chosen_shipping_method ];
  }

  return 0; // Если нет соответствия методу доставки, верните 0
}


Но в итоге если зайти на страницу checkout то если доставка выбрана из массива то напишет нотис, а если переключить доставку то нотис просто исчезает и всё. Ну и заказ можно оформить всё равно.
  • Вопрос задан
  • 82 просмотра
Решения вопроса 1
@html_student Автор вопроса
Молодой и глупый.
add_action('wp_footer', 'woo_disable_specific_shipping_input');

function woo_disable_specific_shipping_input() {
    // Если сумма всех товаров в корзине меньше 1300
    if ( WC()->cart->total < 1300 ) {
      ?>
      <script type="text/javascript">
          jQuery(document).ready(function($) {
              // Выбираем элементы input с определенными значениями атрибута value
              $('input[name^="shipping_method"][value="flat_rate:6"], input[name^="shipping_method"][value="flat_rate:7"], input[name^="shipping_method"][value="flat_rate:8"], input[name^="shipping_method"][value="flat_rate:9"], input[name^="shipping_method"][value="flat_rate:10"], input[name^="shipping_method"][value="flat_rate:11"], input[name^="shipping_method"][value="flat_rate:12"], input[name^="shipping_method"][value="flat_rate:13"], input[name^="shipping_method"][value="flat_rate:14"]').prop('disabled', true);
          });
      </script>
      <?php
  }
}


В общем сделал так, для моих задач, более чем, отключаем кнопки у выбранных если цена меньше.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы