Скрыть информацию о скидках без отмены купона в woocommerce

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

Я хотел бы скрыть всю информацию об этих купонах / скидках от посетителей.

Проблема: единственный метод, который я нашел (см. Ниже), скрывает поле купона, строку (от итогов) и сообщения, но также отключает купон...

add_filter( 'woocommerce_coupons_enabled', 'hide_coupon_field' );
function hide_coupon_field( $enabled ) {
    if ( is_cart() || is_checkout() ) {
        $enabled = false;
    }
    return $enabled;
}

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


РЕДАКТИРОВАТЬ: Похоже, невозможно просто удалить строку скидки в деталях заказа. Таким образом, простое решение, вдохновленное предложением helgatheviking, может состоять в том, чтобы удалить все итоги, сгенерированные этой частью

<?php if ( $totals = $order->get_order_item_totals() ) foreach ( $totals as $total ) : ?>
            <tr>
                <th scope="row"><?php echo $total['label']; ?></th>
                <td><?php echo $total['value']; ?></td>
            </tr>
    <?php endforeach; ?>

А потом повторять их по очереди так, как мне это нужно. Я уже могу показать сумму заказа с этим

<td><?php echo number_format($order->get_total(),2,'.','')."&#8364;"; ?></td>

но сейчас я пытаюсь получить промежуточный итог заказа, и этот код

<td><?php echo number_format($order->get_item_subtotal(),2,'.','')."&#8364;"; ?></td>

выдает мне предупреждение: отсутствует аргумент 1 для WC_Order::get_item_subtotal().

Я не уверен, если get_item_subtotal() это правильный способ получить промежуточный итог заказа. И если да, то какой аргумент отсутствует? Или я должен искать вокруг get_line_subtotal или же get_subtotal_to_display?

1 ответ

Решение

Нет, похоже, что нет фильтра в get_coupons() метод класса корзины. Если вы пошли в git-репозиторий WooCommerce и отправили запрос на извлечение с фильтром здесь и объяснением того, почему он должен быть там, они могли бы рассмотреть возможность слияния. Я делал это несколько раз.

Вы также можете скопировать checkout/review-order.php а также cart/cart-totals.php шаблоны в вашу тему и удалите следующие два блока кода:

<?php foreach ( WC()->cart->get_coupons( 'cart' ) as $code => $coupon ) : ?>
                <tr class="cart-discount coupon-<?php echo esc_attr( $code ); ?>">
                    <th><?php wc_cart_totals_coupon_label( $coupon ); ?></th>
                    <td><?php wc_cart_totals_coupon_html( $coupon ); ?></td>
                </tr>
            <?php endforeach; ?>

а также

<?php foreach ( WC()->cart->get_coupons( 'order' ) as $code => $coupon ) : ?>
    <tr class="order-discount coupon-<?php echo esc_attr( $code ); ?>">
        <th><?php wc_cart_totals_coupon_label( $coupon ); ?></th>
        <td><?php wc_cart_totals_coupon_html( $coupon ); ?></td>
    </tr>
<?php endforeach; ?>

Имейте в виду, что это предотвращает отображение ВСЕХ купонных скидок и в конечном итоге будет выглядеть следующим образом:

Скрыть купоны в корзинеСкрыть купоны в кассе

Я не фанат переопределения более сложных шаблонов WC... особенно не тех, которые относятся к процессу оформления заказа. Мне приходилось исправлять многие сайты, которые перестали работать, когда переопределения шаблонов тем устарели по мере развития WooCommerce.

редактировать

Я отследил строку "Скидка" в order/order-details.php шаблон. Это из функции $order->get_order_item_totals()... это возвращает массив строк и может быть отфильтровано. Таким образом, это удаляет строку со страницы заказа:

function so_25714509_get_order_item_totals( $total_rows ){
    unset( $total_rows['order_discount'] );
    return $total_rows;
}
add_filter( 'woocommerce_get_order_item_totals', 'so_25714509_get_order_item_totals' );
Другие вопросы по тегам