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 ist wp-admin/menu.php
.
So das Menüsystem zu laden, admin.php
nur require
s menu.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:
The elements in the array are:
* 0: Menu item name
* 1: Minimum level or capability required.
* 2: The URL of the item's file
* 3: Class
* 4: ID
* 5: Icon for top level menu
Das Dashboard ist zum Beispiel:
$menu[2] = array( __('Dashboard'), 'read', 'index.php', '', 'menu-top menu-top-first menu-icon-dashboard', 'menu-dashboard', 'div' );
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:
$submenu[ 'index.php' ][0] = array( __('Dashboard'), 'read', 'index.php' );
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 namens custom_menu_order
... Dieser Filter wird immer zurückgegeben false
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:
function custom_menu_order($menu_ord) {
if (!$menu_ord) return true;
return array('index.php', 'edit.php', 'edit-comments.php');
}
add_filter('custom_menu_order', 'custom_menu_order');
add_filter('menu_order', 'custom_menu_order');
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:
function custom_menu_order($menu_ord) {
if (!$menu_ord) return true;
return array('index.php', 'edit.php?post_type=stack_exchange_questions');
}
add_filter('custom_menu_order', 'custom_menu_order');
add_filter('menu_order', 'custom_menu_order');
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.