Wordpress从循环中排除重复$sticky帖子

2022-08-31 01:18:20

由于Wordpress粘性帖子功能允许在帖子发布面板中检查为粘性的帖子放置在帖子首页的顶部。我还打算通过自定义循环默认编码来使粘性帖子的样式与循环中的普通帖子不同,如下所示:

    <?php if (have_posts()) : ?>
    <?php $post = $posts[0]; $c=0;?>
    <?php while (have_posts()) : the_post(); ?>

     <?php $c++;
       if( is_home() && !$paged && $c == 1 ) :?>
         <!--First sticky post content -->

    <?php elseif( is_home() && !$paged && $c == 2 ) :?>
        <!--Second sticky post content -->

    <?php elseif( is_home() && !$paged && $c == 3 ) :?>
        <!--Third sticky post content -->

    <?php else:?>
        <!-- Standard post content -->

    <?php endif;?>
    <?php endwhile; ?>
    <!-- End of the main loop -->
      //pagination

    <?php else : ?>
      <?php _e('Sorry, no posts matched your criteria.'); ?>

    <?php endif; ?>

结果是我得到了前三个帖子(检查为粘性),具有自定义样式,同时在标准帖子输出中重复,我未能摆脱。

我试图替换,但显示的页面是“分页”或当前页码大于1,根据每页的发布日期减去粘性帖子计数。<?php else : ?><?php elseif(!is_sticky()) : ?>

任何帮助使粘性帖子不重复是非常值得赞赏的。


答案 1

我建议您阅读WP_Query文档:
https://codex.wordpress.org/Class_Reference/WP_Query#Pagination_Parameters

您可以创建新的(或更改现有)查询并获取帖子,而无需粘性帖子。

不显示粘滞帖子

从查询中排除所有粘性帖子:

$query = new WP_Query( array( 'post__not_in' => get_option( 'sticky_posts' ) ) );

我建议您连续进行2次查询。

第一个用于获取粘性帖子,第二个用于获取所有其他帖子(如上所述,不包括粘性帖子)。


答案 2

要处理粘性帖子

<?php
    $sticky_query = new WP_Query( array( 'post__in' => get_option( 'sticky_posts' ) ) );
    while ($sticky_query->have_posts()) : $sticky_query->the_post();
?>

要处理不粘性的帖子,请做

<?php
    $non_sticky_query = new WP_Query( array( 'post__not_in' => get_option( 'sticky_posts' ) ) ); 
    while ($non_sticky_query->have_posts()) : $non_sticky_query->the_post();
?> 


PS - 在这里不起作用,因为我猜这个代码在你的主页上运行。 将要求 在发布页面以外的页面上按要求工作。is_sticky()is_sticky()post_id

您可以在当前代码的循环中执行类似操作。is_sticky(get_the_ID())


推荐