Wordpress custom loop pagination

与世无争的帅哥 提交于 2020-01-24 00:45:30

问题


I coded custom loop within multiple loops structure:

$q = get_posts( $args );
// Run your loop
echo '<div class="row">';
$i = 0; 
foreach ( $q as $post ) : setup_postdata( $post );
  $i++; 
  if ($i%4==0)
    echo '</div><div class="row">';
  get_template_part('loop');
endforeach;
wp_bs_pagination();
wp_reset_postdata();

except for I added wp_bs_pagination(); to load pagination. It only repeat the same set of posts o every page. Any suggestions?


回答1:


Do not use get_posts() for paginated queries. get_posts works well for non-paginated queries, but not paginated queries.

The issue is, get_posts only returns the $posts property from WP_Query and not the complete object. Furthermore, get_posts() passes 'no_found_rows'=> true to WP_Query which legally breaks pagination.

Because get_posts uses WP_Query, we might as well use WP_Query which returns everything we need to paginate our query. Just remember, we need to add the paged parameter to the query in order to page it

We can rewrite your query as follow

$args= [
    'paged' => get_query_var( 'paged' ),
    // Add any additional arguments here
];
$q = new WP_Query( $args );
// Run your loop

if( $q->have_posts() ) { 

    echo '<div class="row">';
    $i=0; 

    while ( $q->have_posts() ) {
    $q->the_post();
        $i++; 
        if($i%4==0)
            echo '</div><div class="row">';

        get_template_part('loop');

    }
    wp_bs_pagination();
    wp_reset_postdata();
}

You will need to somehow pass $q->max_num_pages to wp_bs_pagination() to set pagination to your custom query, but I do not know the function, so I cannot give you an exact solution on this.




回答2:


Try this, paste this in your functions.php

function custom_pagination() {
global $wp_query;
$big = 999999999; // need an unlikely integer
$pages = paginate_links( array(
        'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
        'format' => '?paged=%#%',
        'current' => max( 1, get_query_var('paged') ),
        'total' => $wp_query->max_num_pages,
        'prev_next' => false,
        'type'  => 'array',
        'prev_next'   => TRUE,
        'prev_text'    => __('«'),
        'next_text'    => __('»'),
    ) );
    if( is_array( $pages ) ) {
        $paged = ( get_query_var('paged') == 0 ) ? 1 : get_query_var('paged');
        echo '<ul class="pagination">';
        foreach ( $pages as $page ) {
                echo "<li>$page</li>";
        }
       echo '</ul>';
    }

}

and then use the function custom_pagination()

Got the solution from here: http://www.ordinarycoder.com/paginate_links-class-ul-li-bootstrap/



来源:https://stackoverflow.com/questions/34769194/wordpress-custom-loop-pagination

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!