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

问题描述 投票:0回答:2

我正在开发一个插件,将超过 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);
   }
}
php arrays wordpress
2个回答
2
投票

我正在做一个导入插件,并且遇到了同样的问题。 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);
}

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


0
投票

我认为没有更好的方法可以做到这一点。这确实是 WordPress 将帖子元数据存储为大量键值对行的方式的固有缺点。

不幸的是,这会导致在这种情况下进行大量更新和插入,这就是它很慢的原因。

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

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.