背景
我有一个每24小时运行一次的cron作业,它通过特定帖子类型的每个帖子,并使用从api收集的新数据更新帖子。此时它正在运作。但那只是因为只有大约1500个帖子。但我知道这会增加到约40000-80000个职位。
目前运行更新大约需要20分钟(主要是因为api的请求限制为30个呼叫/分钟)。所以我无能为力。我在数据库中发布的帖子越多,就会花费更长的时间。
我也在使用ACF专业版为帖子类型添加字段。
但是我担心的是数据库会出错,因为sql调用很多而且很多。
今天看起来如何
目前的设置如下:
目前更新代码看起来像这样,我觉得必须有更好的方法来做到这一点。
public function updatePosts($apiPosts){
/** Loop thru every post from the api, these are setup in another function */
foreach($apiPosts as $post){
/** Look to see if a post exist with the code */
$args = [
'post_type' => 'my_custom_post_type',
'meta_key' => 'code',
'meta_value' => $post->code,
'posts_per_page' => 1
];
$post = get_posts($args);
/** If no post was found, create a new post */
if(!$post[0]){
$newPost = [
'post_title' => $post->title,
'post_type' => 'my_custom_post_type',
'post_status' => 'publish'
]
$post_id = wp_insert_post($newPost);
}else{
$post_id = $post[0]->ID
}
/** Update the acf fields on the post */
update_field('field1', $post->field1, $post_id);
update_field('field2', $post->field2, $post_id);
update_field('field3', $post->field3, $post_id);
update_field('field4', $post->field4, $post_id);
update_field('field5', $post->field5, $post_id);
update_field('field6', $post->field6, $post_id);
update_field('field7', $post->field7, $post_id);
}
}
我愿意接受你提出的所有建议。我有一种感觉,需要优化这一点。因为在那个循环中,如前所述,它可以很容易地通过循环播放40000个帖子。
答案 0 :(得分:1)
我会将这些数据拆分为较小的部分,例如:
cron_scheldules
)更新
您还可以填充自定义字段信息一个fiels并存储其中的数组(稍后将反序列化并在前端使用)。只有这个操作才会减少sql查询(和缓存丢弃)数量减少7个查询。
update_post_meta($ID, '_global_meta', $array_of_updated_data);