我有一个自定义的管理页面,需要搜索所有店铺订单,看看它们是否包含特定的项目。相关代码如下:
$args = array(
\'post_status\' => \'any\',
\'post_type\' => \'shop_order\',
\'posts_per_page\' => -1
);
$order_query = new WP_Query($args);
if ($order_query->have_posts()) {
while ($order_query->have_posts()) : $order_query->the_post();
global $post;
$order = wc_get_order($post->ID);
$items = $order->get_items();
foreach($items as $item) {
// Check if item data matches what was searched for
if($item[\'variation_id\'] == $product_variation_ID && $item[\'start-date\'] == $start_date && $item[\'location\'] == $location) {
// This order contains the item we\'re looking for
}
}
endwhile;
}
wp_reset_postdata();
基本上我收到所有的订单,打电话
wc_get_order()
在每个店铺订单ID上,然后致电
get_items()
在每个订单对象上。然后,我遍历这些项目,看看每个项目是否与搜索的内容匹配。每个订单只包含一个项目,尽管这不会改变任何东西。
这段代码运行得很好,只是现在站点有1000多个订单,查询在共享主机上的资源过于密集,我达到了主机的内存限制,无法完成。具体来说,它在呼叫时失败wc_get_order()
在每个shop\\u order post ID上。
有什么方法可以让这个查询更有效吗?我想不出任何其他方法可以不打电话就从shop\\u order post类型获取商品wc_get_order()
, 即使每个订单只包含一个项目。我不想这样做超过1000次,但我只是看不到另一种方法。
我可能不得不暂时转移到VPS来解决这个问题,但我觉得即使有VPS的额外资源,最终我也会遇到同样的问题,因为要循环的shop\\u订单帖子的数量只会不断增加。