WordPress查询不工作吗?

时间:2012-12-08 作者:Joe Bobby

//Display All Reviews
function display_all_reviews( $query ) {
    if ( $query->is_home() && $query->is_main_query() ) {
        $query->set( \'tag\', \'reviews\' );
    }
}
add_action( \'pre_get_posts\', \'display_all_reviews\' );

//Movie All Reviews
function display_movie_reviews( $query ) {
    if ( $query->is_home() && $query->is_main_query() ) {
        $query->set( \'tag\', \'movie-reviews\' );
    }
}
add_action( \'pre_get_posts\', \'display_movie_reviews\' );
Display All Reviews 是唯一应该显示在主页上的内容display_movie_reviews 假设在其类别的侧栏中显示is_category(\'movies\'), 以及该类别的帖子。我看他们有$query->is_home() 但我试过了is_category(\'movies\') 没有任何运气。。

这是display_movies_reviews 类别的标记:

<div id="sidebar-reviews">
    <span>Movie Reviews</span>
    <ul>
        <?php if ( have_posts() ) : ?>
        <?php /* Start the Loop */ ?>
        <?php add_action( \'pre_get_posts\', \'display_movie_reviews\' ); ?>
        <?php while ( have_posts() ) : the_post(); ?>
        <?php get_template_part( \'sidebar-reviews\', get_post_format() ); ?>
        <?php endwhile; ?>
        <?php else : ?>
        <?php get_template_part( \'no-results\', \'index\' ); ?>
        <?php endif; ?>
    </ul>

</div>
这是display_movies_reviews 电影类别中帖子的标记:

<!-- ###Movies Single Sidebar### -->
<?php elseif ( ! empty ( $GLOBALS[\'post\'] ) && is_single() && in_category( \'movies\', $GLOBALS[\'post\'] ) ) : ?>
<div class="sidebar-ad">
</div>
<div id="sidebar-reviews">
    <span>Movie Reviews</span>
    <ul>
        <?php if ( have_posts() ) : ?>
        <?php /* Start the Loop */ ?>
        <?php add_action( \'pre_get_posts\', \'display_movie_reviews\' ); ?>
        <?php while ( have_posts() ) : the_post(); ?>
        <?php get_template_part( \'sidebar-reviews\', get_post_format() ); ?>
        <?php endwhile; ?>
        <?php else : ?>
        <?php get_template_part( \'no-results\', \'index\' ); ?>
        <?php endif; ?>
    </ul>

</div>
我试过这样修理它:

//Movie All Reviews
function display_movie_reviews( $query ) {
    if ( $query->is_category(\'movies\') ) {
        $query->set( \'tag\', \'movie-reviews\' );
    }
}
add_action( \'pre_get_posts\', \'display_movie_reviews\' );
但我一点运气都没有。有没有办法让主页和边栏正常工作?

edit: sidebar

<?php if ( $query->is_category(\'movies\') ): ?>
<?php $movies = new Wp_Query(\'tag=movie-reviews\'); ?>

<?php while ( $movies->have_posts() ) : ?>
<?php $movies->the_post(); ?>
<?php get_template_part( \'sidebar-reviews\', get_post_format() ); ?>
<?php endwhile; ?>
<?php else : ?>
<?php get_template_part( \'no-results\', \'index\' ); ?>
<?php endif; ?>

1 个回复
最合适的回答,由SO网友:Dan Gayle 整理而成

对于侧边栏位,应该使用新的Wp_Query:

if ( $query->is_category(\'movies\') ):
    $movies = new Wp_Query(\'tag=movie-reviews\');

    while ( $movies->have_posts() ) :
        $movies->the_post();
        get_template_part( \'sidebar-reviews\', get_post_format() );
    endwhile;

    else:
        get_template_part( \'no-results\', \'index\' );
endif;
除了页面上的主循环之外,您不需要任何查询过滤器。

结束

相关推荐

Multiple loops are not reset

我可爱的同事们再次设计了一款让我很难在Wordpress中找到它的东西。令人惊讶的是,这是我以前做过多次的事情;在一个页面上有最近的帖子和页面内容。主页是一个页面。在页面内容上方有三篇最近的帖子。对于帖子,我需要在<!--more--> 标签这个循环似乎工作得很好。稍后,在模板中,我循环查看实际页面内容。无论我做什么,它总是给我不可靠的结果。这是我的索引的精简版本。php/页。php模板(它们恰好相同):<div id=\"content\"> <?php g