Elimină un element de meniu creat de un plugin

15 apr. 2013, 04:40:05
Vizualizări: 14.8K
Voturi: 8

Încerc să elimin un element de meniu și am încercat mai multe abordări, dar fără succes. Acesta a fost creat de un plugin pentru FAQ.

Dacă folosesc această linie:

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

Va elimina întregul meniu principal, însă eu doresc să elimin doar două elemente de submeniu incluse în acea adresă URL edit.php?post_type=question.

Pentru elementul pe care vreau să-l elimin, calea din bara de adrese URL este următoarea:
edit-tags.php?taxonomy=faq-topic&post_type=question
și
edit-tags.php?taxonomy=faq-tags&post_type=question

Am încercat mai multe soluții, inclusiv remove_menu_page și remove_submenu_page, fără succes.

Ce nu a funcționat până acum:

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
Comentarii

Poți să arăți o parte din codul pe care l-ai încercat?

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

L-am adăugat în partea de sus pentru a fi mai curat.

John John
15 apr. 2013 04:51:09

Ați folosit apelurile remove_submenu_page() și remove_menu_page() în interiorul unui action hook? Consultați exemplul de pe pagina Codex.

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

Da, foloseam funcția în interiorul unui hook de acțiune.

add_action( 'admin_menu', 'my_remove_menu_pages' );

function my_remove_menu_pages() { /funcțiile respective aici/ }

John John
15 apr. 2013 05:06:50
Toate răspunsurile la întrebare 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 );

Vă rugăm să citiți Codex-ul. remove_submenu_page() necesită doi parametri și hook-ul corect.

Și foarte important: Folosiți o prioritate foarte, foarte, foarte mare în hook-ul vostru! Dacă folosiți o prioritate mică, funcția voastră va fi executată înainte ca meniurile să fie adăugate. Deci nu va exista niciun meniu de eliminat. Dacă folosiți o prioritate mare, există o șansă bună ca funcția voastră să fie executată după ce meniurile au fost adăugate.

Aceasta ar putea fi partea complicată.

ACTUALIZARE

După instalarea și inspectarea plugin-ului, am găsit soluția. Există mai multe probleme și câteva părți complicate.

Submeniurile nu sunt adăugate cu add_submenu_page(), ele sunt adăugate cu un tip de postare personalizat (custom post type). O simplă căutare după add_submenu_page(), copierea slug-urilor de meniu și eliminarea meniurilor trebuie să eșueze. Trebuie să caut slug-ul CPT-ului și să-l folosesc.

După global $submenu; var_dump( $submenu ); obțin acest rezultat:

[mai multe elemente]
    '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 'FAQ Nouă' (length=8)
              1 => string 'edit_posts' (length=10)
              2 => string 'post-new.php?post_type=question' (length=31)
          15 => 
            array (size=3)
              0 => string 'Titlu 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 'Etichete FAQ' (length=8)
              1 => string 'manage_categories' (length=17)
              2 => string 'edit-tags.php?taxonomy=faq-tags&post_type=question' (length=54)
[ mai multe elemente ]

Acum a fost ușor să elimin submeniurile folosind edit.php?post_type=question ca slug de meniu și edit-tags.php?taxonomy=faq-topic&post_type=question / edit-tags.php?taxonomy=faq-tags&post_type=question ca slug de submeniu.

Dacă vă uitați cu atenție, ampersand-ul (&) este o entitate HTML. Nu este posibil să copiați pur și simplu partea de URL și să o inserați. Deci nu puteți elimina o pagină de submeniu cu un URL ne-codat, trebuie să fie codat în URL.

Și iată codul final:

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
Comentarii

Din păcate, nici asta nu a funcționat. Următoarea captură de ecran va fi extrem de utilă. Am încercat să o fac într-un alt mod... folosind variabilele din captura de ecran, dar nu am reușit să o fac să funcționeze. http://s7.postimg.org/7m36rciob/this_might_help.jpg

John John
15 apr. 2013 05:18:52

Iată o captură de ecran mai bună, scuze că a fost tăiată http://s17.postimg.org/uj18k5vvz/FAQ_help.jpg

John John
15 apr. 2013 05:21:55

Deschide pluginul, găsește linia unde meniurile vor fi adăugate cu add_submenu_page( $parent_slug, $page_title, $menu_title, $capability, $menu_slug, $function );. Folosește $parent_slug și $menu_slug pentru a elimina submeniurile.

Ralf912 Ralf912
15 apr. 2013 05:23:19

De asemenea, am actualizat răspunsul meu. Prioritatea hook-ului tău este foarte importantă deoarece add_submenu_page() și remove_submenu_page() folosesc același hook. Asigură-te că remove_submenu_page() este apelat cât mai târziu.

Ralf912 Ralf912
15 apr. 2013 05:29:39

Comentariile tale au fost utile, dar da, nu sunt sigur cum să îl elimin... chiar și după ce am analizat fișierul faq-manager.php din cadrul acestui plugin

Folosesc acest plugin: http://wordpress.org/extend/plugins/wordpress-faq-manager/

Am văzut $parent_slug pe care l-ai menționat și $menu_slug dar asta nu m-a ajutat prea mult... $parent_slug îl avem corect dar $menu_slug este îndoielnic... Poate poți descoperi soluția analizând plugin-ul însuși.

John John
15 apr. 2013 05:39:38

Și soluția este... ?

Ralf912 Ralf912
15 apr. 2013 12:58:31

Am ales calea cea mai ușoară și am găsit un plugin care a putut face asta. Am folosit Adminimize și am reușit să fac asta cu ușurință.

John John
17 apr. 2013 03:35:23

Oh, da, am uitat de posibilitatea de a folosi acest plugin. Frank a actualizat recent pluginul, este foarte bun.

Ralf912 Ralf912
17 apr. 2013 13:27:06

Până la urmă, am descoperit motivele pentru care toate soluțiile au eșuat. La început era un custom post type și nu o pagină de submeniu. Și URL-ul trebuie să fie codificat. Ampersand-ul simplu (&) în URL nu funcționează.

Ralf912 Ralf912
17 apr. 2013 18:21:40

@Ralf912 mulțumesc. & a funcționat după multă gândire.

tsdexter tsdexter
23 nov. 2015 06:38:27
Arată celelalte 5 comentarii
0

Faceți elementul de meniu vizibil doar pentru administrator:

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

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