你不应该把主要$wp_query
, 仅辅助查询。
举下面的例子,如果我有一个非常简单的frontpage.php
模板看起来像:
<?php get_header(); ?>
<?php get_template_part( \'templates/template\', \'main-query\' ); ?>
<?php get_footer(); ?>
然后,我可以在中创建模板
/theme-name/templates/template-main-query.php
具有正常循环:
<?php if( have_posts() ) : ?>
<?php while( have_posts() ) : the_post(); ?>
<h1><?php the_title(); ?></h1>
<?php the_content(); ?>
<?php endwhile; ?>
<?php endif; ?>
注意,我不需要任何类型的全局查询,除非我想访问以下任何查询方法/属性
found_posts
或者类似的东西。
对于辅助查询,您可以将查询全球化,但更好的解决方案是包含如下模板:
<?php get_header(); ?>
<?php
get_template_part( \'templates/template\', \'main-query\' );
$all_pages = new WP_Query( array(
\'post_type\' => \'page\',
\'posts_per_page\'=> -1
) );
require_once( locate_template( \'templates/template-secondary-query.php\' ) );
?>
<?php get_footer(); ?>
然后,我们的模板文件如下所示:
<?php if( $all_pages->have_posts() ) : ?>
<?php while( $all_pages->have_posts() ) : $all_pages->the_post(); ?>
<h1><?php the_title(); ?></h1>
<?php endwhile; ?>
<?php endif; ?>
如果可能的话,只包括次要的
new WP_Query
而不是将查询放在一个文件中,然后在另一个文件中循环。如果我没有弄错的话,这是WooCommerce在模板文件中用于二次查询的方法,它们只是在文件的顶部包含新查询。