The question:
I have a custom post type called ‘projects’ (pastebin) and I have a page called Projects set up in my dashboard which is set to display the Projects template. (pastebin)
The problem is when I use WP_PageNavi to incorporate pagination and click on page 2, I get an error 404. I read somewhere that this is because custom post types and pages can’t have the same name. And I’ve found that to be true because I tried changing the page name to “Projects 2” and it worked.
But when I change the name of the custom post type, that gets reflected in the url. So if I change the custom post type to ‘projects2’ instead of just ‘projects’, the url now looks like this: mysite.com/projects2/single-post
I have my custom permalinks set to /%category%/%postname%/ by the way.
Likewise, I can’t change the name of the page to ‘Projects 2’ for aesthetic reasons.
So how would I get around this? This has been driving me crazy for many hours. I would really appreciate any helpful advice!
The Solutions:
Below are the methods you can try. The first solution is probably the best. Try others if the first one doesn’t work. Senior developers aren’t just copying/pasting – they read the methods carefully & apply them wisely to each case.
Method 1
As you can see in the rewrite analyzer, /projects/page/2/
sets projects=page&page=/2
instead of pagename=projects&paged=2
as we would like. So you just need to add a rewrite rule for this special case (in the register_projects()
function, after you register your custom post type, would be a good place):
add_rewrite_rule( 'projects/page/([0-9]+)/?$', 'index.php?pagename=projects&paged=$matches[1]', 'top' );
Remember to flush your rewrite rules, by visiting the Permalinks page or by some other way.
Method 2
Its a better way, you build your own paginatin:
echo paginate_links(array(
'current' => 5,
'total' => 9,
'prev_text' => '« Prev'
));
or via custom solutions, see this 2 posts:
- http://wpengineer.com/2078/custom-pagination-without-wordpress-plugins/
- http://wpengineer.com/2133/wordpress-pagination-again/
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0