Einhängen in add_submenu_page

manage_options jemals auf ein Plugin, das die function manage_options für eine Seite verwendet, die … wirklich nicht sein muss? Nun, ich bin genau darauf gestoßen.

Dies ist vielleicht eher eine allgemeine Frage zum Einhängen in add_submenu_page , also nicht nur spezifisch für meinen Anwendungsfall.

Ich schaute auf add_dashboard_page das ist einfach ein Wrapper für add_submenu_page :

 function add_submenu_page( $parent_slug, $page_title, $menu_title, $capability, $menu_slug, $function = '' ) { global $submenu; global $menu; global $_wp_real_parent_file; global $_wp_submenu_nopriv; global $_registered_pages; global $_parent_pages; $menu_slug = plugin_basename( $menu_slug ); $parent_slug = plugin_basename( $parent_slug); if ( isset( $_wp_real_parent_file[$parent_slug] ) ) $parent_slug = $_wp_real_parent_file[$parent_slug]; if ( !current_user_can( $capability ) ) { $_wp_submenu_nopriv[$parent_slug][$menu_slug] = true; return false; } // If the parent doesn't already have a submenu, add a link to the parent // as the first item in the submenu. If the submenu file is the same as the // parent file someone is trying to link back to the parent manually. In // this case, don't automatically add a link back to avoid duplication. if (!isset( $submenu[$parent_slug] ) && $menu_slug != $parent_slug ) { foreach ( (array)$menu as $parent_menu ) { if ( $parent_menu[2] == $parent_slug && current_user_can( $parent_menu[1] ) ) $submenu[$parent_slug][] = $parent_menu; } } $submenu[$parent_slug][] = array ( $menu_title, $capability, $menu_slug, $page_title ); $hookname = get_plugin_page_hookname( $menu_slug, $parent_slug); if (!empty ( $function ) && !empty ( $hookname )) add_action( $hookname, $function ); $_registered_pages[$hookname] = true; // backwards-compatibility for plugins using add_management page. See wp-admin/admin.php for redirect from edit.php to tools.php if ( 'tools.php' == $parent_slug ) $_registered_pages[get_plugin_page_hookname( $menu_slug, 'edit.php')] = true; // No parent as top level $_parent_pages[$menu_slug] = $parent_slug; return $hookname; } 

Ehrlich gesagt sieht es nicht so aus, als könnte ich etwas mit einer vorhandenen Dashboard-Seite verbinden, um die Fähigkeiten zu ändern. Ich versuche also zu entscheiden, ob es besser ist, remove_submenu_page und versuche dann, dasselbe Untermenü erneut zu deklarieren. Ich weiß, dass es Dinge geben wird, nach denen ich Ausschau halten muss (wenn die für die Seite verwendete Anzeigefunktion etwas hat, das zusätzlich nach der Fähigkeit sucht oder irgendetwas anzeigt, das für die Site wichtig ist). Immer hilfreich, ein zweites Paar Augen auf diese zu haben, damit ich die Dinge nicht komplizierter mache. Danke allen!

Aktualisieren

Danke an @toscho und @userabuser hier ist was ich habe:

 function wpse_71303_change_menu_cap() { global $submenu; foreach ($submenu['index.php'] as $dashboard => $key) { if ($key[0] == 'Analytics360°') { $submenu['index.php'][$dashboard][1] = 'analytics'; } } } add_action( 'admin_head', 'wpse_71303_change_menu_cap' ); 

Wenn ich eine print_r($submenu) I do see the new capability - but I still can't access the menu item under the client role I created (with the ausführen, print_r($submenu) I do see the new capability - but I still can't access the menu item under the client role I created (with the analytics_360` Fähigkeit) (verwendet das Mitglieder-Plugin zu erstellen). Möglicherweise zu spät feuern? Definitiv ein bisschen seltsam. Danke wie immer!

Der Code von Update funktioniert für jeden, der darauf stößt. Es war ein unnötiger Check um add_dashboard_page() , der mir das Problem gab.

Solutions Collecting From Web of "Einhängen in add_submenu_page"

admin_head , die letzte Aktion, bevor das Menü gerendert wird, und ändern Sie das globale $menu :

 add_action( 'admin_head', 'wpse_71303_change_menu_cap' ); /** * Change the capability to access an admin menu item. * * @wp-hook admin_head * @return void */ function wpse_71303_change_menu_cap() { global $menu; foreach ( $menu as $key => $item ) { // Find menu by name if ( 'Tools' === $item[0] ) // default cap: 'edit_posts' { $menu[ $key ][1] = 'new_capability'; } } }