2010-02-10 7 views
8

C'è un plugin chiamato Shopp nella mia pagina di amministrazione WP, questo plugin ha il menu di livello superiore "Shopp".Come aggiungere un nuovo sottomenu personalizzato sotto un altro menu di plugin

Questo è il menu di livello superiore:

$menus['main'] = add_menu_page('Shopp', 'Shopp', SHOPP_USERLEVEL, 'shopp-orders', array(&$this,'orders')); 

E ho creato alcuni plugin che hanno bisogno di aggiungere come sottomenu menu di livello superiore "Shopp", così è l'aggiunta di sottomenu (link. .... wp-admin/admin.php? page = ach-faq.php) ma quando clicco su un sottomenu mostra "Non hai permessi sufficienti per accedere a questa pagina".

risultato Debug:

Pagenow = admin.php 
Parent = shopp-orders 
Hookname = shopp_page_ach-faq 
Menu = Array 
Submenu = Array 
Menu nopriv = Array 
Submenu nopriv = 
Plugin page = ach-faq.php 
Registered pages = 

Il mio codice:

function ach_faq_menu(){ 
add_submenu_page('shopp-orders', 'My FAQ Plugin', 'My FAQ Plugin', 8, __FILE__, 'section_1'); 
} 
function section_1(){ 
echo 'Text'; 
} 
add_action('admin_menu', 'ach_faq_menu'); 

Come posso risolvere questo problema? Mi aiuti per favore !

risposta

20

Il menu e le pagine dei sottomenu devono essere richiamati contemporaneamente e utilizzare gli stessi slug. Per esempio

add_action("admin_menu", "createMyMenus"); 

function createMyMenus() { 
    add_menu_page("My Menu", "My Menu", 0, "my-menu-slug", "myMenuPageFunction"); 
    add_submenu_page("my-menu-slug", "My Submenu", "My Submenu", 0, "my-submenu-slug", "mySubmenuPageFunction"); 
} 

Questo si tradurrebbe in un menu di livello superiore "My Menu" con un bambino di "My sottomenu".

L'errore di autorizzazioni non valide sembra emergere quando si utilizza FILE per il sottomenu-slug.

+0

perché non è presente nella documentazione. Non è ovvio che le pagine dei sottomenu abbiano bisogno dello stesso slug. –

+0

@TimJoyce Non hanno bisogno dello stesso slug. I sottomenu hanno bisogno dello slug genitore. Se vuoi un sottomenu predefinito, che non vedo perché non lo faresti, devi usare lo stesso slug. Puoi fare un'azione se dovessi fare clic sul livello superiore diverso da tutti i sottolivelli, ma ciò aggiunge confusione. La pratica standard prevede che il primo sottomenu condivida lo slug e la sua azione annullerà l'azione del genitore. –

0

È possibile aggiungere il nome della cartella del plugin e la pagina iniziale del plug-in. Per esempio ho collegato al plugin Newsletter da:

<?php 

add_action('admin_menu', 'add_newsletter_extra_page'); 

function add_newsletter_extra_page(){ 
    add_submenu_page( 
     'newsletter/intro.php', 
     'Newsletter', 
     'Subscribers Plus', 
     1, //$capability, 
     'subscribers-plus', 
     'newsletter_list_addon'); 
} 
?> 
0

Come Altari dichiarato:

pagine dei menu e dei sottomenu dovrebbero essere chiamati allo stesso tempo

STESSO TEMPO - add_submenu_page deve essere chiamato dalla stessa funzione di add_menu_page, la funzione nel plugin originale. Non puoi "hackerare" in un altro menu di plugin dall'esterno.

-6

Passare a Aspetto -> Menu Quindi creare Menu in Collegamenti personalizzati, quindi un nuovo menu creato nella parte destra. Ora puoi semplicemente trascinarlo e mettere sotto il menu di livello superiore che desideri.

+0

la domanda riguarda il menu di amministrazione, non quelli di front-end. – ggg

1

È possibile aggiungere sottomenu al menu personalizzato (aggiunto da parte di altri plugin) esistente con po 'difficile

è possibile creare menu e quindi rimuovere il menu stesso dopo aver aggiunto sottomenu con lo stesso slug e callback.

Si prega di provare questo codice:

add_action('admin_menu', 'add_shopp_submenu'); 
function add_shopp_submenu(){ 
    add_menu_page(__('New Menu', 'your-plugin-text-domain'), __('New Menu', 'your-plugin-text-domain'), 'read', 'ach-faq', 'your_menu_callback'); 
    add_submenu_page('shopp-orders', __('New Menu', 'your-plugin-text-domain'), __('New Menu', 'your-plugin-text-domain'), 'read', 'ach-faq', 'your_menu_callback'); 
    remove_menu_page('ach-faq'); 
} 

function your_menu_callback(){ 
    echo "string"; 
} 
0
/*create any function name*/ 
function process_post() { 

add_menu_page(__('nLr','menu-test'), __('My Plugin','menu-test'), 'manage_options','myplugin', 'myplguin_admin_page', 'dashicons-tickets', 6); 

add_submenu_page('myplugin', __('My Plugin Edit', 'menu-test'), __('My Plugin Edit', 'menu-test'), 'manage_options', 'myplugin_edit', 'myplugin_edit'); 

} 
/*create callback function for main menu*/ 

function myplguin_admin_page(){ 
    echo"welcom to my plugin menu"; 

} 

/* create callback function for submenu */ 

function myplugin_edit(){ 
    echo"welcome to submenu"; 
} 
add_action('admin_init', 'process_post'); 
?> 
0

Per aggiungere su uno dei menu principale del plugin, utilizzare add_submenu_page() e impostare la priorità del vostro add_action() per abbassare cioè, superiore a 10.

Quindi in add_submenu_page(), sostituire 'plugin-parent-menu-slug' con lo slug del menu padre in cui si desidera aggiungere. Ad esempio, vuoi aggiungerlo sotto una pagina di amministrazione con uno slug /wp-admin/admin.php?page= plug-gen-parent-menu-slug.

// set priority to lower i.e. greater than 10 
add_action('admin_menu', 'my_admin_menu', 20); 

function my_admin_menu() { 
    add_submenu_page('plugin-parent-menu-slug', 'New Menu', 'New Menu', 'manage_options', 'my-admin-slug', 'my_admin_page'); 
} 

function my_admin_page(){ 
    echo "My Admin Page"; 
} 
Problemi correlati