Как перенести ввод купона под заказ на странице оформления заказа в Woocommerce?

На странице оформления заказа в woocommerce я хочу переместить поле, в котором используется вводный купон, и разместить его сразу под сводкой заказа и над вариантами оплаты. Я не уверен, как изменить php, потому что страница оформления заказа состоит из нескольких файлов php, поэтому я прихожу к вам, гениальные люди, чтобы помочь. Кто-нибудь знает, как мне этого добиться? Заранее спасибо! PS я добавил картинки; первая из верхней части страницы, а вторая из второй половины страницы.

9 ответов

Если вам удобно редактировать файл functions.php в каталоге вашей темы, то вы можете добавить следующие строки кода:

remove_action( 'woocommerce_before_checkout_form', 'woocommerce_checkout_coupon_form', 10 );
add_action( 'woocommerce_after_checkout_form', 'woocommerce_checkout_coupon_form' );

Это по существу удалит купон (который подключен перед формой оформления заказа) и повторно добавит его ПОСЛЕ формы оформления заказа.

Кроме того, вы можете использовать Javascript для "вырезания и вставки" html-блока, содержащего поля купона, но это грязный способ кодирования, и я бы не советовал идти по этому пути.

@noufalcep ваш ответ не ясен.

Наконец, после всего, я нашел рабочее решение. Я использую WooCommerce 3.2.5 и WordPress версии 4.8.3.

Как сказал @noufalcep, форма внутри формы не является проблемой. Когда мы делаем

add_action ('woocommerce_checkout_after_order_review', 'woocommerce_checkout_coupon_form');

Купонный контейнер не оборачивается элементом формы. Но кнопка имеет тип ввода. Вот почему, когда мы применяем основную форму купона, получаю пособие.

Поэтому то, что я сделал, это вставил форму купона с jquery insertAfter. Ниже приведен код. Это прекрасно работает.

 var coupon = $(".checkout_coupon");
 $(coupon).insertAfter('.shop_table.woocommerce-checkout-review-order-table');

Затем это добавит форму после просмотра таблицы заказов. Если вы хотите добавить текст "Есть купон? Нажмите здесь, чтобы ввести код", вам нужно обернуть элемент формой.

Рабочий пример можно увидеть здесь, https://themovementfix.com/checkout/

Это отлично сработало для меня:

Добавьте этот jQuery:

(function($) {
    $(document).ready(function() { 
        var coupon2 = $(".checkout_coupon.woocommerce-form-coupon");
        coupon2.insertAfter('.shop_table.woocommerce-checkout-review-order-table');
    })
})
(jQuery);

Добавьте эту CSS:

/*unhide copuon code checkout*/
.checkout_coupon {
 display: block !important;
}
/*hide message have a coupon?*/
.woocommerce-info {
display:none;
}
/*coupon code checkout style*/
.checkout_coupon button.button{
background-color: #insert button color here;
}

Вот как я помещаю форму купона после суммы счета. Так что было бы полезнее использовать при настройке. Просто поместите этот код в свой functions.php и посмотрите настройки на интерфейсе.

          /*
     * Removing default "Coupon form" from the top of the checkout page
     */
    remove_action( 'woocommerce_before_checkout_form', 'woocommerce_checkout_coupon_form', 10 );

    /*
     * Hooking "Coupon form" after order total in checkout page with custom function
     */
    add_action( 'woocommerce_review_order_after_order_total', 'woocommerce_checkout_coupon_form_custom' );

    /*
     * Rendering html for "Coupon form" with custom function
     */
    function woocommerce_checkout_coupon_form_custom() {
        echo '<tr class="coupon-form"><td colspan="2">';
        wc_get_template(
            'checkout/form-coupon.php',
            array(
                'checkout' => WC()->checkout(),
            )
        );
        echo '</td></tr>';
    }

После прочтения формы в рамках проблемы с формой, которая мешает нормальной работе add_actions, я вдохновил меня на создание файла form-checkout.php в папке woocommerce моей темы и просто переместил начало проверки заказа. < form ... > код сразу после do_action( ‘woocommerce_checkout_before_customer_details’ ); затем с помощью этих двух строк переместите форму купона вниз под экран просмотра отзыва "Ваш заказ", и он отлично работал в версии 3.0 в WooCommerce:

remove_action( ‘woocommerce_before_checkout_form’, ‘woocommerce_checkout_coupon_form’, 10 );

add_action( ‘woocommerce_checkout_after_order_review’, ‘woocommerce_checkout_coupon_form’ );

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

Начиная с версии 2.6 (или, может быть, даже раньше) размещение "после проверки заказа" больше не работает. Если вы примените купон, он автоматически разместит заказ. Это вызвано формой в форме проблемы.

В Woocommerce 2.6, используя только хуки, в настоящее время работают только эти 2 варианта:

Опция 1:

add_action('woocommerce_before_checkout_form', 'woocommerce_checkout_coupon_form');

вариант 2:

add_action('woocommerce_after_checkout_form', 'woocommerce_checkout_coupon_form');

Проблема в том, что вся страница оформления заказа находится внутри формы, а купон также является формой. И вы не можете вложить две формы. Таким образом, даже если вы технически можете переместить форму купона над разделом заказа, он не будет работать должным образом. Вам нужно изменить свою форму и разделить их на две части, чтобы она работала.

Небольшое изменение предложенного ответа:

remove_action('woocommerce_before_checkout_form', 'woocommerce_checkout_coupon_form', 10);
add_action('woocommerce_review_order_before_payment', 'woocommerce_checkout_coupon_form');

Это позволяет разместить купон ниже заказа и выше вариантов оплаты.

Перемещение поля купона WooCommerce на странице оформления заказа
Использование процесса: вы можете использовать код, используя любой плагин, например (фрагменты кода) или функцию.PHP

      remove_action( 'woocommerce_before_checkout_form', 'woocommerce_checkout_coupon_form', 10 );
add_action( 'woocommerce_review_order_after_cart_contents', 'woocommerce_checkout_coupon_form_custom' );
function woocommerce_checkout_coupon_form_custom() {
    echo '<tr class="coupon-form"><td colspan="2">';
    
    wc_get_template(
        'checkout/form-coupon.php',
        array(
            'checkout' => WC()->checkout(),
        )
    );
    echo '</tr></td>';
}
Другие вопросы по тегам