我正在使用最新版本的 WordPress 和 WooCommerce。
我知道这在上下文中可能看起来很奇怪,但我想在我的functions.php 中添加一个钩子,在下订单后按ID 从订单中删除某个产品。
到目前为止,这是我正在使用的内容:
add_action('woocommerce_new_order', 'custom_process_order', 10, 1);
function custom_process_order($order_id) {
$order = new WC_Order( $order_id );
$items = $order->get_items();
foreach ($items as $item) {
if ($item->get_id()==10766) {
$order->remove_item( $item->get_id() );
}
}
return $order_id;
}
如果该产品是订单的一部分,我正在尝试从订单中删除 ID 为 10766 的产品。我从这里的另一篇较旧的帖子中获取了这个,因此代码本身可能并不完美。它肯定是行不通的。
一些实验后更新:
在 Cameron Hurd 的帮助下,我尝试了以下代码:
add_action('woocommerce_new_order', 'custom_process_order', 10, 1);
function custom_process_order($order_id) {
$order = new WC_Order( $order_id );
$items = $order->get_items();
foreach ($items as $item) {
if ($item->get_id() === 10766) {
$order->remove_item( $item->get_id() );
}
}
$order->save_items();
return $order_id;
}
这看起来很有希望,但是按下结帐按钮将提交一个空订单,同时还会抛出一个空的 WooCommerce 错误消息,让用户留在结帐页面上。
在此之后,我有 2 个想法:
1.)更改remove_item为wc_delete_order_item. 我真的不知道有什么区别,改变它似乎也没有什么不同。
2.) 更改钩子,使其在订单位于后端之后发生。我尝试将其从 更改woocommerce_new_order为woocommerce_thankyou. 然而,这打破了感谢页面,除了对订单没有做任何事情。
这就是我现在坐的:
add_action('woocommerce_checkout_create_order', 'custom_process_order', 10, 1);
function custom_process_order($order_id) {
$order = new WC_Order( $order_id );
$items = $order->get_items();
foreach ($items as $item) {
$current_item_id = $item->get_id();
if ( $current_item_id === 10766) {
$order->remove_item($current_item_id);
}
}
$order->save_items();
return $order_id;
}
仍在寻找有效的答案。
森栏
哔哔one