我用优惠券在购物车里计算。它会自动将折扣添加到总额中,以便将正确的金额发送到支付网关。
我想对访问者隐藏有关此优惠券/折扣的所有信息。
问题:我发现的唯一方法(见下文)隐藏优惠券字段、行(总计)和消息,但也禁用优惠券。。。
add_filter( 'woocommerce_coupons_enabled', 'hide_coupon_field' );
function hide_coupon_field( $enabled ) {
if ( is_cart() || is_checkout() ) {
$enabled = false;
}
return $enabled;
}
是否有一个钩子可以隐藏与折扣相关的一切而不取消优惠券?
编辑:看起来不可能简单地删除订单详细信息中的折扣行。因此,一个简单的解决方案,受到海尔加特维京建议的启发,可能是删除这部分产生的所有总数
<?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>
给我一个警告:WC\u Order::get\u item\u subtotal()缺少参数1。
我不确定get\u item\u subtotal()
是否是获取订单小计的正确方法。如果是,缺少什么论据?或者我应该搜索get\u line\u subtotal
还是get\u subtotal\u to\u display
?
不,似乎没有,因为在购物车类的get_coupons()
方法中没有过滤器。如果你去WooCommerce git仓库,发送一个带有过滤器的拉取请求,并解释为什么它应该在那里,他们可能会考虑合并它。我已经做过几次了。
您还可以将签出/review-order.php
和购物车/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-details.php
模板中的折扣行。它来自函数$order-
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' );