我正在开发一个插件,插入数据库超过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);
}
}
答案 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列上是否有索引是值得的。这可能有助于加快更新查询。