add_menu_classes

The timeline below displays how wordpress function add_menu_classes has changed across different WordPress versions. If a version is not listed, refer to the next available version below.

WordPress Version: 6.4

/**
 * Adds CSS classes for top-level administration menu items.
 *
 * The list of added classes includes `.menu-top-first` and `.menu-top-last`.
 *
 * @since 2.7.0
 *
 * @param array $menu The array of administration menu items.
 * @return array The array of administration menu items with the CSS classes added.
 */
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 Version: 6.3

/**
 * Adds CSS classes for top-level administration menu items.
 *
 * The list of added classes includes `.menu-top-first` and `.menu-top-last`.
 *
 * @since 2.7.0
 *
 * @param array $menu The array of administration menu items.
 * @return array The array of administration menu items with the CSS classes added.
 */
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 Version: 6.1

/**
 * Adds CSS classes for top-level administration menu items.
 *
 * The list of added classes includes `.menu-top-first` and `.menu-top-last`.
 *
 * @since 2.7.0
 *
 * @param array $menu The array of administration menu items.
 * @return array The array of administration menu items with the CSS classes added.
 */
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 (0 === strpos($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) {
            $classes = $menu[$order][4];
            $menu[$order][4] = add_cssclass('menu-top-first', $classes);
            $first_item = false;
        }
        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 Version: 5.4

/**
 * @param array $menu
 * @return array
 */
function add_menu_classes($menu)
{
    $first = false;
    $lastorder = false;
    $i = 0;
    $mc = count($menu);
    foreach ($menu as $order => $top) {
        $i++;
        if (0 == $order) {
            // Dashboard is always shown/single.
            $menu[0][4] = add_cssclass('menu-top-first', $top[4]);
            $lastorder = 0;
            continue;
        }
        if (0 === strpos($top[2], 'separator') && false !== $lastorder) {
            // If separator.
            $first = true;
            $c = $menu[$lastorder][4];
            $menu[$lastorder][4] = add_cssclass('menu-top-last', $c);
            continue;
        }
        if ($first) {
            $c = $menu[$order][4];
            $menu[$order][4] = add_cssclass('menu-top-first', $c);
            $first = false;
        }
        if ($mc == $i) {
            // Last item.
            $c = $menu[$order][4];
            $menu[$order][4] = add_cssclass('menu-top-last', $c);
        }
        $lastorder = $order;
    }
    /**
     * Filters administration menus 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 Version: 5.3

/**
 * @param array $menu
 * @return array
 */
function add_menu_classes($menu)
{
    $first = false;
    $lastorder = false;
    $i = 0;
    $mc = count($menu);
    foreach ($menu as $order => $top) {
        $i++;
        if (0 == $order) {
            // dashboard is always shown/single
            $menu[0][4] = add_cssclass('menu-top-first', $top[4]);
            $lastorder = 0;
            continue;
        }
        if (0 === strpos($top[2], 'separator') && false !== $lastorder) {
            // if separator
            $first = true;
            $c = $menu[$lastorder][4];
            $menu[$lastorder][4] = add_cssclass('menu-top-last', $c);
            continue;
        }
        if ($first) {
            $c = $menu[$order][4];
            $menu[$order][4] = add_cssclass('menu-top-first', $c);
            $first = false;
        }
        if ($mc == $i) {
            // last item
            $c = $menu[$order][4];
            $menu[$order][4] = add_cssclass('menu-top-last', $c);
        }
        $lastorder = $order;
    }
    /**
     * Filters administration menus 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 Version: 5.1

/**
 * @param array $menu
 * @return array
 */
function add_menu_classes($menu)
{
    $first = $lastorder = false;
    $i = 0;
    $mc = count($menu);
    foreach ($menu as $order => $top) {
        $i++;
        if (0 == $order) {
            // dashboard is always shown/single
            $menu[0][4] = add_cssclass('menu-top-first', $top[4]);
            $lastorder = 0;
            continue;
        }
        if (0 === strpos($top[2], 'separator') && false !== $lastorder) {
            // if separator
            $first = true;
            $c = $menu[$lastorder][4];
            $menu[$lastorder][4] = add_cssclass('menu-top-last', $c);
            continue;
        }
        if ($first) {
            $c = $menu[$order][4];
            $menu[$order][4] = add_cssclass('menu-top-first', $c);
            $first = false;
        }
        if ($mc == $i) {
            // last item
            $c = $menu[$order][4];
            $menu[$order][4] = add_cssclass('menu-top-last', $c);
        }
        $lastorder = $order;
    }
    /**
     * Filters administration menus 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 Version: 4.6

/**
 *
 * @param array $menu
 * @return array
 */
function add_menu_classes($menu)
{
    $first = $lastorder = false;
    $i = 0;
    $mc = count($menu);
    foreach ($menu as $order => $top) {
        $i++;
        if (0 == $order) {
            // dashboard is always shown/single
            $menu[0][4] = add_cssclass('menu-top-first', $top[4]);
            $lastorder = 0;
            continue;
        }
        if (0 === strpos($top[2], 'separator') && false !== $lastorder) {
            // if separator
            $first = true;
            $c = $menu[$lastorder][4];
            $menu[$lastorder][4] = add_cssclass('menu-top-last', $c);
            continue;
        }
        if ($first) {
            $c = $menu[$order][4];
            $menu[$order][4] = add_cssclass('menu-top-first', $c);
            $first = false;
        }
        if ($mc == $i) {
            // last item
            $c = $menu[$order][4];
            $menu[$order][4] = add_cssclass('menu-top-last', $c);
        }
        $lastorder = $order;
    }
    /**
     * Filters administration menus 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 Version: 4.3

/**
 *
 * @param array $menu
 * @return array
 */
function add_menu_classes($menu)
{
    $first = $lastorder = false;
    $i = 0;
    $mc = count($menu);
    foreach ($menu as $order => $top) {
        $i++;
        if (0 == $order) {
            // dashboard is always shown/single
            $menu[0][4] = add_cssclass('menu-top-first', $top[4]);
            $lastorder = 0;
            continue;
        }
        if (0 === strpos($top[2], 'separator') && false !== $lastorder) {
            // if separator
            $first = true;
            $c = $menu[$lastorder][4];
            $menu[$lastorder][4] = add_cssclass('menu-top-last', $c);
            continue;
        }
        if ($first) {
            $c = $menu[$order][4];
            $menu[$order][4] = add_cssclass('menu-top-first', $c);
            $first = false;
        }
        if ($mc == $i) {
            // last item
            $c = $menu[$order][4];
            $menu[$order][4] = add_cssclass('menu-top-last', $c);
        }
        $lastorder = $order;
    }
    /**
     * Filter administration menus 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 Version: 3.9

function add_menu_classes($menu)
{
    $first = $lastorder = false;
    $i = 0;
    $mc = count($menu);
    foreach ($menu as $order => $top) {
        $i++;
        if (0 == $order) {
            // dashboard is always shown/single
            $menu[0][4] = add_cssclass('menu-top-first', $top[4]);
            $lastorder = 0;
            continue;
        }
        if (0 === strpos($top[2], 'separator') && false !== $lastorder) {
            // if separator
            $first = true;
            $c = $menu[$lastorder][4];
            $menu[$lastorder][4] = add_cssclass('menu-top-last', $c);
            continue;
        }
        if ($first) {
            $c = $menu[$order][4];
            $menu[$order][4] = add_cssclass('menu-top-first', $c);
            $first = false;
        }
        if ($mc == $i) {
            // last item
            $c = $menu[$order][4];
            $menu[$order][4] = add_cssclass('menu-top-last', $c);
        }
        $lastorder = $order;
    }
    /**
     * Filter administration menus 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 Version: 3.7

function add_menu_classes($menu)
{
    $first = $lastorder = false;
    $i = 0;
    $mc = count($menu);
    foreach ($menu as $order => $top) {
        $i++;
        if (0 == $order) {
            // dashboard is always shown/single
            $menu[0][4] = add_cssclass('menu-top-first', $top[4]);
            $lastorder = 0;
            continue;
        }
        if (0 === strpos($top[2], 'separator') && false !== $lastorder) {
            // if separator
            $first = true;
            $c = $menu[$lastorder][4];
            $menu[$lastorder][4] = add_cssclass('menu-top-last', $c);
            continue;
        }
        if ($first) {
            $c = $menu[$order][4];
            $menu[$order][4] = add_cssclass('menu-top-first', $c);
            $first = false;
        }
        if ($mc == $i) {
            // last item
            $c = $menu[$order][4];
            $menu[$order][4] = add_cssclass('menu-top-last', $c);
        }
        $lastorder = $order;
    }
    return apply_filters('add_menu_classes', $menu);
}