函数文档

_wp_link_page()

💡 云策文档标注

概述

_wp_link_page() 是 wp_link_pages() 的辅助函数,用于生成分页链接。它根据页面编号、固定链接设置和预览状态,构建并返回相应的 URL 字符串。

关键要点

  • 函数接受一个必需的整数参数 $i,表示页面编号。
  • 返回一个字符串类型的链接 URL。
  • 核心逻辑基于 get_permalink() 和固定链接选项,处理不同场景下的 URL 生成。
  • 在预览模式下,会通过 get_preview_post_link() 调整 URL。
  • 函数内部使用了多个 WordPress 核心函数,如 get_option()、add_query_arg() 和 user_trailingslashit()。

代码示例

function _wp_link_page( $i ) {
    global $wp_rewrite;
    $post       = get_post();
    $query_args = array();

    if ( 1 === $i ) {
        $url = get_permalink();
    } else {
        if ( ! get_option( 'permalink_structure' ) || in_array( $post->post_status, array( 'draft', 'pending' ), true ) ) {
            $url = add_query_arg( 'page', $i, get_permalink() );
        } elseif ( 'page' === get_option( 'show_on_front' ) && (int) get_option( 'page_on_front' ) === $post->ID ) {
            $url = trailingslashit( get_permalink() ) . user_trailingslashit( "$wp_rewrite->pagination_base/" . $i, 'single_paged' );
        } else {
            $url = trailingslashit( get_permalink() ) . user_trailingslashit( $i, 'single_paged' );
        }
    }

    if ( is_preview() ) {
        if ( ( 'draft' !== $post->post_status ) && isset( $_GET['preview_id'], $_GET['preview_nonce'] ) ) {
            $query_args['preview_id']    = wp_unslash( $_GET['preview_id'] );
            $query_args['preview_nonce'] = wp_unslash( $_GET['preview_nonce'] );
        }
        $url = get_preview_post_link( $post, $query_args, $url );
    }
    return '';
}

注意事项

  • 函数返回空字符串,实际使用中需结合 wp_link_pages() 或其他上下文。
  • 注意处理预览和非预览状态下的 URL 差异。
  • 依赖全局变量 $wp_rewrite,确保其已正确初始化。

📄 原文内容

Helper function for wp_link_pages() .

Parameters

$iintrequired
Page number.

Return

string Link.

Source

function _wp_link_page( $i ) {
	global $wp_rewrite;
	$post       = get_post();
	$query_args = array();

	if ( 1 === $i ) {
		$url = get_permalink();
	} else {
		if ( ! get_option( 'permalink_structure' ) || in_array( $post->post_status, array( 'draft', 'pending' ), true ) ) {
			$url = add_query_arg( 'page', $i, get_permalink() );
		} elseif ( 'page' === get_option( 'show_on_front' ) && (int) get_option( 'page_on_front' ) === $post->ID ) {
			$url = trailingslashit( get_permalink() ) . user_trailingslashit( "$wp_rewrite->pagination_base/" . $i, 'single_paged' );
		} else {
			$url = trailingslashit( get_permalink() ) . user_trailingslashit( $i, 'single_paged' );
		}
	}

	if ( is_preview() ) {

		if ( ( 'draft' !== $post->post_status ) && isset( $_GET['preview_id'], $_GET['preview_nonce'] ) ) {
			$query_args['preview_id']    = wp_unslash( $_GET['preview_id'] );
			$query_args['preview_nonce'] = wp_unslash( $_GET['preview_nonce'] );
		}

		$url = get_preview_post_link( $post, $query_args, $url );
	}

	return '<a href="' . esc_url( $url ) . '" class="post-page-numbers">';
}

Changelog

Version Description
3.1.0 Introduced.