是否将粘性帖子包括在页面帖子计数中?

时间:2015-03-03 作者:Travis Patron

我想在我的主页上显示7个帖子。我想能够手动选择这些职位的粘贴他们。

目前,我在WP Admin中将每页的帖子设置为“7”。然而,这并不包括我现在的贴子7 sticky posts + 7 newest published posts displaying for a total of 14.

如何在每页的帖子数中包含粘性帖子?

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

这是可行的,正如我在评论中所说的,您需要遵循以下步骤

统计粘性帖子的数量。这可以通过简单的计数来完成get_option( \'sticky_posts\' ) 以数组的形式保存粘性帖子的ID

您还需要获得每页的帖子数量。你不想在这里硬编码。每页的帖子数量存储在get_option( \'posts_per_page\' ), 所以你要用这个

现在重要的部分是利用偏移量重新计算要在主查询的第一页上显示的帖子数量。根据OP中的示例,如果将每页的帖子数设置为7,并且有4篇粘性帖子,那么我们只需要主查询中的三篇帖子,而不是站点默认设置的七篇帖子。从第2页开始,我们仍然需要在主查询中显示正常的7篇帖子,因为这里没有粘性帖子

但是,该偏移量将影响$max_num_pages 属性,这意味着在大多数情况下,最后一页将丢失。为了纠正这一点,我们需要调整找到的帖子数量,基本上是将我们的偏移量添加到实际找到的帖子数量中,以纠正页面数量。这将通过found_posts 滤器

注意:此代码现在已测试并正常工作)

以下是代码的基本思想:

add_action( \'pre_get_posts\', function ( $q ) 
{

    if ( $q->is_main_query() && $q->is_home() ) {

        $count_stickies = count( get_option( \'sticky_posts\' ) );
        $ppp = get_option( \'posts_per_page\' );
        $offset = ( $count_stickies <= $ppp ) ? ( $ppp - ( $ppp - $count_stickies ) ) : $ppp;

        if (!$q->is_paged()) {
          $q->set(\'posts_per_page\', ( $ppp - $offset ));
        } else {
          $offset = ( ($q->query_vars[\'paged\']-1) * $ppp ) - $offset;
          $q->set(\'posts_per_page\',$ppp);
          $q->set(\'offset\',$offset);
        }

    }

});    

add_filter( \'found_posts\', function ( $found_posts, $q ) 
{

    if( $q->is_main_query() && $q->is_home() ) {

        $count_stickies = count( get_option( \'sticky_posts\' ) );
        $ppp = get_option( \'posts_per_page\' );
        $offset = ( $count_stickies <= $ppp ) ? ( $ppp - ( $ppp - $count_stickies ) ) : $ppp;        

        $found_posts = $found_posts + $offset;
    }
    return $found_posts;

}, 10, 2 );     

结束

相关推荐

禁用wp-admin中的默认帖子(帖子、页面、评论和媒体)

我想在wordpress的wp admin面板中禁用user author的默认帖子类型,并只显示自定义帖子类型。为此,我得到了下面给出的代码。function remove_menus(){ $author = wp_get_current_user(); if(isset($author->roles[0])){ $current_role = $author->roles[0]; }else{ $current_role