用于从WooCommerce中的订单中删除项目的按钮

时间:2017-10-31 12:39:53

标签: php wordpress woocommerce hook-woocommerce orders

我正在寻找一种方法,在每个项目旁边添加一个按钮,将其从订单中删除。

模板为:woocommerce/order/order-details-item.php

我找到了一个要使用的功能,即:wc_delete_order_item()

如果我在循环中添加它,它会删除所有项目。

但是,如何通过单击按钮来运行该功能?我尝试过使用ajax,但在外部文件中wc_delete_order_item()会出现 “Undefined function”

请帮忙。

1 个答案:

答案 0 :(得分:0)

首先(只是为了解决问题)模板order-details-item.php用于:

  • 订单收到页面(Thankyou)
  • 我的帐户查看订单页

现在要使用wc_delete_order_item(),您需要将项目ID作为参数。

您可以使用隐藏在 woocommerce_order_item_meta_end 操作挂钩中的自定义功能来显示功能按钮以删除订单商品,而不是覆盖模板,但它会删除订单商品需要第二次刷新。

视觉上你会得到:

enter image description here

以下是部分代码:

add_action( 'woocommerce_order_item_meta_end', 'display_remove_order_item_button', 10, 3 );
function display_remove_order_item_button( $item_id, $item, $order ){
    // Avoiding displaying buttons on email notification
    if( ! ( is_wc_endpoint_url( 'view-order' ) || is_wc_endpoint_url( 'order-received' ) ) ) return;

    if( isset($_POST["remove_item_$item_id"]) && $_POST["remove_item_$item_id"] == 'Remove this item' ){
        wc_delete_order_item( $item_id );
    }

    echo '<form class="cart" method="post" enctype="multipart/form-data" style= "margin-top:12px;">
    <input type="submit" class="button" name="remove_item_'.$item_id.'" value="Remove this item" />
    </form>';
}

代码放在活动子主题(或主题)的function.php文件中,或者放在任何插件文件中。

它将删除订单商品。

此外,您还需要使用WC_Abstract_Order方法calculate_totals()来刷新/计算新的订单总数:

$order->calculate_totals();
  

但是,最好和功能最强大的方式应该使用Ajax ,这更加复杂,并且是一个真正的开发。

     

要在这里正确使用Ajax,你需要添加一个带有Item ID的隐藏字段,用ajax获取它并将它交给你的PHP函数(缺少的参数,使 wc_delete_order_item() < / strong>工作正常,没有任何错误)以及订单ID ...

现在下一次,如果你尝试Ajax方式,你应该问一个新问题,在其中添加你自己的代码,解释什么是有效的,什么不是......