add_menu_classes()
云策文档标注
概述
add_menu_classes() 函数用于为 WordPress 后台管理菜单的顶级菜单项添加 CSS 类,以增强样式控制。它通过遍历菜单数组,为第一个和最后一个菜单项添加 .menu-top-first 和 .menu-top-last 类。
关键要点
- 函数为顶级管理菜单项添加 CSS 类,包括 .menu-top-first 和 .menu-top-last。
- 参数 $menu 是必需的,表示管理菜单项的数组,函数返回添加类后的数组。
- 函数处理逻辑包括:Dashboard 菜单始终作为第一个项,分隔符影响类的分配,以及最后一个项的识别。
- 使用 apply_filters('add_menu_classes', $menu) 钩子允许过滤修改菜单数组。
- 相关函数包括 add_cssclass() 用于添加 CSS 类,apply_filters() 用于调用过滤器回调。
代码示例
function add_menu_classes( $menu ) {
$first_item = false;
$last_order = false;
$items_count = count( $menu );
$i = 0;
foreach ( $menu as $order => $top ) {
++$i;
if ( 0 === $order ) { // Dashboard is always shown/single.
$menu[0][4] = add_cssclass( 'menu-top-first', $top[4] );
$last_order = 0;
continue;
}
if ( str_starts_with( $top[2], 'separator' ) && false !== $last_order ) { // If separator.
$first_item = true;
$classes = $menu[ $last_order ][4];
$menu[ $last_order ][4] = add_cssclass( 'menu-top-last', $classes );
continue;
}
if ( $first_item ) {
$first_item = false;
$classes = $menu[ $order ][4];
$menu[ $order ][4] = add_cssclass( 'menu-top-first', $classes );
}
if ( $i === $items_count ) { // Last item.
$classes = $menu[ $order ][4];
$menu[ $order ][4] = add_cssclass( 'menu-top-last', $classes );
}
$last_order = $order;
}
/**
* Filters administration menu array with classes added for top-level items.
*
* @since 2.7.0
*
* @param array $menu Associative array of administration menu items.
*/
return apply_filters( 'add_menu_classes', $menu );
}注意事项
- 函数自 WordPress 2.7.0 版本引入,适用于后台管理菜单的样式定制。
- 使用 str_starts_with() 函数检查分隔符,确保在 PHP 8.0 或更高版本中兼容。
- 开发者可以通过 'add_menu_classes' 过滤器钩子修改返回的菜单数组。
原文内容
Adds CSS classes for top-level administration menu items.
Description
The list of added classes includes .menu-top-first and .menu-top-last.
Parameters
$menuarrayrequired-
The array of administration menu items.
Source
function add_menu_classes( $menu ) {
$first_item = false;
$last_order = false;
$items_count = count( $menu );
$i = 0;
foreach ( $menu as $order => $top ) {
++$i;
if ( 0 === $order ) { // Dashboard is always shown/single.
$menu[0][4] = add_cssclass( 'menu-top-first', $top[4] );
$last_order = 0;
continue;
}
if ( str_starts_with( $top[2], 'separator' ) && false !== $last_order ) { // If separator.
$first_item = true;
$classes = $menu[ $last_order ][4];
$menu[ $last_order ][4] = add_cssclass( 'menu-top-last', $classes );
continue;
}
if ( $first_item ) {
$first_item = false;
$classes = $menu[ $order ][4];
$menu[ $order ][4] = add_cssclass( 'menu-top-first', $classes );
}
if ( $i === $items_count ) { // Last item.
$classes = $menu[ $order ][4];
$menu[ $order ][4] = add_cssclass( 'menu-top-last', $classes );
}
$last_order = $order;
}
/**
* Filters administration menu array with classes added for top-level items.
*
* @since 2.7.0
*
* @param array $menu Associative array of administration menu items.
*/
return apply_filters( 'add_menu_classes', $menu );
}
Hooks
- apply_filters( ‘add_menu_classes’, array $menu )
-
Filters administration menu array with classes added for top-level items.
Changelog
| Version | Description |
|---|---|
| 2.7.0 | Introduced. |