有时无法创建自定义查询,但当我创建并循环使用它时,我通常希望使用get_template_part()
在自定义查询循环中,拉入一个我已经知道会满足我需要的模板。有时,该模板是99.9%完美的,只需要添加一些条件,就可以根据查询的需要进行操作。
假设is_main_query() = FALSE
在这个模板文件中,我如何(1)确定在哪个查询中循环;和(2)访问非主查询的属性和方法?
示例:
page.php
<?php
$two_posts = new WP_Query(array(
\'nopaging\' => true,
\'post_per_page\' => -1,
\'post_type\' => \'post\',
\'post__in\' => array(1, 2),
\'orderby\' => \'post__in\'
));
?>
<?php if($two_posts->have_posts()) : ?>
<div class="two-posts">
<?php while($two_posts->have_posts()) : ?>
<?php $two_posts->the_post(); ?>
<?php get_template_part(\'templates/content\', \'existing\'); ?>
<!-- or -->
<?php include(locate_template(\'templates/content-existing.php\')); ?>
<?php endwhile; ?>
</div>
<?php endif; ?>
<?php wp_reset_query(); ?>
templates/content-existing.php
<?php if(is_main_query()) : ?>
<p class="title"><?php the_title(); ?></p>
<?php elseif(/* query == $two_posts */) : ?>
<?php if(/* $two_posts->current_post == 0 */) : ?>
<h1><?php the_title(); ?><h1>
<?php endif; ?>
<?php if(/* $two_posts->current_post == 1 */) : ?>
<h2><?php the_title(); ?></h2>
<?php endif; ?>
<?php else : ?>
<p>Nothing to display here.</p>
<?php endif; ?>
最合适的回答,由SO网友:cfx 整理而成
多亏了Rarst的指导,我制定了一个快速的解决方案,虽然看起来有点老套,但似乎可以做到这一点。
解决方案:
page.php
<?php
$two_posts = new WP_Query(array(
\'nopaging\' => true,
\'post_per_page\' => -1,
\'post_type\' => \'post\',
\'post__in\' => array(1, 2),
\'orderby\' => \'post__in\'
));
/* Setup default global query boolean */
$GLOBALS[\'two_posts_query\'] = FALSE;
/* Keep track of the post count */
$GLOBALS[\'two_posts_count\'] = $two_posts->post_count;
?>
<?php if($two_posts->have_posts()) : ?>
<div class="two-posts">
<?php while($two_posts->have_posts()) : ?>
<?php $two_posts->the_post(); ?>
<?php /* Keep track of the current post */ ?>
<?php $GLOBALS[\'two_posts_current_post\'] = $two_posts->current_post; ?>
<?php /* Set global variable to TRUE */ ?>
<?php $GLOBALS[\'two_posts_query\'] = TRUE; ?>
<?php get_template_part(\'templates/content\', \'existing\'); ?>
<?php $GLOBALS[\'two_posts_query\'] = FALSE; ?>
<?php /* Reset global variable to FALSE */ ?>
<?php endwhile; ?>
</div>
<?php endif; ?>
<?php wp_reset_query(); ?>
templates/content-existing.php
<?php
global $two_posts_query, $two_posts_post_count, $two_posts_current_post;
?>
<?php if($two_posts_query && $two_posts_post_count >= 2) : ?>
<?php if($two_posts_current_post == 0) : ?>
<h1><?php the_title(); ?><h1>
<?php elseif($two_posts_current_post > 0) : ?>
<h2><?php the_title(); ?></h2>
<?php endif; ?>
<?php else : ?>
<p class="title"><?php the_title(); ?></p>
<?php endif; ?>