Wrong menuitem overwritten
-
When trying out the plugin, the “Dashboard” menuitem became overwritten with a menu “Posts (#)”. The real menu “Posts” was also still visible, right below the “Posts (#)” menu item.
In the code, while looping over
$GLOBALS['menu']
,$menu_pos
is being incremented, and when the$menuitem[0] == "Posts"
,$post_menu_pos
gets that value, and later on,$menu[$post_menu_pos]
is changed.The problem was, that the $menu object (and the $GLOBALS[‘menu’] object) is an array with keys:
- [2] => Array ( [0] => Dashboard [1 ]… )
- [4] => Array ( [0] => [1] … )
- [5] => Array ( [0] => Posts [1] … )
- [10] => Array ( [0] => Media [1] … )
- …
So,
$menu_pos
is2
. But $menu[2] is the Dashboard menu item.I updated the code to:
function show_pending_number($menu) { $num_posts = wp_count_posts( 'post', 'readable' ); $status = "pending"; $pending_count = 0; if ( !empty($num_posts->$status) ) $pending_count = $num_posts->$status; foreach ( $GLOBALS['menu'] as $menuKey => $menuitem ) { if( $menuitem[1] == 'edit_posts') { // Use 'plugins' classes for now. May add specific ones to this later. $menu[$menuKey][0] = sprintf( __('Posts %s'), "<span class='update-plugins count-$pending_count'><span class='plugin-count'>" . number_format_i18n($pending_count) . "</span></span>"); break; } } return $menu; }
Note that I also updated the check for the Posts menu item. I’m now checking the item at 1, to see if it’s ‘edit_posts’.
- The topic ‘Wrong menuitem overwritten’ is closed to new replies.