Удалить кнопку Woocommerce «разместить заказ» для определенного класса доставки - PullRequest
0 голосов
/ 15 мая 2018

У меня есть сценарий, в котором мне нужно убрать кнопку «Разместить заказ» на экране оформления заказа для Woo-commerce.

В настоящее время у меня есть 2 способа доставки: Гибкая доставка и Фрахт

Если клиент добавляет товар с классом доставки «Фрахт» в свою корзину, мой текущий код отключает гибкий метод доставки, а затем метод фрахта отображает сообщение «Позвонить по текущим тарифам».

Проблемав том, что они все еще могут оформить заказ, не платя ничего за доставку, поэтому, если перевозка является единственным доступным способом доставки, мне нужно удалить или заменить кнопку заказа на место.

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

add_filter( 'woocommerce_package_rates', 'wc_hide_free_shipping_for_shipping_class', 10, 2 );

function wc_hide_free_shipping_for_shipping_class( $rates, $package ) {
    $shipping_class_target = 332; 
    $in_cart = false;

    foreach( WC()->cart->cart_contents as $key => $values ) {
        if( $values[ 'data' ]->get_shipping_class_id() == $shipping_class_target ) {
$in_cart = true;
break;
        } 
    }
    if( $in_cart ) {
        unset( $rates['flexible_shipping_7_2'] );
    }
    return $rates;
}

Есть простой хук или я что-то упустил?

Я какое-то время возился с этим и бью стену.

1 Ответ

0 голосов
/ 15 мая 2018

Попробуйте выполнить следующее, при этом будет выведена неактивная кнопка заказа «Оформить заказ» серого цвета, если в товарах корзины найден определенный класс доставки:

add_filter('woocommerce_order_button_html', 'inactive_order_button_html' );
function inactive_order_button_html( $button ) {
    // HERE define your targeted shipping class
    $targeted_shipping_class = 332;
    $found = false;

    // Loop through cart items
    foreach( WC()->cart->get_cart() as $cart_item ) {
        if( $cart_item['data']->get_shipping_class_id() == $targeted_shipping_class ) {
            $found = true; // The targeted shipping class is found
            break; // We stop the loop
        }
    }

    // If found we replace the button by an inactive greyed one
    if( $found ) {
        $style = 'style="background:Silver !important; color:white !important; cursor: not-allowed !important;"';
        $button_text = apply_filters( 'woocommerce_order_button_text', __( 'Place order', 'woocommerce' ) );
        $button = '<a class="button" '.$style.'>' . $button_text . '</a>';
    }
    return $button;
}

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

enter image description here


Чтобы полностью удалить кнопку «Оформить заказ», вы будете использовать вместо этого следующее:

add_filter('woocommerce_order_button_html', 'remove_order_button_html' );
function remove_order_button_html( $button ) {
    // HERE define your targeted shipping class
    $targeted_shipping_class = 332;
    $found = false;

    // Loop through cart items
    foreach( WC()->cart->get_cart() as $cart_item ) {
        if( $cart_item['data']->get_shipping_class_id() == $targeted_shipping_class ) {
            $found = true; // The targeted shipping class is found
            break; // We stop the loop
        }
    }

    // If found we remove the button
    if( $found )
        $button = '';

    return $button;
}

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

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