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_idintThe site ID. Default is the current site.linksarrayThe tabs to include with (label|url|cap) keys.selectedstringThe 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. |