函数文档

network_edit_site_nav()

💡 云策文档标注

概述

network_edit_site_nav() 函数用于输出网络管理中“编辑站点”页面的选项卡式导航 HTML。它通过参数控制链接显示,并支持过滤钩子自定义链接。

关键要点

  • 函数输出网络“编辑站点”界面的导航 HTML,包含默认链接如“信息”、“用户”、“主题”和“设置”。
  • 接受可选参数 $args,可指定 blog_id、links 数组和 selected 链接 ID,默认值基于当前站点和 GET 参数。
  • 使用 apply_filters('network_edit_site_nav_links', $links) 钩子允许开发者过滤导航链接。
  • 链接显示基于用户权限(current_user_can()),并自动高亮选中项或当前页面。
  • 内部使用 wp_parse_args() 合并参数,add_query_arg() 构建 URL,并转义输出以确保安全。

代码示例

// 示例调用 network_edit_site_nav()
network_edit_site_nav( array(
    'blog_id' => 2,
    'selected' => 'site-users'
) );

注意事项

  • 默认链接数组包含 label、url 和 cap 键,url 相对于 network_admin_url()。
  • 函数在 WordPress 4.6.0 版本引入,使用时需确保环境兼容。
  • 输出 HTML 包含 nav-tab 类,选中项添加 nav-tab-active 类和 aria-current 属性。

📄 原文内容

Outputs the HTML for a network’s “Edit Site” tabular interface.

Parameters

$argsarrayoptional
Array or string of Query parameters.

  • blog_id int
    The site ID. Default is the current site.
  • links array
    The tabs to include with (label|url|cap) keys.
  • selected string
    The ID of the selected link.

Default:array()

Source

function network_edit_site_nav( $args = array() ) {

	/**
	 * Filters the links that appear on site-editing network pages.
	 *
	 * Default links: 'site-info', 'site-users', 'site-themes', and 'site-settings'.
	 *
	 * @since 4.6.0
	 *
	 * @param array $links {
	 *     An array of link data representing individual network admin pages.
	 *
	 *     @type array $link_slug {
	 *         An array of information about the individual link to a page.
	 *
	 *         $type string $label Label to use for the link.
	 *         $type string $url   URL, relative to `network_admin_url()` to use for the link.
	 *         $type string $cap   Capability required to see the link.
	 *     }
	 * }
	 */
	$links = apply_filters(
		'network_edit_site_nav_links',
		array(
			'site-info'     => array(
				'label' => __( 'Info' ),
				'url'   => 'site-info.php',
				'cap'   => 'manage_sites',
			),
			'site-users'    => array(
				'label' => __( 'Users' ),
				'url'   => 'site-users.php',
				'cap'   => 'manage_sites',
			),
			'site-themes'   => array(
				'label' => __( 'Themes' ),
				'url'   => 'site-themes.php',
				'cap'   => 'manage_sites',
			),
			'site-settings' => array(
				'label' => __( 'Settings' ),
				'url'   => 'site-settings.php',
				'cap'   => 'manage_sites',
			),
		)
	);

	// Parse arguments.
	$parsed_args = wp_parse_args(
		$args,
		array(
			'blog_id'  => isset( $_GET['blog_id'] ) ? (int) $_GET['blog_id'] : 0,
			'links'    => $links,
			'selected' => 'site-info',
		)
	);

	// Setup the links array.
	$screen_links = array();

	// Loop through tabs.
	foreach ( $parsed_args['links'] as $link_id => $link ) {

		// Skip link if user can't access.
		if ( ! current_user_can( $link['cap'], $parsed_args['blog_id'] ) ) {
			continue;
		}

		// Link classes.
		$classes = array( 'nav-tab' );

		// Aria-current attribute.
		$aria_current = '';

		// Selected is set by the parent OR assumed by the $pagenow global.
		if ( $parsed_args['selected'] === $link_id || $link['url'] === $GLOBALS['pagenow'] ) {
			$classes[]    = 'nav-tab-active';
			$aria_current = ' aria-current="page"';
		}

		// Escape each class.
		$esc_classes = implode( ' ', $classes );

		// Get the URL for this link.
		$url = add_query_arg( array( 'id' => $parsed_args['blog_id'] ), network_admin_url( $link['url'] ) );

		// Add link to nav links.
		$screen_links[ $link_id ] = '<a href="' . esc_url( $url ) . '" id="' . esc_attr( $link_id ) . '" class="' . $esc_classes . '"' . $aria_current . '>' . esc_html( $link['label'] ) . '</a>';
	}

	// All done!
	echo '<nav class="nav-tab-wrapper wp-clearfix" aria-label="' . esc_attr__( 'Secondary menu' ) . '">';
	echo implode( '', $screen_links );
	echo '</nav>';
}

Hooks

apply_filters( ‘network_edit_site_nav_links’, array $links )

Filters the links that appear on site-editing network pages.

Changelog

Version Description
4.6.0 Introduced.