如何快速将大量帖子/元词插入Wordpress?

时间:2014-07-27 21:46:32

标签: php arrays wordpress meta

我正在开发一个插件,插入数据库超过20,000个自定义帖子,每个自定义帖子有大约9个元帖子条目。

这是一个时间的MySQL。有更好的方法吗?

我插入了这样的元帖子数据:

$post_meta = array(
    '_stock_status'=>'instock',
    '_price'=>$r["price"],
    '_regular_price'=>$r["price_old"],
    '_sale_price'=>$r["price"],
    '_visibility'=>'visible',
    '_button_text'=>'buy',
    '_product_url'=>$r["link"],
    '_product_external_image_url'=>$r["imagelink"],  
    '_sku'=>$r["prdcrd"]
);

go_update_post_meta($post_id,$post_meta);

function go_update_post_meta($post_id,$meta){
   foreach($meta as $key=>$val){
      update_post_meta($post_id,$key,$val);
   }
}

2 个答案:

答案 0 :(得分:1)

我在做一个导入插件,并且遇到了同样的问题。 70-80个帖子,每个帖子可能有20个元值。 我想你可以将所有数据存储在一个数组中并执行类似

的操作
INSERT INTO wp_postmeta (post_id,meta_key,meta_value) VALUES ($post_id,$key1,$value1),($post_id,$key2,$value2) ,($post_id,$key3,$value3);

应该比你现在使用的循环更快。


看到你的功能,也许这会起作用

function go_update_post_meta($post_id,$meta){
   global $wpdb;

   $values = '';
   $a = 0;
   foreach($meta as $key=>$val){
      $a++;
      if ($a > 1) $values .=',';
      $values .= '('.$post_id.',"'.$key.'","'.$val.'")';
   }

   $sql = "INSERT INTO wp_postmeta (post_id,meta_key,meta_value) VALUES ".$values;
   $wpdb->query($sql);
}

经过测试并在我的代码中工作。看起来更快

答案 1 :(得分:0)

我认为没有更好的方法可以做到这一点。它实际上是Wordpress将元数据存储为大量键值对的方式的固有缺点。

不幸的是,这导致了这种情况下的大量更新和插入,这就是为什么它变慢的原因。

但是,检查post_id和key列上是否有索引是值得的。这可能有助于加快更新查询。