仅获取上一页/下一页链接(不获取标题、<a>等)

时间:2012-07-08 作者:Ben Everard

我目前使用以下方法获取上一个/下一个博客页面链接:

<?php previous_post_link( \'%link\', \'%title\' ); ?>
然而,这包括外部元素、名称等,我只想要链接,例如。http://domain.com/blog/page/2

是否有我认为不符合我要求的功能?

Clarification

<这是下一个博客页面(不是博客帖子)的链接,不是锚元素,谢谢

6 个回复
SO网友:chrisguitarguy

Short answer: get_previous_posts_page_link 是您想要的功能:

<?php if($url = get_previous_posts_page_link()): ?>
  do stuff with $url
<?php endif; ?>
Longer answer: 遵循代码。

previous_posts_link 呼叫get_previous_posts_link.

<?php
/**
 * Display the previous posts page link.
 *
 * @since 0.71
 * @uses get_previous_posts_link()
 *
 * @param string $label Optional. Previous page link text.
 */
function previous_posts_link( $label = null ) {
    echo get_previous_posts_link( $label );
}
get_previous_posts_link 呼叫previous_posts 获取链接URI本身。

<?php
/**
 * Return the previous posts page link.
 *
 * @since 2.7.0
 *
 * @param string $label Optional. Previous page link text.
 * @return string|null
 */
function get_previous_posts_link( $label = null ) {
    global $paged;

    if ( null === $label )
        $label = __( \'&laquo; Previous Page\' );

    if ( !is_single() && $paged > 1 ) {
        $attr = apply_filters( \'previous_posts_link_attributes\', \'\' );
        return \'<a href="\' . previous_posts( false ) . "\\" $attr>". preg_replace( \'/&([^#])(?![a-z]{1,8};)/i\', \'&#038;$1\', $label ) .\'</a>\';
    }
}
previous_posts 只是您要查找的函数的一个小包装器:get_previous_posts_page_link

<?php
/**
 * Display or return the previous posts page link.
 *
 * @since 0.71
 *
 * @param boolean $echo Optional. Echo or return;
 */
function previous_posts( $echo = true ) {
    $output = esc_url( get_previous_posts_page_link() );

    if ( $echo )
        echo $output;
    else
        return $output;
}
我们想要的功能:

<?php
/**
 * Retrieve previous posts page link.
 *
 * Will only return string, if not on a single page or post.
 *
 * Backported to 2.0.10 from 2.1.3.
 *
 * @since 2.0.10
 *
 * @return string|null
 */
function get_previous_posts_page_link() {
    global $paged;

    if ( !is_single() ) {
        $nextpage = intval($paged) - 1;
        if ( $nextpage < 1 )
            $nextpage = 1;
        return get_pagenum_link($nextpage);
    }
}
我包括了所有这些,以说明如何通过查看核心来找到答案。工具,如ack 可以帮助您开始:

shell$ cd /path/to/your/wordpress/install
shell$ ack "function previous_posts_link"
一般来说,WordPress非常擅长确保函数只做一件事。从更广泛的功能(ala)进行跟踪previous_posts_link 和其他模板标签)返回到更基本的函数通常是学习一些很酷的东西并找到答案的好方法。

SO网友:Ben

<?php get_previous_posts_link(); ?>
显然,您将其存储在一个数组中,如

<?php $prev = get_previous_posts_link(); ?>

SO网友:Liam Jay

如果不需要任何其他元素,则可以将以下代码添加到主题的页面模板中。然后,您的链接将被分配到$prevID和$nextID,您可以随意使用它们。

<?php
$pagelist = get_pages(\'sort_column=menu_order&sort_order=asc\');
$pages = array();
foreach ($pagelist as $page) {
$pages[] += $page->ID;
}

$current = array_search($post->ID, $pages);
$prevID = $pages[$current-1];
$nextID = $pages[$current+1];
?>

SO网友:Ben

与@liam jay相似,但只获得一个帖子

$prev_post = get_previous_post();
empty($prev_post) or $link = $prev_post->guid;
我认为这应该很好,但没有经过测试。

SO网友:Stefan

this is working:

    <?php
    $next_post_url = get_permalink( get_adjacent_post(false,\'\',false)->ID );
    $previous_post_url = get_permalink( get_adjacent_post(false,\'\',true)->ID );        
    ?>
SO网友:amarinediary

为了子孙后代。previous_posts()next_posts() 就这样吧。

echo previous_posts( 0, false );
echo next_posts( 0, false );

结束

相关推荐

Format HTTP links

我有一个自定义页面模板,可以在以下位置的WP页面上创建xml提要:http://example.com/xml/我试图通过Google Maps访问此xml文档,但似乎我需要实际的文件名,例如。com/xml/example。xml如何添加。链接末尾的xml文件扩展名http://example.com/xml/ ?EDIT:我在主题中使用一个页面模板来显示XML的输出。XML部分可能与此无关。归根结底,我想应该是如何从页面模板(如/example)中指定特定的文件扩展名。xml