WordPress bietet viele Funktionen und diese werden anhand ihrer Rechte dem User angezeigt. Trotzdem möchte man ab und an das Menu etwas erleichtern und explizit für den Kunden anpassen. Mit WordPress 3.1 wurde dies ein wenig einfacher und diverse Tutorials im Netz betrachten meiner Ansicht nach eine nicht empfohlene Lösung.
Mit WordPress Version 3.1 sind unter anderem zwei neue Funktionen hinzugekommen, die das Entfernen von Menu- und Submenu-Einträgen erleichtern. Diese Funktionen kümmern sich um das Entfernen von Einträge aus dem Menu-Baum remove_menu_page
oder Einträge aus dem Submenu, Einträge die unter einem Menueintrag liegen – remove_submenu_page
.
/**
* Remove a top level admin menu
*
* @param string $menu_slug The slug of the menu
* @return array|bool The removed menu on success, False if not found
*/
remove_menu_page( $menu_slug )
/**
* Remove an admin submenu
*
* @param string $menu_slug The slug for the parent menu
* @param string $submenu_slug The slug of the submenu
* @return array|bool The removed submenu on success, False if not found
*/
remove_submenu_page( $menu_slug, $submenu_slug ) {
Damit ist es ein leichtes Menu-Einträge zu entfernen und das Auslesen der Arrays für $menu
und $submenu
kann entfallen. Bisher musste man die Einträge in diesm Array finden und den entsprechenden Eintrag via unset()
aus dem Array nehmen. Alternative waren diverse Konstrukte um den Eintrag auf Grund eines Schlüssel zu finden und zu entfernen – die obigen neuen Funktionen machen dies überflüssig und als Parameterwert wird lediglich die „slug“ übergeben, die man im Link bzw. in der URL der Backendseite findet. Ein kleines Beispiel, in dem die Einträge zu den Kommentaren und die Submenu-Seite Diskussion entfernt werden, soll es verdeutlichen.
function fb_remove_menu_entries () {
// with WP 3.1 and higher
if ( function_exists( 'remove_menu_page' ) ) {
remove_menu_page( 'edit-comments.php' );
remove_submenu_page( 'options-general.php', 'options-discussion.php' );
} else {
// unset comments
unset( $GLOBALS['menu'][25] );
// unset menuentry Discussion
unset( $GLOBALS['submenu']['options-general.php'][25] );
}
}
add_action( 'admin_menu', 'fb_remove_menu_entries' );
Der obige Code stellt eine einfache Lösung dar, entfernt die beiden Einträge und hat ebenso ein Fallback für WordPress, kleiner Version 3.1. Ebenso ist denkbar, dass man das Entfernen mit Rechteabfragen
if ( function_exists( 'remove_menu_page' ) && ! current_user_can( 'manage_options' ) ) {
verbindet und so explizit die Darstellung optimieren kann. Alternativ hilft das Plugin Adminimize und erleichtert diese Aufgabe via Oberfläche.