Hallo @BinaryBit:
Kein Wunder, dass Sie ein bisschen frustriert sind. Das Admin-Menü ist eine der schwierigsten und frustrierendsten Implementierungen über WordPress. Ehrlich gesagt, ich weiß nicht, was sie dachten, als sie es so gestalteten.
@EAMann hat hervorragend erklärt, wie die Admin-Menüs in WordPress funktionieren (ich wünschte, ich hätte das vor ungefähr 4 Monaten lesen können ... :)
Dennoch, nachdem ich herausgefunden hatte, wie es funktionierte, war ich immer noch ratlos, damit zu arbeiten, ohne genug Zeit aufzuwenden, um meinen Kopf gerade zu halten, während ich versuchte, einfache Dinge zu tun. Deshalb habe ich eine Menü-API erstellt , die das Arbeiten mit dem WordPress-Admin-Menü vereinfacht und rationalisiert.
Sie sind zu 100% kompatibel mit den vorhandenen Strukturen von WordPress und noch immer in Alpha, da ich der einzige bin, der es verwendet. Ich bin mir sicher, dass es Use-Cases gibt, die sie noch nicht behandeln. Aber ich werde den Code hier posten, damit Sie und andere ihn ausprobieren können.
Sie können die Datei herunterladen , um sie in das Verzeichnis Ihres Themas zu kopieren : wp-admin-menu-classes.php und was folgt, zeigt, wie Sie die Funktionen in der functions.php
Datei Ihres Themas aufrufen können :
<?php
require_once('wp-admin-menu-classes.php');
add_action('admin_menu','my_admin_menu');
function my_admin_menu() {
swap_admin_menu_sections('Pages','Posts'); // Swap location of Posts Section with Pages Section
rename_admin_menu_section('Media','Photos & Video'); // Rename Media Section to "Photos & Video"
delete_admin_menu_section('Links'); // Get rid of Links Section
$movie_tags_item_array = get_admin_menu_item_array('Movies','Movie Tags'); // Save off the Movie Tags Menu
update_admin_menu_section('Movies',array( // Rename two Movie Menu Items and Delete the Movie Tags Item
array('rename-item','item'=>'Movies','new_title'=>'List Movies'),
array('rename-item','item'=>'Add New','new_title'=>'Add Movie'),
array('delete-item','item'=>'Movie Tags'),
));
copy_admin_menu_item('Movies',array('Actors','Add New')); // Copy the 'Add New' over from Actors
renamed_admin_menu_item('Movies','Add New','Add Actor'); // Rename copied Actor 'Add New' to 'Add Actor
add_admin_menu_item('Movies',array( // (Another way to get a 'Add Actor' Link to a section.)
'title' => 'Alt Add Actor ',
'slug' => 'post-new.php?post_type=actor',
), array(// Add Back the Movie Tags at the end.
'where'=>'end'
));
add_admin_menu_item('Movies',$movie_tags_item_array,array(// Add Back the Movie Tags at the end.
'where'=>'end'
));
delete_admin_menu_section('Actors'); // Finally just get rid of the actors section
}
Darüber hinaus werden diese Funktionen (als Basis) für die Aufnahme in WordPress 3.1 in Betracht gezogen. Wenn wir Glück haben, können sie sogar zum Standard werden!
Hier ist eine kurze Anleitung, wie das WordPress-Admin-Menü aufgebaut ist - ich spreche nicht von der
add_menu_page
API, ich meine das eigentliche Standard-WordPress-Menü.Aufrufen der Menüdatei
Das Menü wird offensichtlich von geladen
wp-admin/admin.php
. Es wird jedoch nicht über die Standard-API geladen, die wir basierend auf der WordPress-Dokumentation gewohnt sind. Vielmehr wird das gesamte Menü (alle möglichen Optionen, Untermenüs usw.) über ein einfaches Array geladen, das in definiert istwp-admin/menu.php
.So das Menüsystem zu laden,
admin.php
nurrequire
smenu.php
... um die Linie 99 in Wordpress 3.0.Laden des Menüs
Das Menü selbst wird im globalen Array gespeichert
$menu
. Laut der Inline-Dokumentation enthält das Menü-Array folgende Elemente:Das Dashboard ist zum Beispiel:
Die Datei durchläuft und lädt jedes Menüelement in das Array und lädt alle Untermenüelemente in ein Array mit dem Namen
$submenu
, das auf der URL des übergeordneten Menüs basiert. Das Untermenü des Dashboards mit dem Namen "Dashboard" lautet also:Nachdem das System alle Menüs geladen hat (es gibt nicht so viele, aber das System durchläuft den Index jeweils um 5 oder 10 ... Beachten Sie, dass das Dashboard, obwohl es das erste Menüelement ist, immer noch als indiziert ist Punkt "2" (PHP-Arrays beginnen bei Index 0 ... damit Sie etwas Spielraum haben).
Zu diesem Zeitpunkt ruft das System auf
wp-admin/includes/menu.php
.Durch das Menü gehen
Diese dritte Datei durchläuft jedes Menüelement und verwendet, basierend auf den dem aktuellen Benutzer zugewiesenen Berechtigungen, entweder das Menü oder entfernt es. Zuerst durchläuft es alle Untermenüs und entfernt Seiten, auf die der Benutzer nicht zugreifen kann. Dann durchläuft es die übergeordneten Seiten und macht dasselbe. Anschließend werden alle doppelten Trennzeichen entfernt, die vom Entfernen von Menüs übrig bleiben.
Schließlich werden die Menüs anhand der zugewiesenen Menüreihenfolge sortiert.
Bestellung von benutzerdefinierten Menüs
Der Hook
admin_menu
wird aufgerufen, nachdem Menüs eingerichtet wurden, aber bevor etwas bestellt wurde. So ist es möglich, das gesamte WordPress-Menüsystem zu bestellen, ohne die API zu "hacken".Nachdem die Aktion
admin_menu
ausgelöst wurde, werden Ihre benutzerdefinierten Seiten in das System geladen. Als nächstes prüft WordPress einen Filter namenscustom_menu_order
... Dieser Filter wird immer zurückgegebenfalse
und teilt WordPress mit, ob Sie eine benutzerdefinierte Reihenfolge verwenden möchten oder nicht.Fügen Sie Ihrem Thema Folgendes hinzu, um
true
stattdessen das Flag zu setzen und Ihre explizite Menüreihenfolge zu definieren:Geben Sie die gewünschte Reihenfolge für alle Menüs an (ich habe Verweise auf die Menü-Ladedatei angegeben, damit Sie eine Liste der Dateinamen erhalten).
BEARBEITEN (02.09.2010):
Um die Reihenfolge des Bearbeitungsbildschirms eines benutzerdefinierten Beitragstyps mithilfe dieser Methode festzulegen, müssen Sie die URL des Bearbeitungsbildschirms kennen. In den meisten Fällen wird es so sein
http://blog.url/wp-admin/edit.php?post_type=POST_TYPE
. Dies hängt davon ab, wie WordPress auf Ihrer Site eingerichtet ist (wenn es im Stammverzeichnis oder in einem Unterordner installiert ist) und von der Art des benutzerdefinierten Beitrags, den Sie verwenden.Beispielsweise...
Angenommen, Sie haben einen benutzerdefinierten Beitragstyp für "Stapelaustauschfragen" und möchten, dass der Editor im selben Abschnitt wie das Dashboard direkt unter dem Dashboard-Symbol angezeigt wird. Sie würden den folgenden Code in der
functions.php
Datei Ihres Themas verwenden:Der Rest des Menüs bleibt davon unberührt, aber Ihre benutzerdefinierte Bearbeitungsseite wird in denselben Bereich wie das Dashboard verschoben und direkt darunter angezeigt. Sie können diese verwenden, um Ihre benutzerdefinierten Beitragstypen in einen beliebigen Bereich des Administratormenüs zu verschieben und in beliebiger Reihenfolge zu platzieren. Sie können auch Standardmenüelemente auf dieselbe Weise verschieben.
Stellen Sie einfach sicher, dass Sie die Reihenfolge aller Menüelemente in dem angegebenen Abschnitt angeben , da Ihr Menü andernfalls möglicherweise einer unerwarteten Verrücktheit ausgesetzt ist.
quelle
$
auf dem Variablennamen ... (Große Antwort though) ..Mir ist klar, dass dies ein alter Thread ist, aber ich denke, es lohnt sich, ihn mit einer VIEL einfacheren Lösung zu aktualisieren. Bitte beachten Sie, dass dies mit 3.5 funktioniert und nicht mit einer anderen Version getestet wurde. Der folgende Code kann in ein Plugin oder in die Datei functions.php eingefügt werden.
Siehe: http://codex.wordpress.org/Plugin_API/Filter_Reference/menu_order . Leicht modifiziert, um den Bedürfnissen des ursprünglichen Posters zu entsprechen (obwohl ich hoffe, dass er inzwischen eine Lösung gefunden hat ...).
Alle Elemente im Admin-Menü, die hier nicht aufgeführt sind, werden nicht entfernt. Sie werden am Ende des Menüs angehängt.
quelle
Sie möchten kein Plugin verwenden, aber der Einfachheit halber sollten Sie das Plugin Admin Menu Editor von Janis Elsts ausprobieren. Ordnen Sie Ihre Admin-Menüs nach Ihren Wünschen neu an. kann auch Menüpunkte ausblenden.
quelle
Zum Verschieben von Menüelementen verwende ich gerne die globale
$menu
Variable.Wenn ich zum Beispiel das Menü "Seiten" an den unteren Rand der Menüs verschieben möchte, würde ich dies in
functions.php
oder ein Plugin verwenden:und wenn ich die Posts und Links Menüs tauschen wollte:
Ich benutze diesen Trick schon eine Weile, habe ihn gerade mit WP 3.4.1 getestet
quelle
admin_menu_items
Funktionunset($menu[20]);
Genial. Ich danke dir sehr. Ich habe nur ein paar Codezeilen in meine functions.php eingefügt
Außerdem lege ich die Datei wp-admin-menu-classes.php in meinen Themenordner und jetzt wird die Schaltfläche "Beiträge" durch die Schaltfläche "Seiten" ersetzt.
Ich hoffe, dass dies bald Teil des Kerns wird, sodass wir nicht das gesamte Menü innerhalb einer Funktion schreiben müssen, um nur zwei Tasten neu anzuordnen.
Tatsächlich war es etwas schwierig, eine genauere Reihenfolge für 4 Schaltflächen zu erhalten. Um die von 4 Schaltflächen in "Seiten", "Post", "Medien" und "Links" zu ändern, musste ich den folgenden Code verwenden:
quelle