首先,您不需要原始SQL查询,使用它可以放弃WP的所有优化。
例如,如果您运行两次查询,它将运行两次。如果你用过WP_Query
不过,要获取这些帖子,可以在第一时间保存它们,以避免进行额外的查询。这些帖子甚至可能是其他查询的结果。
除此之外,缓存插件处理查询的选项有限,您必须自己进行所有验证/清理。
所以请这样做:
$q = new WP_Query( [
\'post_type\' => \'acf-field\',
\'posts_per_page\' => 50,
] );
if ( $q->have_posts() ) {
while ( $q->have_posts() ) {
$q->the_post();
// ...
}
wp_reset_postdata();
}
其次,您不需要费劲地重命名列和获取单个字段。您正在进行额外的繁重工作,使得从已经获取的数据中提取数据变得困难,并避免使用WP API。
自从你field_name
只是这篇文章的摘录field_label
是帖子标题,只需使用get_the_excerpt()
和get_the_title()
在回路内部。
最终结果自然会避免重复查询,因为WP将存储它所获取的内容WP_Cache
第二次使用它。如果使用Redis/MemcacheD/etc安装对象缓存插件,它将完全避免查询。
WP中的一条一般经验法则是,如果需要执行原始SQL查询来从自定义表以外的任何对象中提取数据,要么是出现了严重错误,要么是进行了非常昂贵的查询,需要在CLI命令或cron作业中执行。