有条件地改变Wordpress中的next_posts_link()/ previous_posts_link()

时间:2013-07-12 14:03:27

标签: php wordpress pagination posts

我有一个我正在处理的存档模板,在页面底部我正在使用

<?php next_posts_link("&laquo; Older Posts", $wp_query->max_num_pages); ?>
<?php previous_posts_link("Newer Posts &raquo;", $wp_query->max_num_pages); ?>

显示分页。

这些功能似乎检查是否有新的/旧的帖子要显示,并有条件地确定是否显示上一个/下一个链接。

我想要实现的行为是,如果在给定页面上没有显示较旧/较新的帖子,那么仍然会创建一个锚标记,但是没有给出一个href属性并给出一个单独的类。

即。 - 在包含最新帖子的页面上,我想要显示

<a class="previous-posts" href="THE_PREVIOUS_POSTS_PAGE">&laquo; Older Posts</a>
<a class="next-posts disabled">Newer Posts &raquo;</a>

而不仅仅是“旧帖子”链接,旁边没有任何内容(出于布局原因)。

关于我可以编辑默认函数的行为或我如何编写自己的函数的任何想法?

更新:

迈克刘易斯的答案对于Next_posts来说是完美的,但我似乎仍然搞砸了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 ?>">&laquo; Newer Posts</a><?php
} else {
    // url was not found, do your alternative link here
    ?><a class="disabled">&laquo; 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 &raquo; </a><?php
} else {
    // url was not found, do your alternative link here
    ?><a class="disabled">Older Posts &raquo; </a><?php
} ?>

第一个函数始终显示已禁用的链接,而第二个函数的行为与预期完全相同。知道这里有什么?

1 个答案:

答案 0 :(得分:3)

这很棘手。如果您查看previous and next_posts_link()函数的核心代码,您会找到next_posts()previous_posts()。它们位于第1552行的/wp-includes/link-template.php附近。

如果您使用next_posts($wp_query->max_num_pages, false),则第二个参数为$echo,我们不需要,因此我们可以检查值:

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
}

编辑:previous_posts($echo = true)有一个参数,所以在这种情况下:

previous_posts(false)