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

时间:2014-09-07 20:33:33

标签: wordpress wordpress-plugin 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>

给我一​​个警告:WC_Order :: get_item_subtotal()缺少参数1。

我不确定get_item_subtotal()是否是获取订单小计的正确方法。如果是这样,缺少什么参数?或者我应该搜索get_line_subtotalget_subtotal_to_display

1 个答案:

答案 0 :(得分:1)

不,似乎没有因为购物车类的get_coupons()方法中没有过滤器。如果你去了WooCommerce git repo并在这里发送了带过滤器的拉取请求并解释了为什么它应该在那里,他们可能会考虑合并它。我已经做了几次。

您也可以将checkout/review-order.phpcart/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; ?>

请注意,这会阻止显示所有优惠券折扣,最终会显示如下屏幕截图:

Hide coupons in Cart Hide coupons in Checkout

我不喜欢覆盖更复杂的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' );