提问者:小点点

隐藏折扣信息,而不取消WooCommerce中的优惠券


我用优惠券在购物车里计算。它会自动将折扣添加到总额中,以便将正确的金额发送到支付网关。

我想对访问者隐藏有关此优惠券/折扣的所有信息。

问题:我发现的唯一方法(见下文)隐藏优惠券字段、行(总计)和消息,但也禁用优惠券。。。

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,'.','')."&#8364;"; ?></td>

但现在我试图检索订单小计,这段代码

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


共1个答案

匿名用户

不,似乎没有,因为在购物车类的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' );