Удалите кнопку «Разместить заказ» для определенного способа доставки, кроме конечной точки Order-Pay.

Я хотел бы удалить кнопку «Разместить заказ», когда выбран конкретный способ доставки, используя код превосходного LoicTheAztec Отключить кнопку« Разместить заказ »для определенного метода доставки в WooCommerce, но исключая конечную точку оплаты заказа.

Я попробовал следующее решение, но оно не работает, кнопка «Разместить заказ» также исчезает в конечной точке «заказ-оплата».

add_filter('woocommerce_order_button_html', 'disable_place_order_button_html' );
function disable_place_order_button_html( $button ) {
    if ( is_checkout() && ! is_wc_endpoint_url( 'order-pay' ) ) {  
        // HERE define your targeted shipping method id
        $targeted_shipping_method = "table_rate:3";
    
        // Get the chosen shipping method (if it exist)
        $chosen_shipping_methods = WC()->session->get('chosen_shipping_methods');
        
        // If the targeted shipping method is selected, we disable the button
        if( in_array( $targeted_shipping_method, $chosen_shipping_methods ) ) {
            $style  = 'style="background:Silver !important; color:white !important; cursor: not-allowed !important; text-align:center;"';
            $text   = apply_filters( 'woocommerce_order_button_text', __( 'Place order', 'woocommerce' ) );
            $button = '<a class="button" '.$style.'>' . $text . '</a>';
        }
    }
    return $button;
}

Любая помощь приветствуется.


person fabiocs81    schedule 25.03.2021    source источник


Ответы (1)


Я протестировал ваш код, и он у меня работает. Проблема не связана с этим кодом.

Перехватчик кнопки Оплатить заказ: woocommerce_pay_order_button_html, а не woocommerce_order_button_html. Вы найдете это в шаблоне: /woocommerce/checkout/form-pay.php

Вы можете удалить проверку ! is_wc_endpoint_url( 'order-pay' ), потому что она никогда не будет запускаться на этой странице.

Вы можете проверить несколько вещей:

  • Пользователь, который получает доступ к этой странице, вошел в систему?
  • Проверьте файл functions.php вашей активной темы, есть ли какие-либо другие функции, использующие ловушку woocommerce_pay_order_button_html.
  • Вы установили какие-либо плагины, которые управляют / редактируют эту страницу (кроме WooCommerce)?
  • Наконец, убедитесь, что нет правила CSS, скрывающего элемент.
person Vincenzo Di Gaetano    schedule 25.03.2021
comment
Это была концептуальная ошибка, я не заметил другого крючка размещения заказа в конечной точке Order-pay. Поэтому я просто заменил woocommerce_order_button_html на ywraq_quote_button_checkout_html (крючок плагина Yith Woocommerce Request a Quote для кнопки запроса расценки при оформлении заказа), который мне должен появляться и исчезать в зависимости от способа доставки. Огромное спасибо - person fabiocs81; 26.03.2021
comment
Странно было то, что хук woocommerce_order_button_html удалил порядок размещения также в конечной точке заказа-оплаты, вероятно, из-за несовместимости темы или jquery (я пробовал с темой по умолчанию, и она работает) - person fabiocs81; 26.03.2021