我正在使用woocommerce创建一个自定义报表,它正在工作,但是它正在使用大量的资源,它需要更大,如果我增加它的大小,它将超时。我肯定有更好的办法。
我正在运行多个查询,看看有多少特定颜色和尺寸的产品已经订购。目前,这些是单独的查询,效率不高。这是我的密码:
此函数用于获取订购数量:
function get_order_by_product_id($product_id, $product_color, $product_size) {
$args = array (
'limit' => '-1',
'status' => 'processing',
);
$orders = wc_get_orders( $args );
if($orders) :
$total = 0;
foreach( $orders as $order) :
$order_id = $order->get_id();
$single_order = wc_get_order( $order_id );
foreach ($single_order->get_items() as $item_id => $item_data) :
$product = $item_data->get_product();
$productID = $single_order->get_item_meta($item_id, '_product_id', true);
$product_name = $product->get_name();
$color = $single_order->get_item_meta($item_id, 'pa_colors', true);
$size = $single_order->get_item_meta($item_id, 'pa_sizes', true);
$item_quantity = $item_data->get_quantity();
if($productID == $product_id && $color == $product_color && $size == $product_size ) :
$total += $item_quantity;
endif;
endforeach;
endforeach;
echo $total;
endif;
}
这是对函数的调用:
get_order_by_product_id(47652, 'black', 'xs');
目前,为了使这项工作,我一遍又一遍地调用每个产品id,颜色和大小的函数。正如我所说,它是有效的,但它是一个资源Pig。
任何提高效率的想法都将不胜感激!
2条答案
按热度按时间yfjy0ee71#
这可以通过使用以下函数在一个简单的打火机sql查询中完成:
代码放在活动子主题(或活动主题)的function.php文件中。测试和工作。
用法示例:
对于“处理”订单状态:
get_ordered_product_count(47652, 'black', 'xs');
对于特定订单状态:get_ordered_product_count(47652, 'black', 'xs', 'completed');
gcmastyq2#
要计算具有特定属性eq且颜色为“蓝色”或“黑色”的所有(已发布)产品,可以使用: