我正在寻找一种方法,在每个项目旁边添加一个按钮,将其从订单中删除。
模板为:woocommerce/order/order-details-item.php
我找到了一个要使用的功能,即:wc_delete_order_item()
如果我在循环中添加它,它会删除所有项目。
但是,如何通过单击按钮来运行该功能?我尝试过使用ajax,但在外部文件中wc_delete_order_item()
会出现 “Undefined function” 。
请帮忙。
答案 0 :(得分:0)
首先(只是为了解决问题)模板order-details-item.php
用于:
现在要使用wc_delete_order_item()
,您需要将项目ID作为参数。
您可以使用隐藏在 woocommerce_order_item_meta_end
操作挂钩中的自定义功能来显示功能按钮以删除订单商品,而不是覆盖模板,但它会删除订单商品需要第二次刷新。
视觉上你会得到:
以下是部分代码:
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方式,你应该问一个新问题,在其中添加你自己的代码,解释什么是有效的,什么不是......