wp/wp-admin/includes/menu.php
changeset 7 cf61fcea0001
parent 5 5e2f62d02dcd
child 9 177826044cd9
equal deleted inserted replaced
6:490d5cc509ed 7:cf61fcea0001
   176 		}
   176 		}
   177 	}
   177 	}
   178 }
   178 }
   179 unset($id, $data, $subs, $first_sub);
   179 unset($id, $data, $subs, $first_sub);
   180 
   180 
   181 // Remove any duplicated separators
   181 /**
   182 $separator_found = false;
   182  *
   183 foreach ( $menu as $id => $data ) {
   183  * @param string $add
   184 	if ( 0 == strcmp('wp-menu-separator', $data[4] ) ) {
   184  * @param string $class
   185 		if (false == $separator_found) {
   185  * @return string
   186 			$separator_found = true;
   186  */
   187 		} else {
       
   188 			unset($menu[$id]);
       
   189 			$separator_found = false;
       
   190 		}
       
   191 	} else {
       
   192 		$separator_found = false;
       
   193 	}
       
   194 }
       
   195 unset($id, $data);
       
   196 
       
   197 function add_cssclass($add, $class) {
   187 function add_cssclass($add, $class) {
   198 	$class = empty($class) ? $add : $class .= ' ' . $add;
   188 	$class = empty($class) ? $add : $class .= ' ' . $add;
   199 	return $class;
   189 	return $class;
   200 }
   190 }
   201 
   191 
       
   192 /**
       
   193  *
       
   194  * @param array $menu
       
   195  * @return array
       
   196  */
   202 function add_menu_classes($menu) {
   197 function add_menu_classes($menu) {
   203 
       
   204 	$first = $lastorder = false;
   198 	$first = $lastorder = false;
   205 	$i = 0;
   199 	$i = 0;
   206 	$mc = count($menu);
   200 	$mc = count($menu);
   207 	foreach ( $menu as $order => $top ) {
   201 	foreach ( $menu as $order => $top ) {
   208 		$i++;
   202 		$i++;
   233 
   227 
   234 		$lastorder = $order;
   228 		$lastorder = $order;
   235 	}
   229 	}
   236 
   230 
   237 	/**
   231 	/**
   238 	 * Filter administration menus array with classes added for top-level items.
   232 	 * Filters administration menus array with classes added for top-level items.
   239 	 *
   233 	 *
   240 	 * @since 2.7.0
   234 	 * @since 2.7.0
   241 	 *
   235 	 *
   242 	 * @param array $menu Associative array of administration menu items.
   236 	 * @param array $menu Associative array of administration menu items.
   243 	 */
   237 	 */
   245 }
   239 }
   246 
   240 
   247 uksort($menu, "strnatcasecmp"); // make it all pretty
   241 uksort($menu, "strnatcasecmp"); // make it all pretty
   248 
   242 
   249 /**
   243 /**
   250  * Filter whether to enable custom ordering of the administration menu.
   244  * Filters whether to enable custom ordering of the administration menu.
   251  *
   245  *
   252  * See the 'menu_order' filter for reordering menu items.
   246  * See the {@see 'menu_order'} filter for reordering menu items.
   253  *
   247  *
   254  * @since 2.8.0
   248  * @since 2.8.0
   255  *
   249  *
   256  * @param bool $custom Whether custom ordering is enabled. Default false.
   250  * @param bool $custom Whether custom ordering is enabled. Default false.
   257  */
   251  */
   262 	}
   256 	}
   263 	unset($menu_item);
   257 	unset($menu_item);
   264 	$default_menu_order = $menu_order;
   258 	$default_menu_order = $menu_order;
   265 
   259 
   266 	/**
   260 	/**
   267 	 * Filter the order of administration menu items.
   261 	 * Filters the order of administration menu items.
   268 	 *
   262 	 *
   269 	 * A truthy value must first be passed to the 'custom_menu_order' filter
   263 	 * A truthy value must first be passed to the {@see 'custom_menu_order'} filter
   270 	 * for this filter to work. Use the following to enable custom menu ordering:
   264 	 * for this filter to work. Use the following to enable custom menu ordering:
   271 	 *
   265 	 *
   272 	 *     add_filter( 'custom_menu_order', '__return_true' );
   266 	 *     add_filter( 'custom_menu_order', '__return_true' );
   273 	 *
   267 	 *
   274 	 * @since 2.8.0
   268 	 * @since 2.8.0
   277 	 */
   271 	 */
   278 	$menu_order = apply_filters( 'menu_order', $menu_order );
   272 	$menu_order = apply_filters( 'menu_order', $menu_order );
   279 	$menu_order = array_flip($menu_order);
   273 	$menu_order = array_flip($menu_order);
   280 	$default_menu_order = array_flip($default_menu_order);
   274 	$default_menu_order = array_flip($default_menu_order);
   281 
   275 
       
   276 	/**
       
   277 	 *
       
   278 	 * @global array $menu_order
       
   279 	 * @global array $default_menu_order
       
   280 	 *
       
   281 	 * @param array $a
       
   282 	 * @param array $b
       
   283 	 * @return int
       
   284 	 */
   282 	function sort_menu($a, $b) {
   285 	function sort_menu($a, $b) {
   283 		global $menu_order, $default_menu_order;
   286 		global $menu_order, $default_menu_order;
   284 		$a = $a[2];
   287 		$a = $a[2];
   285 		$b = $b[2];
   288 		$b = $b[2];
   286 		if ( isset($menu_order[$a]) && !isset($menu_order[$b]) ) {
   289 		if ( isset($menu_order[$a]) && !isset($menu_order[$b]) ) {
   298 
   301 
   299 	usort($menu, 'sort_menu');
   302 	usort($menu, 'sort_menu');
   300 	unset($menu_order, $default_menu_order);
   303 	unset($menu_order, $default_menu_order);
   301 }
   304 }
   302 
   305 
       
   306 // Prevent adjacent separators
       
   307 $prev_menu_was_separator = false;
       
   308 foreach ( $menu as $id => $data ) {
       
   309 	if ( false === stristr( $data[4], 'wp-menu-separator' ) ) {
       
   310 
       
   311 		// This item is not a separator, so falsey the toggler and do nothing
       
   312 		$prev_menu_was_separator = false;
       
   313 	} else {
       
   314 
       
   315 		// The previous item was a separator, so unset this one
       
   316 		if ( true === $prev_menu_was_separator ) {
       
   317 			unset( $menu[ $id ] );
       
   318 		}
       
   319 
       
   320 		// This item is a separator, so truthy the toggler and move on
       
   321 		$prev_menu_was_separator = true;
       
   322 	}
       
   323 }
       
   324 unset( $id, $data, $prev_menu_was_separator );
       
   325 
   303 // Remove the last menu item if it is a separator.
   326 // Remove the last menu item if it is a separator.
   304 $last_menu_key = array_keys( $menu );
   327 $last_menu_key = array_keys( $menu );
   305 $last_menu_key = array_pop( $last_menu_key );
   328 $last_menu_key = array_pop( $last_menu_key );
   306 if ( !empty( $menu ) && 'wp-menu-separator' == $menu[ $last_menu_key ][ 4 ] )
   329 if ( !empty( $menu ) && 'wp-menu-separator' == $menu[ $last_menu_key ][ 4 ] )
   307 	unset( $menu[ $last_menu_key ] );
   330 	unset( $menu[ $last_menu_key ] );
   314 	 *
   337 	 *
   315 	 * @since 2.5.0
   338 	 * @since 2.5.0
   316 	 */
   339 	 */
   317 	do_action( 'admin_page_access_denied' );
   340 	do_action( 'admin_page_access_denied' );
   318 
   341 
   319 	wp_die( __( 'You do not have sufficient permissions to access this page.' ), 403 );
   342 	wp_die( __( 'Sorry, you are not allowed to access this page.' ), 403 );
   320 }
   343 }
   321 
   344 
   322 $menu = add_menu_classes($menu);
   345 $menu = add_menu_classes($menu);