Elimină un element de meniu creat de un plugin
Î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');

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}" );
}

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

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

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.

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.

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.

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ță.

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

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ă.
