当没有下一篇文章时,如何显示灰色的NEXT_POST_LINK

时间:2012-05-31 作者:binaryorganic

如果没有下一篇或上一篇文章的链接,Wordpress会隐藏下一篇和上一篇文章的链接,但为了视觉一致性,我想在没有下一篇或上一篇文章的情况下提供一个灰色版本的链接。

我假设一个简单的if-else语句就可以了,但我并没有真正做PHP。有什么想法吗?

1 个回复
SO网友:chrisguitarguy

简而言之,没有一种简单的方法可以做到这一点。有一个解决方案,但有点难看。(见下文。)

一个较长的答案,我在这里包括这一点,希望它对某人有所帮助。

每当您碰巧使用内置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 &raquo;\', $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 &raquo;\', $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> 

结束

相关推荐

Thesis -style Navigation

我正在研究一个主题,我希望用户能够像论文一样选择要在主题选项页面中显示的页面。我已经在谷歌上搜索了几个小时的逆向工程论文,但还没有找到一个很好的解决方案。我想知道是否有人做过这件事或看过教程。