Как сделать бесплатную доставку для всех товаров в корзине, если она будет хотя бы у одного из товаров?

Чтобы реализовать функциональность бесплатной доставки для всех товаров в корзине, если она применима к хотя бы одному из товаров, необходимо использовать фильтры и хуки в WordPress.

Перед тем, как приступить к изменениям, рекомендуется создать резервную копию вашей темы или использовать дочернюю тему, чтобы не потерять изменения при обновлении.

Для начала, необходимо добавить фильтр к функции woocommerce_package_rates, чтобы изменить способы доставки в зависимости от наличия товара, для которого предусмотрена бесплатная доставка. Вставьте следующий код в файл functions.php вашей темы или в функциональность плагина:

function custom_free_shipping_if_available( $rates, $package ) {
    $found_free_shipping = false;
  
    // Проверяем наличие товара "free_shipping" в корзине
    foreach( WC()->cart->get_cart() as $cart_item ) {
        if ( $cart_item['data']->get_shipping_class() == 'free_shipping' ) {
            $found_free_shipping = true;
            break;
        }
    }
  
    // Если найден товар с бесплатной доставкой, изменяем способы доставки
    if ( $found_free_shipping ) {
        foreach ( $rates as $rate_id => $rate ) {
            if ( 'free_shipping' !== $rate->method_id ) {
                unset( $rates[ $rate_id ] );
            }
        }
    }
  
    return $rates;
}
add_filter( 'woocommerce_package_rates', 'custom_free_shipping_if_available', 10, 2 );

Следующим шагом необходимо настроить товар со специальной меткой или свойством, чтобы определить, что он имеет бесплатную доставку. Для этого необходимо выполнить следующие действия:

1. Зайдите в админ-панель WordPress и перейдите на страницу редактирования товара, который должен иметь бесплатную доставку.
2. В поле "Товар" или "Перейти к Товару" найдите поле "Класс доставки".
3. Введите значение "free_shipping" или любое другое значение, которое будет указывать, что доставка для этого товара бесплатна.

После сохранения ваших изменений все товары в корзине с меткой "free_shipping" будут иметь доступ только к бесплатной доставке, а другие способы доставки будут удалены из корзины при оформлении заказа.

Надеюсь, эта подробная инструкция помогла вам реализовать функциональность бесплатной доставки для всех товаров в корзине, если она предусмотрена хотя бы для одного из товаров, на вашем сайте WordPress.