Rimuovere una voce di menu creata da un plugin

15 apr 2013, 04:40:05
Visualizzazioni: 14.8K
Voti: 8

Sto cercando di rimuovere una voce di menu e ho provato diversi approcci, ma senza successo. È stata creata da un plugin FAQ.

Se uso questa riga:

remove_menu_page( 'edit.php?post_type=question' );

Rimuoverà l'intero menu principale, ma io voglio solo rimuovere due voci di sottomenu contenute all'interno di quell'URL edit.php?post_type=question.

Per le voci che voglio rimuovere, il percorso nella barra degli indirizzi mostra:

edit-tags.php?taxonomy=faq-topic&post_type=question
e
edit-tags.php?taxonomy=faq-tags&post_type=question

Ho provato diverse soluzioni inclusi remove_menu_page e remove_submenu_page senza successo.

Ciò che non ha funzionato finora:

remove_submenu_page( 'edit.php?post_type=question', 'edit-tags.php?taxonomy=faq-topic&post_type=question');
remove_menu_page( 'edit-tags.php?taxonomy=faq-tags') ;
remove_menu_page( 'edit-tags.php?taxonomy=faq-tags&post_type=question') ;
remove_submenu_page( 'edit.php?post_type=question', 'edit-tags.php?taxonomy=faq-topic&post_type=question');
remove_submenu_page( 'edit.php', 'edit-tags.php?taxonomy=faq-topic&post_type=question');
remove_submenu_page( 'edit.php', 'edit-tags.php?taxonomy=faq-topic');
remove_submenu_page( 'edit.php', 'edit-tags.php');
4
Commenti

Puoi mostrare parte del codice che hai provato?

Pat J Pat J
15 apr 2013 04:45:01

L'ho aggiunto in cima per renderlo più pulito.

John John
15 apr 2013 04:51:09

Stavi usando le tue chiamate remove_submenu_page() e remove_menu_page() all'interno di un action hook? Vedi l'esempio nella pagina del Codex.

Pat J Pat J
15 apr 2013 04:53:47

Sì, lo stavo usando all'interno di un hook di azione.

add_action( 'admin_menu', 'my_remove_menu_pages' );

function my_remove_menu_pages() { /quelle funzioni qui/ }

John John
15 apr 2013 05:06:50
Tutte le risposte alla domanda 2
10
11
function remove_submenu() {

    remove_submenu_page( 'edit.php', 'edit-tags.php?taxonomy=faq-topic&post_type=question' );
    remove_submenu_page( 'edit.php', 'edit-tags.php?taxonomy=faq-tags&post_type=question' );
}

add_action( 'admin_menu', 'remove_submenu', 999 );

Per favore leggi il Codex. remove_submenu_page() richiede due parametri e l'hook giusto.

Ed è molto importante: Usa una priorità molto, molto, molto alta nel tuo hook! Se usi una priorità bassa, la tua funzione verrà eseguita prima che i menu vengano aggiunti. Quindi non ci sarà alcun menu da rimuovere. Se usi una priorità alta, c'è una buona probabilità che la tua funzione venga eseguita dopo che i menu sono stati aggiunti.

Questa potrebbe essere la parte complicata.

AGGIORNAMENTO

Dopo aver installato e ispezionato il plugin, ho trovato la soluzione. Ci sono diversi problemi e alcune parti complicate.

I sottomenu non sono aggiunti con add_submenu_page(), sono aggiunti con un custom post type. Una semplice ricerca con add_submenu_page(), copiare gli slug dei menu e rimuovere i menu deve fallire. Devo cercare lo slug del cpt e usarlo.

Dopo global $submenu; var_dump( $submenu ); ottengo questo output

[altri elementi]
    'edit.php?post_type=question' => 
        array (size=7)
          5 => 
            array (size=3)
              0 => string 'FAQs' (length=4)
              1 => string 'edit_posts' (length=10)
              2 => string 'edit.php?post_type=question' (length=27)
          10 => 
            array (size=3)
              0 => string 'Nuova FAQ' (length=8)
              1 => string 'edit_posts' (length=10)
              2 => string 'post-new.php?post_type=question' (length=31)
          15 => 
            array (size=3)
              0 => string 'Titoli FAQ' (length=9)
              1 => string 'manage_categories' (length=17)
              2 => string 'edit-tags.php?taxonomy=faq-topic&post_type=question' (length=55)
          16 => 
            array (size=3)
              0 => string 'Tag FAQ' (length=8)
              1 => string 'manage_categories' (length=17)
              2 => string 'edit-tags.php?taxonomy=faq-tags&post_type=question' (length=54)
