函数文档

get_posts_nav_link()

💡 云策文档标注

概述

get_posts_nav_link() 函数用于检索文章分页导航链接,包括上一页和下一页的链接。它仅在非单篇文章页面(如存档页)中工作,并允许通过参数自定义分隔符和链接文本。

关键要点

  • 函数返回一个字符串,包含上一页和下一页的导航链接,适用于分页查询。
  • 参数 $args 可选,可自定义分隔符(sep)、上一页链接文本(prelabel)和下一页链接文本(nxtlabel)。
  • 仅在 is_singular() 返回 false 时生成导航链接,确保只在列表页面显示。
  • 内部使用 get_previous_posts_link() 和 get_next_posts_link() 构建链接,并处理分隔符逻辑。

代码示例

function get_posts_nav_link( $args = array() ) {
    global $wp_query;

    $return = '';

    if ( ! is_singular() ) {
        $defaults = array(
            'sep'      => ' — ',
            'prelabel' => __( '« Previous Page' ),
            'nxtlabel' => __( 'Next Page »' ),
        );
        $args     = wp_parse_args( $args, $defaults );

        $max_num_pages = $wp_query->max_num_pages;
        $paged         = get_query_var( 'paged' );

        // Only have sep if there's both prev and next results.
        if ( $paged = $max_num_pages ) {
            $args['sep'] = '';
        }

        if ( $max_num_pages > 1 ) {
            $return  = get_previous_posts_link( $args['prelabel'] );
            $return .= preg_replace( '/&([^#])(?![a-z]{1,8};)/i', '&$1', $args['sep'] );
            $return .= get_next_posts_link( $args['nxtlabel'] );
        }
    }
    return $return;
}

注意事项

  • 函数依赖于全局 $wp_query 对象,确保在正确的查询上下文中调用。
  • 分隔符仅在同时存在上一页和下一页链接时显示,否则为空。
  • 链接文本默认使用翻译函数 __(),支持国际化。

📄 原文内容

Retrieves the post pages link navigation for previous and next pages.

Parameters

$argsstring|arrayoptional
Arguments to build the post pages link navigation.

  • sep string
    Separator character. Default '—'.
  • prelabel string
    Link text to display for the previous page link.
    Default ‘« Previous Page’.
  • nxtlabel string
    Link text to display for the next page link.
    Default ‘Next Page »’.

Default:array()

Return

string The posts link navigation.

Source

function get_posts_nav_link( $args = array() ) {
	global $wp_query;

	$return = '';

	if ( ! is_singular() ) {
		$defaults = array(
			'sep'      => ' — ',
			'prelabel' => __( '« Previous Page' ),
			'nxtlabel' => __( 'Next Page »' ),
		);
		$args     = wp_parse_args( $args, $defaults );

		$max_num_pages = $wp_query->max_num_pages;
		$paged         = get_query_var( 'paged' );

		// Only have sep if there's both prev and next results.
		if ( $paged < 2 || $paged >= $max_num_pages ) {
			$args['sep'] = '';
		}

		if ( $max_num_pages > 1 ) {
			$return  = get_previous_posts_link( $args['prelabel'] );
			$return .= preg_replace( '/&([^#])(?![a-z]{1,8};)/i', '&$1', $args['sep'] );
			$return .= get_next_posts_link( $args['nxtlabel'] );
		}
	}
	return $return;
}

Changelog

Version Description
2.8.0 Introduced.