Reputation: 529
I have an archive template I'm working on, and at the bottom of the page I'm using
<?php next_posts_link("« Older Posts", $wp_query->max_num_pages); ?>
<?php previous_posts_link("Newer Posts »", $wp_query->max_num_pages); ?>
to display the pagination.
These functions, it seems, check whether or not there are newer/older posts to display, and conditionally determines whether or not to display the prev/next links.
The behavior I am trying to achieve is that if there are not older/newer posts to be displayed on a given page, That an anchor tag is still created, but not given an href attribute and given a separate class.
i.e. - on a page that contains the most recent posts, I want to show
<a class="previous-posts" href="THE_PREVIOUS_POSTS_PAGE">« Older Posts</a>
<a class="next-posts disabled">Newer Posts »</a>
instead of just an "Older Posts" link with nothing next to it (for layout reasons).
Any ideas about either where I can edit the behavior of the default functions or how I can craft my own?
UPDATE:
Mike Lewis' answer was perfect for Next_posts, but I still seem to have messed up previous_posts.
<?php if ($prev_url = previous_posts($wp_query->max_num_pages, false)){
// next_posts url was found, create link with this url:
?><a href="<?= $prev_url ?>">« Newer Posts</a><?php
} else {
// url was not found, do your alternative link here
?><a class="disabled">« Newer Posts</a><?php
} ?>
<?php if ($next_url = next_posts($wp_query->max_num_pages, false)){
// next_posts url was found, create link with this url:
?><a href="<?= $next_url ?>">Older Posts » </a><?php
} else {
// url was not found, do your alternative link here
?><a class="disabled">Older Posts » </a><?php
} ?>
The first function always displays the disabled link, while the second behaves exactly as expected. Any idea what's up here?
Upvotes: 1
Views: 2616
Reputation: 4302
This was tricky. If you look at the core code for the previous and next_posts_link()
functions, you'll find next_posts()
and previous_posts()
. These are in /wp-includes/link-template.php
around line 1552.
If you use next_posts($wp_query->max_num_pages, false)
, the second paramater is $echo
, which we don't want, so we can check the value:
if ($next_url = next_posts($wp_query->max_num_pages, false)){
// next_posts url was found, create link with this url:
?><a href="<?= $next_url ?>">Next Posts</a><?php
} else {
// url was not found, do your alternative link here
?><a href="#" class="disabled">Next Posts</a><?php
}
EDIT: previous_posts($echo = true)
takes one parameter, so in this case:
previous_posts(false)
.
Upvotes: 3