不,问题在于您没有在问题中提出的部分,即查询的性能特征完全取决于这一点:
我有了新的WP\\u查询($taxonomy\\u Query),然后在以下时间运行if:
那个首字母= new WP_Query([...
负责整个性能成本。
循环开始时,昂贵的部分已经结束。因此,不,您的循环很好,如果您正在寻求性能提升,那么这里没有优化的空间。您查询的内容决定了成本。
再往下看,我使用foreach,使用:
$tax_countries = $taxonomy_query->posts;
foreach ($tax_countries as $option) {
我认为这不太理想,最好使用标准的post循环,结合rewind\\U posts方法将循环放回起点。
你也没打电话have_posts
根据您的查询。
因此,您应该能够执行以下操作来运行相同的循环两次:
$q = new WP_Query([... arguments go here ...]);
if ( $q->have_posts() ) {
while ( $q->have_posts() ) {
$q->the_post();
// do stuff
}
$q->rewind_posts();
while ( $q->have_posts() ) {
$q->the_post();
// do other stuff
}
wp_reset_postdata();
} else {
// nothing found
}
吹毛求疵,每行做一件事,不要把所有的if和while开篇和结尾都放在同一行,这样会适得其反,而且会使内容更难阅读
WP_Query
尽可能多地,不是没有人有时间处理所有调用的4或5个函数吗
WP_Query
不管怎样,使用所有的边缘案例和注意事项
{ }
语法,它可以更好地与编辑器和自动化工具配合使用,让编辑器完成所有繁重的工作(如果使用
endwhile;
etc)
如果找不到帖子,它仍会调用wp_reset_postdata
即使没有要重置的post数据!将其放在循环之后,但放在if语句中根据WP编码标准的要求,使用制表符缩进,并让编辑器为您缩进。如果必须使用空格,请选择一个编码标准并遵守它,但最重要的是,要保持一致。如果要替换主查询,而不是执行额外的查询,任何不太合适的编辑器都会为您执行此操作
pre_get_posts
取而代之的是