Ich entwickle ein untergeordnetes Thema mit Wordpress 3.4.2 und der Entwicklungsversion des Options Framework von David Price . Dies ist mein erstes Thema, und ich bin relativ neu in diesem Bereich. Daher habe ich mir den Wordpress-Codex angesehen und die Registrierung von Elementen in der API überprüft.
Ohne externe Dateien außerhalb meines Themas zu manipulieren, habe ich mich gefragt, ob es eine Möglichkeit gibt, neu zu ordnen, wo sich die Seite " Themenoptionen" in der Hierarchie des Menüs " Darstellung" befindet. Wenn also mein Thema aktiviert ist, entspricht die Position nicht der Position das erste Bild aber wie das zweite.
Ich weiß, dass Sie entweder ein Menü (wie die Registerkarte Darstellung , Plugins , Benutzer usw.) oder ein Untermenü ( Themen , Widgets , Menüs usw.) erstellen können , aber wie würde ich vorgehen, um beispielsweise ein Untermenü festzulegen? von oben?
Soweit ich weiß, wird irgendwo eine Bestellung aufgerufen und danach werden weitere zusätzliche Seiten in der functions.php
Datei platziert?
In meiner Datei functions.php:
// Add our "Theme Options" page to the Wordpress API admin menu.
if ( !function_exists( 'optionsframework_init' ) ) {
define( 'OPTIONS_FRAMEWORK_DIRECTORY', get_template_directory_uri() . '/inc/' );
require_once dirname( __FILE__ ) . '/inc/options-framework.php';
}
Vielen Dank.
quelle
Warning: Invalid argument supplied for foreach() in /wp-content/themes/mythemename/functions.php on line 1444
Zeile 1444:foreach ($submenu[$menus] as $index => $value){
undWarning: ksort() expects parameter 1 to be array, null given in /wp-content/themes/mythemename/functions.php on line 1468
Zeile 1468:ksort($submenu[$menus]);
Antworten:
Hier ist ein Beispiel;
Um zunächst die Reihenfolge der Untermenüelemente anhand des Array-Schlüssels zu ermitteln, können Sie eine Anweisung für die
var_dump
globale Variable $ submenu ausführen, die Folgendes ausgibt:(Ich verwende das Menü Beiträge und das Untermenü als Beispiel)
Wir können sehen, dass mein Untermenüelement mit einem Schlüssel von 17 nach den Standardelementen zum Array hinzugefügt wird.
Wenn ich zum Beispiel meinen Untermenüpunkt hinzufügen möchte, muss ich dies direkt nach dem Untermenüpunkt Alle Beiträge tun, indem ich meinen Array-Schlüssel auf 6, 7, 8 oder 9 setze (alles nach 5 bzw. vor 10).
Das ist wie man es macht...
Ergebnis,
... probieren Sie es aus und lassen Sie uns wissen, wie es Ihnen geht!
Update 1:
Fügen Sie dies Ihrer Datei functions.php hinzu.
Mein Update enthält eine etwas einfachere Möglichkeit, die Einstellung Ihrer Menüposition vorzunehmen. Sie müssen nur den Namen Ihrer Untermenüseite und die gewünschte Position innerhalb des Menüs angeben.
Wenn Sie jedoch eine Untermenüseite auswählenUm dies zu umgehen, bietet Kaisers Beispiel einige grundlegende Überprüfungen dafür.$location
, die der eines vorhandenen Schlüssels entspricht, wird dieser Schlüssel mit Ihrem überschrieben, sodass der Menüpunkt mit Ihrem Menüpunkt an seiner Stelle verschwindet. Erhöhen oder verringern Sie die Anzahl, um Ihr Menü korrekt zu ordnen, wenn dies der Fall ist. Wenn jemand ein Plugin installiert, das denselben Menübereich betrifft und für das dasselbe$location
wie Ihr Untermenüelement verwendet wird, tritt dasselbe Problem auf.Update 2:
Ich habe einen zusätzlichen Codeblock hinzugefügt, der alle vorhandenen Schlüssel im Array mit dem gewünschten Code vergleicht.
$location
Wenn eine Übereinstimmung gefunden wird, erhöhen wir unseren$location
Wert um,1
um zu vermeiden, dass sich Menüelemente gegenseitig überschreiben. Dies ist der Code, der dafür verantwortlich ist.Update 3: (Skript überarbeitet, um das Sortieren mehrerer Untermenüelemente zu ermöglichen)
Im obigen Beispiel können Sie mehrere Untermenüs und mehrere Elemente pro Untermenü als Ziel festlegen, indem Sie die Parameter innerhalb der
$target_menu
Variablen, die ein mehrdimensionales Array von Werten enthält, entsprechend einstellen .Diese Überarbeitung verhindert, dass sich Untermenüelemente gegenseitig überschreiben, wenn sie dieselbe Taste (Position) haben, da sie durchlaufen, bis eine verfügbare Taste (Position) gefunden wird, die nicht vorhanden ist.
quelle
Warning: Invalid argument supplied for foreach() in /wp-content/themes/mythemename/functions.php on line 1444
Linie 1444:foreach ($submenu[$menus] as $index => $value){
undWarning: ksort() expects parameter 1 to be array, null given in /wp-content/themes/mythemename/functions.php on line 1468
Linie 1468:ksort($submenu[$menus]);
Das Admin-Menü (und seine Probleme)
Da im Admin-Menü keine Hooks und keine öffentliche API vorhanden sind (mit der die Elemente verschoben werden können), müssen Sie einige Problemumgehungen verwenden. Die folgende Antwort zeigt Ihnen, was Sie in Zukunft erwartet und wie Sie umgehen können, solange wir den aktuellen Kernstatus haben.
Zuerst muss ich beachten, dass scribu an einem Admin-Menü-Patch arbeitet , der die Handhabung erheblich vereinfachen soll. Die aktuelle Struktur ist ziemlich durcheinander und ich habe einen Artikel darüber geschrieben , der bald veraltet sein wird. Erwarten Sie, dass WP 3.6 die Dinge vollständig ändert.
Dann gibt es auch den Punkt, dass Sie Optionsseiten nicht mehr für Themen verwenden sollten. Dafür gibt es heutzutage den »Theme Customizer« .
Das Plugin
Ich habe ein Plugin geschrieben, das dies mit der Standardseite "Themenoptionen" für die Seite "TwentyEleven / Ten-Optionen" testet. Wie Sie sehen können, gibt es keine echte API, die eine Position zulässt. Also müssen wir das Globale abfangen.
Kurz gesagt: Folgen Sie einfach den Kommentaren und sehen Sie sich die Admin-Hinweise an, die ich hinzugefügt habe, um Ihnen eine Debug-Ausgabe zu geben.
Viel Glück und hab Spaß.
quelle
Benutzerdefinierte Filter
Es gibt eine andere Möglichkeit, dies zu erreichen. Fragen Sie mich nicht, warum ich vorher nicht darüber nachgedacht habe. Auf jeden Fall gibt es einen Filter für eine benutzerdefinierte Menüreihenfolge. Stellen Sie es einfach auf ein
true
, um eine benutzerdefinierte Bestellung zuzulassen. Dann haben Sie einen zweiten Haken, um die Hauptmenüpunkte zu bestellen. Dort fangen wir einfach die abglobal $submenu
und wechseln unsere Untermenüpunkte.In diesem Beispiel wird das Menüelement über das Widgets-Element verschoben , um seine Funktionalität zu demonstrieren. Sie können es nach Ihren Wünschen anpassen.
quelle
function wpse70916_custom_submenu_order( $menu )
, um nicht nur das Menü , sondern auch das Thema neu zu ordnen Optionen , Widgets , Editor usw. machen es ziemlich flexibel und auch damit sich die Elemente nicht gegenseitig überschreiben? Vielen Dank.