函数文档

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.

Return

array The array of administration menu items with the CSS classes added.

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.