wordpress模板中只获取上下篇文章的网址

 2016-10-19 09:40

最近一直在捣鼓wordpress模板,与z-blogPHP模板不同的是,WP模板教程很多,有些地方做的很让不会PHP的人头疼,就拿URL这个事情来说吧。

有时候,我们希望能直接调用某些项目的URL地址,比如文章上一页网址、下一页网址等,但所相关的这些函数全部是使用了如下包裹结果。导致了你使用时必须连外面的层套一起调用。

<a href="...">...</a>

这个问题没有一个很好的解决办法话,估计后面遇到这类问题就很头疼了。

我翻了下wordpress自定义的PHP函数,发现里面关于上下篇文章的函数是这样定义的:

function get_adjacent_post_link($format,$link,$in_same_term=false,$excluded_terms='',$previous=true,$taxonomy='category'){
    if ( $previous && is_attachment() )
        $post = get_post( get_post()->post_parent );
    else
        $post = get_adjacent_post( $in_same_term, $excluded_terms, $previous, $taxonomy );

    if ( ! $post ) {
        $output = '';
    } else {
        $title = $post->post_title;

        if ( empty( $post->post_title ) )
            $title = $previous ? __( 'Previous Post' ) : __( 'Next Post' );

        /** This filter is documented in wp-includes/post-template.php */
        $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.'">';
        $inlink = str_replace( '%title', $title, $link );
        $inlink = str_replace( '%date', $date, $inlink );
        $inlink = $string . $inlink . '</a>';

        $output = str_replace( '%link', $inlink, $format );
    }

    $adjacent = $previous ? 'previous' : 'next';

    return apply_filters("{$adjacent}_post_link",$output,$format,$link,$post,$adjacent);
}

不太明白这个function没有关系,我们只要看到里面有在链接网址的地方是插入了一个get_permalink($post)的值,而这个$post又等于一个get_adjacent_post()方法。那么我们就可以依葫芦画瓢也来定义两个类似的网址了:

$prev_post = get_adjacent_post('','',ture);
$next_post = get_adjacent_post('','',false);

这样,上下页面的网址信息我们就有了,不过当不存在上下页面时,这个值会是空的。那么我们就可以把这个值通过get_permalink()方法来调用了。完整的调用方式是这样的:

<?php 
    $prev_post = get_adjacent_post('','',ture);
    $next_post = get_adjacent_post('','',false);
?>
<?php if ($prev_post!=''):?>
<a href="<?php echo get_permalink($prev_post); ?>" class="btn btn-yellowgreen btn-lg" role="button">...</a>
<?php endif ?>

<?php if ($next_post!=''):?>
<a href="<?php echo get_permalink($next_post); ?>" class="btn btn-orange btn-lg" role="button">...</a>
<?php endif ?>

通过单独提取它们,我们可以自由的来定义A链接的样式和属性了,这才是我要的效果。

作者头像

作者:紫铜炉

自由博主,网页设计师。我关注科技产品和个人博客发展,注重用户体验和界面优化。