Скрыть информацию о скидках без отмены купона в 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,'.','')."€"; ?></td>
но сейчас я пытаюсь получить промежуточный итог заказа, и этот код
<td><?php echo number_format($order->get_item_subtotal(),2,'.','')."€"; ?></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' );