简而言之,没有一种简单的方法可以做到这一点。有一个解决方案,但有点难看。(见下文。)
一个较长的答案,我在这里包括这一点,希望它对某人有所帮助。
每当您碰巧使用内置WordPress函数时,实际查看该函数的功能是很有启发性的。如果希望修改输出,则尤其如此。
那么让我们追踪一下next_post_link
. 下面是该函数的来源wp-includes/link-template.php
.
<?php
/**
* Display next post link that is adjacent to the current post.
*
* @since 1.5.0
*
* @param string $format Optional. Link anchor format.
* @param string $link Optional. Link permalink format.
* @param bool $in_same_cat Optional. Whether link should be in a same category.
* @param array|string $excluded_categories Optional. Array or comma-separated list of excluded category IDs.
*/
function next_post_link($format=\'%link »\', $link=\'%title\', $in_same_cat = false, $excluded_categories = \'\') {
adjacent_post_link($format, $link, $in_same_cat, $excluded_categories, false);
}
不太令人兴奋。只是另一个函数的包装器:
<?php
function adjacent_post_link($format, $link, $in_same_cat = false, $excluded_categories = \'\', $previous = true) {
if ( $previous && is_attachment() )
$post = & get_post($GLOBALS[\'post\']->post_parent);
else
$post = get_adjacent_post($in_same_cat, $excluded_categories, $previous);
if ( !$post )
return;
$title = $post->post_title;
if ( empty($post->post_title) )
$title = $previous ? __(\'Previous Post\') : __(\'Next Post\');
$title = apply_filters(\'the_title\', $title, $post->ID);
$date = mysql2date(get_option(\'date_format\'), $post->post_date);
$rel = $previous ? \'prev\' : \'next\';
$string = \'<a href="\'.get_permalink($post).\'" rel="\'.$rel.\'">\';
$link = str_replace(\'%title\', $title, $link);
$link = str_replace(\'%date\', $date, $link);
$link = $string . $link . \'</a>\';
$format = str_replace(\'%link\', $link, $format);
$adjacent = $previous ? \'previous\' : \'next\';
echo apply_filters( "{$adjacent}_post_link", $format, $link );
}
故障点在这里:
<?php
if ( $previous && is_attachment() )
$post = & get_post($GLOBALS[\'post\']->post_parent);
else
$post = get_adjacent_post($in_same_cat, $excluded_categories, $previous);
if ( !$post )
return;
如果没有下一篇帖子(什么
get_adjacent_post
,函数只返回—绕过我们可能要挂接的任何过滤器。糟透了。
黑客PHP解决方案next_post_link
在您的主题中functions.php
文件接受所有相同的参数next_post_link
. 唯一的区别是在调用之前要启动一个输出缓冲区next_post_link
. 然后将缓冲区刷新到变量中——如果变量为空,则将其替换为占位符/禁用链接。
<?php
function wpse53800_next_post_link($format=\'%link »\', $link=\'%title\', $in_same_cat=false, $exclude_cats=\'\')
{
// start the output buffer
ob_start();
// call next_post_link
next_post_link($format, $link, $in_same_cat, $exclude_cats);
// flush the output buffer into $rv
$rv = ob_get_flush();
// if there\'s nothing in the buffer, you can add it
if(!$rv)
{
$rv = \'replace this with disabled link\';
}
echo $rv;
}
在主题的JS文件中,您可以选择下一个帖子链接容器,如果没有任何内容,可以添加占位符。
TwentyEleven的一个示例:
<script type="text/javascript">
jQuery(document).ready(function() {
var n = jQuery(\'span.nav-next\');
if(n.length && n.html() == \'\') {
n.html(\'replace this with disabled link\');
}
});
</script>