Question

Jamais rencontré un plugin qui utilise le manage_options Capacité d'une page qui ... n'a vraiment pas besoin d'être? Eh bien, je suis tombé sur cela.

Cela peut être davantage une question générale sur la connexion add_submenu_page, donc pas seulement spécifique à mon cas d'utilisation.

j'ai regardé add_dashboard_page qui est simplement un wrapper pour 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;
}

Honnêtement, il ne semble pas qu'il y ait quelque chose que je peux réellement brancher avec une page de tableau de bord existante pour modifier la capacité. Alors j'essaye de décider si je ferais mieux d'utiliser remove_submenu_page puis tenter de redémarrer ce même sous-menu. Je sais qu'il y aura des choses que je dois rechercher (si la fonction d'affichage utilisée pour la page a quelque chose qui vérifie également la capacité ou l'affichage de quelque chose de vital pour le site). Toujours utile d'avoir une deuxième paire d'yeux, donc je ne complique pas trop les choses. Merci a tous!

Mise à jour

Merci à @toscho et @userabuser, voici ce que j'ai:

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' );

Si je dirige un 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 theCapacité analytique_360`) (a utilisé le plugin des membres pour créer). Peut-être tirer trop tard? Certainement un peu étrange. Merci comme toujours!

Le code de Mise à jour Fonctionne pour tous ceux qui en découlent. C'était un chèque inutile add_dashboard_page() Me donner le problème.

Pas de solution correcte

Licencié sous: CC-BY-SA avec attribution
Non affilié à wordpress.stackexchange
scroll top