除了索引中的主循环之外。php,我调用了其他几个跨主题的自定义查询,如下所示:
$new_query = new WP_Query(array(
// some args
));
if ($new_query->have_posts()) :
while ( $new_query->have_posts() ) : $new_query->the_post();
// This is the same template that I use in the main query or other custom queries
get_template_part( \'template-parts/content\' );
endwhile;
endif;
wp_reset_postdata();
现在,我需要从模板文件中检查它是从这个自定义查询调用还是从主查询调用。
内容也是如此。php
<article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
<?php if ( is_main_query() ) {
// Do some staff
} else {
// Do other staff
} ?>
</article>
is_main_query()
总是返回true,因为它指的是
global $wp_query
, 我想是吧。我可以用
$new_query->is_main_query()
但在模板文件中是不可能的。那么如何解决这个问题呢?谢谢
EDIT:
我在这里找到了一个解决方案
Which custom query am I in and how can I access its properties & methods?关键是要设置全局布尔值并在模板文件中进行检查
$new_query = new WP_Query(array(
// some args
));
$GLOBALS[\'is_custom_query\'] = FALSE;
if ($new_query->have_posts()) :
while ( $new_query->have_posts() ) : $new_query->the_post();
$GLOBALS[\'is_custom_query\'] = TRUE;
get_template_part( \'template-parts/content\' );
$GLOBALS[\'is_custom_query\'] = FALSE;
endwhile;
endif;
wp_reset_postdata();
不确定此解决方案的可靠性。
最合适的回答,由SO网友:Pieter Goosen 整理而成
使用in_the_loop()
, 如果在主循环中,它将返回true;如果不在主循环中,它将返回false,就像在自定义查询循环中一样
Return:(bool)如果调用方在循环内,则为True;如果循环尚未开始或结束,则为false。
两者之间的区别is_main_query()
和in_the_loop()
是吗is_main_query()
使用WP_Query::is_main_query()
然后使用全局$wp_the_query
. $wp_is_query
存储主查询,这就是为什么is_main_query()
在循环中始终返回true。您还应该阅读this post
总之,你可以
<article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
<?php if ( in_the_loop() ) {
// Do some staff
} else {
// Do other staff
} ?>
</article>