如何使WordPress的粘性帖子在自定义循环中工作


How to make WordPress sticky posts work in custom loops?

我希望能够使用query_posts或$custom_query=new WP_query()创建自定义循环并且能够制作粘性帖子。

例如,我在一个名为"新闻"的页面上有一个自定义循环,它循环"新闻"类别中的帖子,并用它们构建一个漂亮的砖石网格。循环的项目然后链接到实际的文章。

<?php $custom_query = new WP_Query('cat=8'); // boxes loop
        while($custom_query->have_posts()) : $custom_query->the_post(); ?>
        <div <?php post_class('newsbox box '); ?> id="post-<?php the_ID(); ?>">
            <?php  //if looplink exists, looplink
                $looplink = get_post_meta( get_the_ID(), 'linkki', true );
                if( ! empty( $looplink ) ) :?> <a class="looplink" target="_blank" href="<?php $linkki = get_post_meta($id, 'linkki', true ); if( ! empty( $linkki ) ) { echo $linkki; } ?>"></a>
            <?php endif; //end looplink ?>
            <h3><?php the_title(); ?></h3>
            <?php if ( has_post_thumbnail() ) {the_post_thumbnail();} ?>
            <?php the_content(); ?>
        </div>
        <?php endwhile; ?>
        <?php wp_reset_postdata(); // reset the query ?>

我还使用这个循环来显示社交媒体小部件,所以这些应该总是第一对文章(=粘性)。

我不完全满意的一个想法是,不指定要循环的类别,而是指定要排除的不需要的类别。它似乎使粘帖工作是出于某种原因。有没有一种方法可以在不需要的情况下使用一些简单的功能来实现这一点

query_posts('cat=-1,-2,-3,-4');

等等所有的循环?

当然,这是一个解决方案,可以让Sticky帖子始终具有粘性,无论我是在主页中使用它们,还是在显示特定类别的自定义循环中使用它们。

这排除了所有的粘性帖子。

query_posts( array( 'post__not_in' => get_option( 'sticky_posts' ) ) );

包括粘性帖子:

    $args = array(
    'posts_per_page' => 1,
    'post__in'  => get_option( 'sticky_posts' ),
    'ignore_sticky_posts' => 1
);
query_posts( $args );

ignore_sticky_posts:是否忽略粘性帖子(3.1版可用,已替换caller_get_posts参数)。默认值为0-不要忽略粘性帖子。注意:忽略/排除返回帖子开头包含的粘性帖子,但粘性帖子仍将按返回帖子列表的自然顺序返回。