Php Wordpress更新帖子优化
背景 我有一个cron作业,每24小时运行一次,它会针对特定的帖子类型遍历每篇帖子,并使用从api收集的新数据更新帖子。在这一点上,它正在发挥作用。但这只是因为只有大约1500个职位。但我知道这将增加到40000-80000个职位 目前运行更新大约需要20分钟(主要是因为api的请求限制为30次调用/分钟)。所以这个问题我无能为力。而且我在数据库中得到的帖子越多,花费的时间就越长 我还使用ACF pro向帖子类型添加字段 但我担心的是数据库会出错,因为sql调用太重,太多 今天的样子如何 当前设置如下所示:Php Wordpress更新帖子优化,php,mysql,wordpress,Php,Mysql,Wordpress,背景 我有一个cron作业,每24小时运行一次,它会针对特定的帖子类型遍历每篇帖子,并使用从api收集的新数据更新帖子。在这一点上,它正在发挥作用。但这只是因为只有大约1500个职位。但我知道这将增加到40000-80000个职位 目前运行更新大约需要20分钟(主要是因为api的请求限制为30次调用/分钟)。所以这个问题我无能为力。而且我在数据库中得到的帖子越多,花费的时间就越长 我还使用ACF pro向帖子类型添加字段 但我担心的是数据库会出错,因为sql调用太重,太多 今天的样子如何 当前设
- 服务器1:Webserver
- 服务器2:Mysql服务器
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个帖子。我会将这些数据分成更小的部分,比如:
cron_scheldules
)update_post_meta($ID,''u global_meta',$array_of_updated_data)代码>
这缺少了一个
”
,语法偏离了轨道。感谢您指出这一点,我现在已经在第7点上修复了这一点,这是不可能的,因为网站管理员需要以结构化的方式查看帖子类型的管理部分中的信息。这就是我使用ACF的原因。但我会看看你们列出的其他几点:)嗯,我会检查ACF如何一个接一个地或一个请求全部地从DB请求元数据,并根据这些信息使用元表过滤器(过滤从元表请求的数据的过滤器)。因此,在插件的后端,您将看到一个正确的方式来存储信息(就像它有几个单独的行),实际上它将存储为1个字段。签出get_metadata
获取过滤器名称和其他元挂钩(如更新)我目前正在进行重建,它将在您指出的要点上工作。希望情况会好一点:)