WP查询。有最大尺码吗?

时间:2015-07-07 作者:Jan Rohweder

我开发了一个插件,可以以非常特定的方式搜索WooCommerce产品的副本。它在我们的测试环境中工作得很好,但在客户端的原始设置中它不会执行。它只是重新加载页面,就像什么都没发生一样。我们的设置与原始网站之间最明显的区别是产品的数量。我们的客户在他的WooCommerce商店里有60000多种产品,数量之多令人难以置信。

我认为我们运行的查询可能在某种程度上受到限制,但可能我完全走错了路。非常感谢您的帮助,因为我快要发疯了。

以下是相关代码:

    $type = \'product\';
$args=array(
    \'post_type\' => $type,
    \'post_status\' => \'publish\',
    \'posts_per_page\' => -1
); 
function searchForId($id, $array) {
foreach ($array as $key => $val) {
   if ($val[\'name\'] === $id) {
       return $key;
   }
}
 return null;
}
$my_query = null;
$my_query = new WP_Query($args);
$items = array();
$duplicates = array();
$name;
if( $my_query->have_posts() ) {
 while ($my_query->have_posts()) : $my_query->the_post();
$name = the_title( \'\', \'\', FALSE );
$thumb_url = get_post_thumbnail_id();
$product_description = get_the_content();


if (strpos($thumb_url,\'default.png\') !== false) {
    $thumb_url = null;
}
 $price = get_post_meta( get_the_ID(), \'_price\', true); 
 $sale = get_post_meta( get_the_ID(), \'_sale_price\', true);
 if ($sale < $price && !empty($sale)) {
  $price = $sale;
 }
 if (array_key_exists($name, $items)) {
  $existing_product_description = $items[$name][\'product_description\'];
  $existing_name = $items[$name][\'name\'];
  $existing_price = $items[$name][\'price\'];
  $existing_image = $items[$name][\'featured_image\'];

  if ($existing_product_description != $product_description && $existing_price == $price && $existing_name == $name) {
    if ($existing_image == null) {
    $items[$name][\'featured_image\'] = $thumb_url;
    }
    $duplicate_id = get_the_id();      
    array_push($duplicates, $duplicate_id);
  }
  if ($existing_product_description != $product_description && $existing_price != $price && $existing_name == $name) {
    if ($existing_image == null) {
    $items[$name][\'featured_image\'] = $thumb_url;
    }
  }
  if ($existing_product_description == $product_description && $existing_price != $price && $existing_name == $name) {

  if ($existing_price > $price) {
    $items[$name][\'price\'] = $price;
  }
  if ($existing_image == null) {
    $items[$name][\'featured_image\'] = $thumb_url;
  }
  $duplicate_id = get_the_id();      
  array_push($duplicates, $duplicate_id);
  }
  if ($existing_product_description == $product_description && $existing_price == $price && $existing_name == $name) {
  $duplicate_id = get_the_id();      
  array_push($duplicates, $duplicate_id);
  }
}

else {
$items[$name] = array(
\'id\' => get_the_ID(),
\'name\' => $name,
\'price\' => $price,
\'featured_image\' => $thumb_url,
\'product_description\' => $product_description
);
 }
 ?>
 <?php
 endwhile;
 }
 wp_reset_query();  // Restore global post data stomped by the_post().
 foreach ($items as $product => $products) {
      $product_id = $items[$product][\'id\'];
      $product_new_price = $items[$product][\'price\'];
      $product_new_thumb = $items[$product][\'featured_image\'];
      $product_to_edit = new WC_Product($product_id);
      $price = $product_to_edit->price;
      set_post_thumbnail( $product_id, $product_new_thumb );
      update_post_meta($product_id, \'_price\', $product_new_price);
      update_post_meta($product_id, \'_regular_price\', $product_new_price);
      update_post_meta( $product_id, \'_sale_price\', \'\' );
 }
 foreach ($duplicates as $index => $ids) {
        wp_trash_post($ids); 
 }

2 个回复
SO网友:Hari Om Gupta

是的,我认为它适用于数量有限的物品,我也发现了类似的问题wp_query, 在我客户的网站上,有20000多个产品,顺便说一句,我通过执行sql查询而不是wp\\U查询来解决这个问题

SO网友:s_ha_dum

我认为我们运行的查询可能在某种程度上受到限制。。。

据我所知,您的查询和对结果的处理将受到服务器资源(内存等)的限制,而不是受到WordPress的限制,除了WordPress defined PHP memory limit, 在某种程度上你可以试着改变一下,看看是否有帮助。否则,您将需要主机的帮助,并需要发布错误日志和other debugging information.

结束

相关推荐

我有index.php等文件,如何显示其他页面?

我正在将HTML主题转换为WP。我有索引。php,标题。php,页脚。php,它来自HTML。然后我在管理区内创建了一些页面,比如关于我们等。创建了一个菜单并将这些页面链接到菜单。菜单显示得很好,但WP显示的是索引,而不是我创建的页面。php。所以我想我需要一个模板来显示关于我们和其他页面的信息。如果是重复的,请在评论中发布一个链接,我的意思是完全重复的,而不是我必须坐在那里猜测答案。谢谢我试着阅读an article in Codex 但它写得不好,听起来像胡言乱语。应该是straighforward,