类别模板页面上不同的查询循环(和“主循环”)的问题!

时间:2012-11-15 作者:JochenSchmidt

所以,问题是:

我已经创建了一个类别模板(category.php),其中包含两个查询循环和主循环(其中应该循环类别中的内容)。如果我现在单击模板页面显示的类别,但前两个查询循环也会受到它的影响。一切都一团糟。

以上是我的模板架构。如您所见,我使用了wp\\u reset\\u查询功能,但这没有帮助。如何使主循环对catgeory帖子作出反应?

the first loop:

<div id="slider1">
 <?php $args = array( \'post_type\' => \'slider\');
$loop = new WP_Query( $args );
while ( $loop->have_posts() ) : $loop->the_post();?>
    <div class="startslide" style="background-color: <?php echo get_post_meta($post->ID, \'Farbcode\', true); ?>">
        <div class="slideimg"><?php the_post_thumbnail( \'slider\' ); ?></div>
        <h1><?php the_title(); ?></h1>
        <div class="subline"><?php the_content(); ?></div>
    </div>
 <?php endwhile; ?>
 <?php wp_reset_query(); ?> 

</div> <!--! end of #slider1 -->

the second loop:

<div id="topteaser">
<?php $args = array( \'post_type\' => \'teaser\');
$loop = new WP_Query( $args );
while ( $loop->have_posts() ) : $loop->the_post();?>
        <div class="topteaseritem" style="background:url(<?php $src = wp_get_attachment_image_src( get_post_thumbnail_id($post->ID), array( 36,36 ), false, \'\' ); echo $src[0]; ?>) no-repeat 10px top">
            <h3><?php the_title(); ?></h3>
            <?php the_content(); ?>
        </div>
       <?php endwhile; ?>
        <?php wp_reset_query(); ?> 
</div>

..and the third loop (the main loop):

<div id="slider2">
<?php if (have_posts()) : ?>
    <?php while (have_posts()) : the_post(); ?>
    <div class="post">
        <div class="postimg"><a href="<?php the_permalink() ?>"><?php the_post_thumbnail( \'related\' ); ?> </a></div>
        <div class="postcontent">
            <h3><?php the_title(); ?></h3>
            <?php the_content(); ?>
        </div>
    </div>
<?php endwhile; ?>
    <?php endif; ?>
</div> <!--! end of #slider2 -->
我希望你能理解我的问题,因为我不是以英语为母语的人(这很难解释);-)

1 个回复
SO网友:Chip Bennett

为了提供更具体的帮助,我们需要更详细地了解您不期望发生的事情,或者您期望发生的事情没有发生,或者发生的事情与您期望的不同。

也就是说,至少有两件事可能会对你有所帮助:

使用描述性和唯一的变量名保存自定义查询,包括if ( have_posts() ) 部分循环调用wp_reset_postdata() 而不是wp_reset_query()

变量名称

使用通用变量$arg 保存自定义查询参数和泛型变量$loop 保存两个自定义查询。相反,我建议:

$slider_query_args = array( \'post_type\' => \'slider\');
$slider_query = new WP_Query( $slider_query_args );
。。。和

$teaser_query_args = array( \'post_type\' => \'teaser\');
$teaser_query = new WP_Query( $teaser_query_args );
这样做可以使您的代码更易于阅读/遵循,有助于确保您不会混合使用两个自定义查询,并有助于避免在两个自定义查询调用中出现意外后果。

使用的全循环调用:

while ( $loop->have_posts() ) : $loop->the_post();
相反,请使用:

if ( $slider_query->have_posts() ) : while ( $slider_query->have_posts() ) : $slider_query->the_post();
    // Loop output
endwhile; endif;
。。。和

if ( $teaser_query->have_posts() ) : while ( $teaser_query->have_posts() ) : $teaser_query->the_post();
    // Loop output
endwhile; endif;
自定义查询后重置Post数据

Note: This one may very likely be your main problem.

这个wp_reset_query() 功能旨在重置main query 更改后(例如通过query_posts()). 由于您没有更改主查询wp_reset_query() 对你没有任何帮助。

相反,使用wp_reset_postdata(), 其目的是重置$post 全局变量和所有相关模板标记(例如。the_title(), the_content(), the_permalink(), 再次参考主查询。既然你打电话来了the_post() 在自定义查询循环中,您需要使用wp_reset_postdata():

// Slider Loop
if ( $slider_query->have_posts() ) : while ( $slider_query->have_posts() ) : $slider_query->the_post();
    // Loop output
endwhile; endif;
// Rest postdata
wp_reset_postdata();

// Teaser Loop
if ( $teaser_query->have_posts() ) : while ( $teaser_query->have_posts() ) : $teaser_query->the_post();
    // Loop output
endwhile; endif;
// Rest postdata
wp_reset_postdata();

// Main Query Loop
if ( have_posts() ) : while ( have_posts() ): the_post();
    // Loop output
endwhile; endif;

结束

相关推荐

获取最新创建的自定义类别(GET_TERM_BY和变量)(Out Loop)

我想知道为什么下面的代码不能工作?我的情况:我设置了一个名为“问题”的自定义类别。我想做的是获取最新创建的类别(即“第2卷第1期”)并获取其ID,以便运行plugin 作用z_taxonomy_image_url($currentID); 它根据以下项标识的类别输出URL:$currentID目前我有一个非常黑客的解决方案,但如果有人能找出下面代码的最后3行为什么不起作用,那就太棒了。我们也希望有替代和更清洁的解决方案。$taxonomy=wp_list_categories(\'taxonomy=iss