Important
This post is not about adding WP-PageNavi plugin, but how to get it to work on author page.
Let say that we use in our WordPress 2 post types, one ‘post’ to write posts, and second ‘articles’ to write some articles…
Now, on author page we wanna list all posts and articles written author, show them in separate sections, and display cute pagination under sections to don’t load hundrets entries on one page.
We will query them using query_posts
, as follow:
$paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1; // Query articles of author query_posts( array( 'post_type' => 'articles', 'post_status' => 'publish', 'author' => $curauth->ID, 'paged' => $paged ) ); // ... some code to loop and print // Query posts of author query_posts( array( 'post_type' => 'post', 'post_status' => 'publish', 'author' => $curauth->ID, 'paged' => $paged ) ); // ... some code to loop and print |
And everything should work fine until quantity of posts is bigger then articles, I mean pagination will work fine…
But if author will have for example written 5 posts and 15 articles, and we will try to get on page no. 2 – will see unfriendly 404 page!
Why?!
Because author main query is just for posts, and parameter max_num_pages
does not allow second page – so we need to extend author main query with ‘articles’ post type.
Add new function to your “functions.php” template file, and assign to action pre_get_posts
function custom_author_archive( &$query ) { if ($query->is_author) $query->set( 'post_type', array( 'post', 'articles' ) ); } add_action( 'pre_get_posts', 'custom_author_archive' ); |
Now, if we will enter to author page, will see strange thing, pagination working fine but both loops, display both ‘post’ and ‘articles’… it happen like this because our added action override parametres in query_posts
call.
So, if author main query allow us to get on page number 2, we dont need this action anymore to modify other queries too…
To do this add in top of “author.php” template file instruction to remove this action from any other calls:
remove_action('pre_get_posts', 'custom_author_archive'); |
Refresh your author page, and enjoy WORKING pagination!