WordPress.org

Make WordPress Core

Ticket #21408: add_admin_menu_separator.php

File add_admin_menu_separator.php, 2.9 KB (added by soficgr, 21 months ago)
Line 
1<?php
2/**
3 * How to use - add at theme function.php
4
5        add_action('admin_menu','my_admin_menu_separator');
6        function my_admin_menu_separator() {
7                add_admin_menu_separator(10);
8                add_admin_menu_separator(34);
9                add_admin_menu_separator(20);
10                add_admin_menu_separator(3);
11                add_admin_menu_separator(2);
12                add_admin_menu_separator(20);
13                add_admin_menu_separator(30);
14                add_admin_menu_separator(40);
15                remove_admin_menu_separator(4);
16                //add_admin_menu_separator(4);
17                //add_admin_menu_separator(8);
18                remove_admin_menu_separator(8);
19                add_admin_menu_separator(11);
20                add_admin_menu_separator(61);
21                add_admin_menu_separator(12);
22                add_admin_menu_separator(130);
23                add_admin_menu_separator(240);
24                add_admin_menu_separator(300);
25                add_admin_menu_separator(220);
26                //remove_admin_menu_separator(4);
27                //var_dump($GLOBALS['menu']);
28                //exit;
29        }
30 */ 
31
32
33/**
34 * Add Top Level menu separator
35 * @link http://codex.wordpress.org/Administration_Menus
36 * @use global $menu
37 * @param int $position separator position, only empty menu position are acceptable
38 * @param string $capability The capability required for this menu to be displayed to the user (default 'read').
39 * the last separator capability is always read
40 */
41function add_admin_menu_separator( $position, $capability = 'read' ) {
42        global $menu;
43        $_separator_count = 0;
44
45        if( isset( $menu[$position] ) )
46                return;
47
48         //add new separator
49        $menu[$position] = array('',$capability,"separator_new",'','wp-menu-separator' );
50        ksort( $menu );
51       
52        //normalize separator count
53        foreach( $menu as $_offset => $_section){
54                if ( substr( $_section[2],0,9 ) == 'separator' ) {
55                        $_separator_count++;
56                        $menu[$_offset][2]= "separator{$_separator_count}";
57                }
58        }
59       
60        //last separator
61        $_last_menu_key = array_pop( array_keys( $menu ) );
62        if( substr( $menu[$_last_menu_key][2],0,9 ) == 'separator' ){
63                   $menu[$_last_menu_key][2] ='separator-last';
64        }
65
66}
67
68/**
69 * Remove Top Level Menu Separator
70 * This function does not remove the last separator
71 * @link http://codex.wordpress.org/Administration_Menus
72 * @use global $menu
73 * @param int $position separator position
74 * @return bool true | false
75 */
76function remove_admin_menu_separator( $position ) {
77        global $menu;
78        $_separator_count = 0;
79
80        if( isset( $menu[$position] ) && $menu[$position][2] !== 'separator-last' &&  substr( $menu[$position][2],0,9 ) == 'separator'  ){
81                unset( $menu[$position] );
82                ksort( $menu );
83               
84                //normalize separator count
85                foreach( $menu as $_offset => $_section){
86                        if ( substr( $_section[2],0,9 ) == 'separator' ) {
87                                $_separator_count++;
88                                $menu[$_offset][2]= "separator{$_separator_count}";
89                        }
90                }
91               
92                //last separator
93                $_last_menu_key = array_pop( array_keys( $menu ) );
94                if( substr( $menu[$_last_menu_key][2],0,9 ) == 'separator' ){
95                        $menu[$_last_menu_key][2] ='separator-last';
96                }
97                return true;
98        }
99
100        return false;
101
102}