[ altri elementi ]

Ora è stato facile rimuovere i sottomenu con edit.php?post_type=question come slug del menu e edit-tags.php?taxonomy=faq-topic&post_type=question / edit-tags.php?taxonomy=faq-tags&post_type=question come slug del sottomenu.

Se osservi attentamente, la e commerciale (&) è un'entità HTML. Non è possibile semplicemente copiare la parte dell'URL e inserirla. Quindi non puoi rimuovere una pagina di sottomenu con un URL non codificato, deve essere codificato nell'URL.

Ed ecco il codice finale:

add_action( 'admin_menu', 'remove_faq_subpages', 999 );

function remove_faq_subpages() {

    $ptype = 'question';
    remove_submenu_page( "edit.php?post_type={$ptype}", "edit-tags.php?taxonomy=faq-tags&post_type={$ptype}" );
    remove_submenu_page( "edit.php?post_type={$ptype}", "edit-tags.php?taxonomy=faq-topics&post_type={$ptype}" );

}
15 apr 2013 05:15:40
Commenti

Sfortunatamente non ha funzionato neanche così. La seguente schermata sarà estremamente utile. Ho provato a farlo in un modo diverso... usando le variabili nella schermata, ma non sono riuscito a farlo funzionare. http://s7.postimg.org/7m36rciob/this_might_help.jpg

John John
15 apr 2013 05:18:52

Ecco una schermata migliore, scusate se è stata tagliata http://s17.postimg.org/uj18k5vvz/FAQ_help.jpg

John John
15 apr 2013 05:21:55

Apri il plugin, trova la riga dove vengono aggiunti i menu con add_submenu_page( $parent_slug, $page_title, $menu_title, $capability, $menu_slug, $function );. Usa $parent_slug e $menu_slug per rimuovere i sottomenu.

Ralf912 Ralf912
15 apr 2013 05:23:19

Ho anche aggiornato la mia risposta. La priorità del tuo hook è molto importante perché add_submenu_page() e remove_submenu_page() utilizzano lo stesso hook. Assicurati che il tuo remove_submenu_page() venga chiamato molto tardi.

Ralf912 Ralf912
15 apr 2013 05:29:39

I tuoi commenti sono stati utili ma sì, non sono sicuro di come rimuoverlo... anche dopo aver guardato il faq-manager.php all'interno di questo plugin

Sto utilizzando questo plugin: http://wordpress.org/extend/plugins/wordpress-faq-manager/

Ho visto il $parent_slug che menzioni e $menu_slug ma non mi ha aiutato molto... il $parent_slug che abbiamo è corretto ma il $menu_slug è discutibile... Forse puoi risolverlo guardando il plugin stesso.

John John
15 apr 2013 05:39:38

E la soluzione è... ?

Ralf912 Ralf912
15 apr 2013 12:58:31

Ho scelto la strada più semplice e ho trovato un plugin in grado di farlo. Ho usato Adminimize e sono riuscito a farlo facilmente.

John John
17 apr 2013 03:35:23

Oh caspita sì, avevo dimenticato la possibilità di usare questo plugin. Frank ha recentemente aggiornato il plugin, è molto buono.

Ralf912 Ralf912
17 apr 2013 13:27:06

Alla fine, ho scoperto i motivi per cui tutte le soluzioni fallivano. All'inizio era un custom post type e non una pagina di sottomenu. E l'url deve essere codificato. La e commerciale semplice (&) nell'url non funziona.

Ralf912 Ralf912
17 apr 2013 18:21:40

@Ralf912 grazie. & ha funzionato dopo averci sbattuto la testa a lungo.

tsdexter tsdexter
23 nov 2015 06:38:27
Mostra i restanti 5 commenti
0

Rendi visibile la voce del menu solo per l'amministratore:

function hide_admin_menu()
{
    if ( !current_user_can('administrator')) {
        remove_menu_page('wpca');
    }
}

add_action('admin_menu', 'hide_admin_menu', 999);
26 mag 2020 13:38:35