Php 如何在Wordpress中快速插入大量post/meta?

Php 如何在Wordpress中快速插入大量post/meta?,php,arrays,wordpress,meta,Php,Arrays,Wordpress,Meta,我正在开发一个插件,将超过20000个自定义帖子插入数据库,每个自定义帖子都有大约9个元帖子条目 这需要MySQL很长时间。有更好的方法吗 我像这样插入元数据: $post_meta = array( '_stock_status'=>'instock', '_price'=>$r["price"], '_regular_price'=>$r["price_old"], '_sale_price'=>$r["price"], '_v

我正在开发一个插件,将超过20000个自定义帖子插入数据库,每个自定义帖子都有大约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);
   }
}

我认为没有比这更好的方法了。Wordpress将post元数据存储为许多行的键值对,这确实是一个固有的缺点

不幸的是,在这个场景中,这会导致大量的更新和插入,这就是为什么它很慢的原因


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

我正在做一个导入插件,并且有类似的问题。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);
}

在我的代码中测试并运行。看起来快多了

一定有办法!也许构建一个数组来提供给mysql并放弃wordpress函数,但必须有办法。