Woocommerce 是否从其中一个项目id获取订单id?

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份订

我尝试从其中一个行项目id获取相关订单(订单id)

例如,一个案例: 在编辑订单和删除行项目(由Ajax完成)时,Woocommerce只提供钩子
“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)

但是我希望有一个类似的电话,或者我需要进行DB
SQL
搜索吗?任何涉及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测试提供了解决方案,似乎效果良好。