【问题标题】:Display 3 posts per page order by published date DESC in Wordpress在 Wordpress 中按发布日期 DESC 显示每页订单 3 个帖子
【发布时间】:2021-05-17 00:11:32
【问题描述】:

我正在按发布日期 DESC 显示我的自定义帖子 3 每页顺序。有 8 个帖子,我想要的只是在第 1 页,它应该显示帖子 8 和 7,而不是 8、7、6。 所以分页应该是:

第 1 页:8,7

第 2 页:6,5,4

第 3 页:3,2,1

function get_paginated_links( $query ) {
    $currentPage = max( 1, get_query_var( 'paged', 1 ) );
    $pages = range( max( 1, $query->max_num_pages ), 1 );
    return array_map( function( $page ) use ( $currentPage ) {
        return ( object ) array(
            "isCurrent" => $page == $currentPage,
            "page" => $page,
            "url" => get_pagenum_link( $page )
        );
    }, $pages );
}

$paged = ( get_query_var( 'paged' ) ) ? absint( get_query_var( 'paged' ) ) : 1;

$posts_per_page = 3;

$the_query = new WP_Query(
        array(
            'posts_per_page' => $posts_per_page,
            'paged' => $paged,
            'orderby'=> 'publish_date',
            'order' => 'DESC'
        )
    );

foreach( get_paginated_links( $the_query ) as $index => $link ) :
echo the_content();
endwhile;

上面的代码在第一页显示了post 8,7,6。我该如何解决?

【问题讨论】:

    标签: php wordpress pagination wordpress-hook


    【解决方案1】:

    您可以使用post__in 参数仅显示第 1 页的 8,7。检查以下代码。

    function get_paginated_links( $query ) {
        $currentPage = max( 1, get_query_var( 'paged', 1 ) );
        $pages = range( max( 1, $query->max_num_pages ), 1 );
        return array_map( function( $page ) use ( $currentPage ) {
            return ( object ) array(
                "isCurrent" => $page == $currentPage,
                "page"      => $page,
                "url"       => get_pagenum_link( $page )
            );
        }, $pages );
    }
    
    $paged = ( get_query_var( 'paged' ) ) ? absint( get_query_var( 'paged' ) ) : 1;
    
    $posts_per_page = 3;
    
    $args = array(
        'posts_per_page' => $posts_per_page,
        'paged'          => $paged,
        'orderby'        => 'publish_date',
        'order'          => 'DESC'
    );
    
    if( $paged == 1 ){
        $args['post__in'] = array( post_id_of_8, post_id_of_7 );
    }
    
    $the_query = new WP_Query( $args );
    
    foreach( get_paginated_links( $the_query ) as $index => $link ) :
        echo the_content();
    endwhile;
    

    有用的链接

    【讨论】:

    • 感谢您的回复。我确实希望它是动态的。当有 7 个帖子时,第 1 页应该只显示第 7 个帖子。这实际上与正常的分页相反,最后一页显示剩余的帖子。而我的在第 1 页显示剩余部分。
    • 但是您在问题中说要在首页显示8,7
    • 你提醒了我一些东西。我做了一些更改并暂时使用它。谢谢
    【解决方案2】:

    我最终这样做了。它绝对可以改进。我现在就拿这个。

    function get_paginated_links( $query ) {
        $currentPage = max( 1, get_query_var( 'paged', 1 ) );
        $pages = range( max( 1, $query->max_num_pages ), 1 );
        return array_map( function( $page ) use ( $currentPage ) {
            return ( object ) array(
                "isCurrent" => $page == $currentPage,
                "page"      => $page,
                "url"       => get_pagenum_link( $page )
            );
        }, $pages );
    }
    
    $paged = ( get_query_var( 'paged' ) ) ? absint( get_query_var( 'paged' ) ) : 1;
    
    $posts_per_page = 3;
    
    $the_query_temp = new WP_Query(
        array(
            'posts_per_page' => $posts_per_page,
            'orderby'=> 'publish_date',
            'order' => 'ASC'
        )
    );
    $max_num_pages = $the_query_temp->max_num_pages;
    $reverse_paged = $max_num_pages + 1 - $paged;
    
    $the_query_temp = new WP_Query(
        array(
            'posts_per_page' => $posts_per_page,
            'paged' => $reverse_paged,
            'orderby'=> 'publish_date',
            'order' => 'ASC'
        )
    );
    
    $posts_to_show = array();
    if ($the_query_temp->have_posts() ): 
        while ($the_query_temp->have_posts() ): $the_query_temp->the_post();
            $posts_to_show[] = $post->ID;
        endwhile;
    endif;
    wp_reset_postdata(); 
    
    $the_query = new WP_Query(
        array(
            'posts_per_page' => $posts_per_page,
            'post__in' => $posts_to_show,
            'orderby'=> 'publish_date',
            'order' => 'DESC'
        )
    );
    
    
    foreach( get_paginated_links( $the_query ) as $index => $link ) :
        echo the_content();
    endwhile;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-22
      • 2012-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-13
      相关资源
      最近更新 更多