Woocommerce 是否从其中一个项目id获取订单id?
我尝试从其中一个行项目id获取相关订单(订单id) 例如,一个案例: 在编辑订单和删除行项目(由Ajax完成)时,Woocommerce只提供钩子Woocommerce 是否从其中一个项目id获取订单id?,woocommerce,edit,orders,items,Woocommerce,Edit,Orders,Items,我尝试从其中一个行项目id获取相关订单(订单id) 例如,一个案例: 在编辑订单和删除行项目(由Ajax完成)时,Woocommerce只提供钩子“Woocommerce\u before\u delete\u order\u item”,并仅传递$item\u id。(woo函数执行sql而不是WP环境)。我需要“归属”订单id来采取行动 到目前为止,我的解决方案是遍历所有订单并比较项目ID,在匹配发生时中断并返回订单ID 这是一种放慢速度或“笨重笨拙”的方法,在当前的商店里维持10000份订
“Woocommerce\u before\u delete\u order\u item”
,并仅传递$item\u id
。(woo函数执行sql而不是WP环境)。我需要“归属”订单id来采取行动
到目前为止,我的解决方案是遍历所有订单并比较项目ID,在匹配发生时中断并返回订单ID
这是一种放慢速度或“笨重笨拙”的方法,在当前的商店里维持10000份订单和更多订单
这不起作用:
wp\u get\u post\u parent\u id($item\u id)
但是我希望有一个类似的电话,或者我需要进行DBSQL
搜索吗?任何涉及mySQL的回答,请将其设置为“复制粘贴就绪”。我擅长PHP,但不处理或从不编写自己的SQL
谢谢你的帮助!以下是我目前的解决方案:
$order_id = my_wc_get_order_from_item_id($item_id);
function my_wc_get_order_from_item_id($id) {
$orders = get_posts('post_type=shop_order&numberposts=-1&post_status=publish');
foreach($orders as $obj) {
$order = new WC_Order($obj->ID);
if ( count( $order->get_items('line_item') ) > 0 ) {
foreach($order->get_items('line_item') as $item_id => $item ) {
if($item_id == $id) $return_value = $obj->ID;
if(isset($return_value)) break;
}
}
unset($order);
if(isset($return_value)) break;
}
if(isset($return_value)) return $return_value;
else return 0;
}
您的方法不起作用,因为订单项不是
wp\u posts
表中的post,因此它们不能有post\u父项
然而,一切都没有丢失,考虑到我的SQL没有那么强,这比我预期的要容易。查看数据库中的woocmerce\u order\u item
表,您可以看到order\u id
和order\u item\u id
都存在:
因此,我从WooCommerce借用了一个小SQL语句,并对其进行了修改,以查找给定特定order\u item\u id
行的order\u id
。让我知道这是怎么回事
function so_38286531_get_order_item_order_id( $item_id ) {
global $wpdb;
$order_id = $wpdb->get_var( $wpdb->prepare(
"SELECT order_id FROM {$wpdb->prefix}woocommerce_order_items
WHERE order_item_id = %d",
$item_id
) );
return $order_id;
}
非常好:谢谢!链接到什么?行号指向“line\u tax”
,这似乎与此问题/答案无关。显然,他们在WC API文档上的行号有问题。因为如果你看我的URL指向第1239行,但它显示第1277行……第1239行与你的代码非常相似,并且与get_items()函数相关,谢谢你的澄清。行号根本不匹配,但您是对的。get_items()
与OP描述的相反。@helgatheviking测试提供了解决方案,似乎效果良好。