WP_QUERY应首先显示粘滞

时间:2013-01-03 作者:Daniel

我的问题是,出于某种原因,我的主题总是首先显示最新的帖子。然而,我希望它首先显示所有的胶粘物,然后显示常规的胶粘物。代码如下:

<!-- Begin top thumbnails --> 
<div class="home-thumbs" style="width:<?php echo $top_width; ?>px;">  

<?php 
$home_query = new   WP_Query("cat=$slider_cat&ignore_sticky_posts=0&showposts=$top_row_posts"); $i = 0;?>
<ul class="thumbs" style="width:<?php echo $top_width; ?>px;">
<?php while ($home_query->have_posts()) : $home_query->the_post();
    $do_not_duplicate = $post->ID; $i++; ?>     
<li class="post-<?php the_ID(); ?> thumb-big">
<dl class="captioned-image"><dt>
<?php get_the_image( array( \'custom_key\' => array( \'thumbnail\' ), \'default_size\' =>   \'320x320\', \'width\' => \'320\', \'height\' => \'320\' ) );?></dt>
<dd><span><?php echo get_the_title(get_the_ID());?></span></dd>
</dl>
</li>
<?php endwhile; wp_reset_query(); $i = 0; ?>
</ul>
</div>
通过将sticky posts设置为零,我希望它在循环的开始处显示sticky posts,但似乎由于某种原因,循环计数器会通过post id下降,只会首先显示最新的帖子,而忽略我的所有wp\\U查询参数。

1 个回复
SO网友:bosco

首先,查询参数showposts has been replaced by posts_per_page 自WP v2起。1.

我认为您的任何查询参数都不会被忽略(嗯,可能是saveshowposts; 我还没有检查arg是否还存在向后兼容性支持)。也就是说,我不知道你的价值$top_row_posts 变量保存或它应该表示的内容,但完全可能是数据以Wordpress无法使用的格式插入到查询中。

但是(正如米洛纠正我的)你是对的,设置ignore_sticky_posts0 应确保粘帖起泡至顶部。From the codex WP_Query page,

忽略\\u sticky\\u帖子:[…]注意:忽略/排除返回的帖子开头包含的粘性帖子,但是the sticky post will still be returned in the natural order of that list of posts returned.

虽然我不能完全确定您的查询出了什么问题,但我建议使用两个单独的查询来解决问题,这两个查询将明确确保所需的效果-一个用于粘性帖子,另一个用于其他帖子:

实现双查询方法的理想方法是使用the pre_get_posts action 在插件或主题的函数中。php文件,然后直接在主题的主页/首页模板中运行第二个“粘性”查询。类似于

functions.php:

function modify_home_query( $query ) {
    /* If not displaying the home/front page or not processing the main query, bail out. */
    if( is_admin() || !$query->is_main_query() || !( is_home() || is_front_page() ) )
        return;

    /* If this is the main query for the home/front page, tell it to ignore sticky posts entirely. */
    $query->set( \'post__not_in\', get_option( \'sticky_posts\' ) );
}
add_action( \'pre_get_posts\', \'modify_home_query\' );
请注意the WP_Query method is_main_query() 仅适用于WP v3。3.

主回路上方front-page.phphome.phpindex.php (使用条件封装):

$stickyQuery = new WP_Query( array(
        \'cat\'                    => $slider_cat,    //Select posts from the slider category id
        \'ignore_sticky_posts\'    => 0,
        \'post__in\'               => get_option( \'sticky_posts\' ),
        \'posts_per_page\'         => -1             //Get ALL the stickies
    );
while( $stickyQuery->have_posts() ) : $stickyQuery->the_post();

   //... ( Sticky Post Template Here )

endwhile;
wp_reset_query();

//... ( Main template loop here )
正如Milo所指出的,无论您选择的重点是纠正您的查询还是创建一个变通方案,您都可能希望再次检查$slider_cat 变量以确保它是有效的类别ID。

结束

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post