Wordpress WooCommerce获取多订单/批量查询的订单物料数量
我在另一页上找到了这个代码Wordpress WooCommerce获取多订单/批量查询的订单物料数量,wordpress,woocommerce,Wordpress,Woocommerce,我在另一页上找到了这个代码 function jdr_get_orders_ids_from_product_id( $product_id, $orders_statuses = [ 'wc-completed' ] ) { global $wpdb; // Define HERE the orders status to include in <== <== <== <== <== <== <== $order
function jdr_get_orders_ids_from_product_id( $product_id, $orders_statuses = [ 'wc-completed' ] ) {
global $wpdb;
// Define HERE the orders status to include in <== <== <== <== <== <== <==
$orders_statuses = "'" . implode( "', '", $orders_statuses ) . "'";
# Get All defined statuses Orders IDs for a defined product ID (or variation ID)
return $wpdb->get_col( "
SELECT DISTINCT woi.order_id
FROM {$wpdb->prefix}woocommerce_order_itemmeta as woim,
{$wpdb->prefix}woocommerce_order_items as woi,
{$wpdb->prefix}posts as p
WHERE woi.order_item_id = woim.order_item_id
AND woi.order_id = p.ID
AND p.post_status IN ( $orders_statuses )
AND woim.meta_key IN ( '_product_id', '_variation_id' )
AND woim.meta_value LIKE '$product_id'
ORDER BY woi.order_item_id DESC"
);
}
但这需要循环遍历每个订单和每个项目,这需要很长时间才能加载到需要此功能的页面(100多个订单)
我想知道是否有类似于第一个函数的SQL解决方案
谢谢你的帮助 这就是解决方案:
function jdr_qty_sold_by_product_id( $product_id ) {
global $wpdb;
$data = jdr_get_orders_ids_and_item_ids_from_product_id( $product_id );
$order_item_ids = array_map(function ($obj) { return $obj->order_item_id; }, $data);
$order_item_ids = "'" . implode( "', '", $order_item_ids ) . "'";
return $wpdb->get_var( "
SELECT sum(meta_value)
FROM {$wpdb->prefix}woocommerce_order_itemmeta
WHERE order_item_id IN ( $order_item_ids )
AND meta_key = '_qty'"
);
}
在我编辑了其他函数以包含项_id之后:
function jdr_get_orders_ids_and_item_ids_from_product_id( $product_id, $orders_statuses = [ 'wc-completed' ] ) {
global $wpdb;
$orders_statuses = "'" . implode( "', '", $orders_statuses ) . "'";
return $wpdb->get_results( "
SELECT DISTINCT woi.order_id, woi.order_item_id
FROM {$wpdb->prefix}woocommerce_order_itemmeta as woim,
{$wpdb->prefix}woocommerce_order_items as woi,
{$wpdb->prefix}posts as p
WHERE woi.order_item_id = woim.order_item_id
AND woi.order_id = p.ID
AND p.post_status IN ( $orders_statuses )
AND woim.meta_key IN ( '_product_id', '_variation_id' )
AND woim.meta_value LIKE '$product_id'
ORDER BY woi.order_item_id DESC"
);
}
这最终成为解决方案:
function jdr_qty_sold_by_product_id( $product_id ) {
global $wpdb;
$data = jdr_get_orders_ids_and_item_ids_from_product_id( $product_id );
$order_item_ids = array_map(function ($obj) { return $obj->order_item_id; }, $data);
$order_item_ids = "'" . implode( "', '", $order_item_ids ) . "'";
return $wpdb->get_var( "
SELECT sum(meta_value)
FROM {$wpdb->prefix}woocommerce_order_itemmeta
WHERE order_item_id IN ( $order_item_ids )
AND meta_key = '_qty'"
);
}
在我编辑了其他函数以包含项_id之后:
function jdr_get_orders_ids_and_item_ids_from_product_id( $product_id, $orders_statuses = [ 'wc-completed' ] ) {
global $wpdb;
$orders_statuses = "'" . implode( "', '", $orders_statuses ) . "'";
return $wpdb->get_results( "
SELECT DISTINCT woi.order_id, woi.order_item_id
FROM {$wpdb->prefix}woocommerce_order_itemmeta as woim,
{$wpdb->prefix}woocommerce_order_items as woi,
{$wpdb->prefix}posts as p
WHERE woi.order_item_id = woim.order_item_id
AND woi.order_id = p.ID
AND p.post_status IN ( $orders_statuses )
AND woim.meta_key IN ( '_product_id', '_variation_id' )
AND woim.meta_value LIKE '$product_id'
ORDER BY woi.order_item_id DESC"
);
}