我正在使用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、颜色和大小调用该函数。正如我所说的,它是有效的,但它是一种资源消耗。
任何提高效率的想法都将不胜感激!
发布于 2018-06-26 22:42:22
要计算具有特定属性eq的所有(发布的)产品的颜色为“蓝色”或“黑色”,您可以使用:
$colors = 'black, blue';
$args = array(
'post_type' => 'product',
'post_status' => 'publish',
'ignore_sticky_posts' => 1,
'meta_query' => array(
array(
'key' => '_visibility',
'value' => array('catalog', 'visible'),
'compare' => 'IN'
)
),
'tax_query' => array(
array(
'taxonomy' => 'pa_color',
'terms' => explode(",",$colors),
'field' => 'slug',
'operator' => 'IN'
)
)
);
echo count (wc_get_products($args));
https://stackoverflow.com/questions/51035097
复制相似问题