Separator zum Admin-Menü hinzufügen?

22

Weiß jemand, wie man ein Admin-Menü-Trennzeichen hinzufügt? Ich fand dies aber es hat nicht geholfen.

Irgendwelche Ideen?

user1147
quelle
Falls noch jemand nach der Antwort sucht, kann dieses Plugin den Job erledigen.
user31760

Antworten:

33

Hier ist ein schneller und schmutziger Weg, um das zu bekommen, was Sie wollen.

Hintergrund

WordPress speichert Admin-Menüabschnitte in einem globalen Array namens $menu. Um ein Trennzeichen hinzuzufügen, fügen Sie dem $menuArray ein Element hinzu, indem Sie einen Index verwenden, der zwischen den Indizes der Optionen liegt, die Sie trennen möchten.

Verwendung der add_admin_menu_separator()Funktion

Also habe ich eine Funktion geschrieben, um die Logik für diesen Aufruf zu kapseln add_admin_menu_separator(). Sie müssen eine Array-Indexnummer auswählen, die höher ist als die Option, nach der Sie ein Trennzeichen hinzufügen möchten, und dann die Funktion aufrufen, die den add_admin_menu_separator()Index als Parameter übergibt.

Beispielsweise:

add_admin_menu_separator(37);

Die add_admin_menu_separator()Funktion selbst

Hier ist die Definition der Funktion, add_admin_menu_separator()die Sie in die functions.phpDatei Ihres Themas kopieren können . Ja, es ist geheimnisvoll, aber der Code, der das globale $menuArray erstellt und verwendet, ist es auch . (Es ist geplant, es zum Glück irgendwann zu verwerfen, aber das wird wahrscheinlich ein paar Jahre dauern.)

function add_admin_menu_separator($position) {
  global $menu;
  $index = 0;
  foreach($menu as $offset => $section) {
    if (substr($section[2],0,9)=='separator')
      $index++;
    if ($offset>=$position) {
      $menu[$position] = array('','read',"separator{$index}",'','wp-menu-separator');
      break;
    }
  }
  ksort( $menu );
}

Das Finden der Index in $menudie Sie benötigen ,

Um herauszufinden , welche Indexnummer , die Sie brauchen Sie können ein tun var_dump()von $GLOBALS['menu']aus einem admin_initHaken. Hier ist ein bisschen Code, den Sie functions.phpvorübergehend in die Datei Ihres Themas einfügen können, um die Werte zu ermitteln. Dies funktioniert nur, wenn Sie eine URL anfordern /wp-admin/ , die mitfunctions.php beginnt (Sie müssen sich jedoch mit FTP und nicht mit dem integrierten Design-Editor befassen, da Sie sonst den Zugriff auf Ihre Site verlieren, zumindest bis Sie einen FTP-Zugriff auf die Datei Ihres Themas erhalten !) :

add_action('admin_init','dump_admin_menu');
function dump_admin_menu() {
  if (is_admin()) {
    header('Content-Type:text/plain');
    var_dump($GLOBALS['menu']);
    exit;
  }
}

Siehe auch:

Übrigens, möglicherweise finden Sie diese Links im Allgemeinen hilfreich für die Arbeit mit Admin-Menüs:

Obwohl meine Admin-Menüklassen derzeit keine einfache Möglichkeit zum Hinzufügen von Trennzeichen bieten, werde ich das jetzt hinzufügen, wenn ich Zeit habe.

MikeSchinkel
quelle
Danke Mike, ich habe die ganze Nacht das globale var-Menü durchgesehen, aber es ist mir nicht gelungen, ein Trennzeichen hinzuzufügen. Jetzt ist mir viel klarer, wie Menüs in wp funktionieren.
user1147
Hi @ user1147 : Ja, sie sind sehr schwer herauszufinden. Als ich das erste Mal musste, brauchte ich ziemlich viel Zeit und habe immer noch Probleme mit ihnen. Deshalb habe ich diese Funktionen geschrieben, damit ich es von nun an ganz einfach machen kann! Wie auch immer, ich bin froh, dass meine Antwort geholfen hat.
MikeSchinkel
1
@MikeSchinkel Diese Methode funktioniert mit Wordpress 3.3.1 nicht.
Jim Geurts
1
@ JimGeurts - es funktioniert auch nicht für mich: /
Evan Mattson
2
Ich habe es gerade getestet und es "funktioniert" in 4.5, aber WordPress hat beschlossen, die Zeilen loszuwerden, da sie einfach nicht mehr angezeigt werden. Ich denke, die Lösung, wenn man CSS hinzufügt, aber für mein ganzes Leben kann ich nicht herausfinden, welches CSS ich hinzufügen soll, da ich ein Back-End-Entwickler bin und an CSS scheiße bin. Vielleicht kann jemand anderes vorschlagen?
MikeSchinkel
4

Es ist ganz einfach:

add_action( 'admin_init', 'add_sep' );
function add_sep() {

    if ( ! is_admin() )
        return false;

    global $menu;
    $sep = $menu[4]; // that's the default separator
    $pos = 6; // change it for the desired position
    $menu = array_merge(
        array_slice( $menu, 0, $pos ),
        array( $sep ),
        array_slice( $menu, $pos + 1, -1)
    );
    $menu[ $pos - 1 ][4] .= ' menu-top-last';
    $menu[ $pos + 1 ][4] .= ' menu-top-first';

}

Hinweis: Die Standardtrennzeichenposition ( $menu[4]) kann unterschiedlich sein, je nachdem, welche Konfiguration Sie (oder Ihre Plugins) vor diesem Hook vorgenommen haben.

Natürlich können Sie auch die Selbstbeobachtung der Klassen menu-top-firstund optimieren menu-top-last.

vmassuchetto
quelle
2

Einige Probleme mit nicht hinzugefügten Trennzeichen waren darauf zurückzuführen, dass WordPress doppelte Trennzeichen entfernt. Das Hinzufügen ksort($menu);am Ende der Funktion hat das Problem behoben.


quelle
1

Dies baut auf der Antwort von MastaBaba auf, ersetzt jedoch nichts an der von Ihnen angegebenen Position - es wird lediglich das Trennzeichen nachträglich hinzugefügt.

Verwendet auch eine anonyme Funktion, sodass diese nur mit PHP ab Version 5.3 kompatibel ist.

add_action( 'admin_menu', function () {
    $position = 29;
    global $menu;
    $separator = [
        0 => '',
        1 => 'read',
        2 => 'separator' . $position,
        3 => '',
        4 => 'wp-menu-separator'
    ];
    if (isset($menu[$position])) {
        $menu = array_splice($menu, $position, 0, $separator);
    } else {
        $menu[$position] = $separator;
    }
});
robrecord
quelle
0

Es ist ein wenig schwierig zu bestimmen, was Sie versuchen, aber ich denke, Sie möchten einen Eintrag der obersten Ebene in das WordPress-Admin-Menü einfügen.

Siehe diese Dokumentation im WordPress-Codex.

Kurz gesagt, Sie suchen nach der Verwendung der add_menu_page()Funktion, die eine Reihe von Argumenten verwendet und ein zusätzliches Element im Verwaltungsmenü als Geschwister von "Dashboard", "Posts", "Media" usw. anzeigt.

Hoffe, ich habe es richtig verstanden. :-)

dgw
quelle
Ich versuche nur, einen Admin-Menü-Separator hinzuzufügen. Vor dem Posten der Frage habe ich versucht, zu verwenden add_menu_page().
user1147
Sieht aus wie MikeSchinkel hat Sie ziemlich gut abgedeckt. Entschuldigung für das Missverständnis. Viel Glück!
dgw
0

Das Folgende zeigt eine Aktion in Wordpress an, die ausgeführt wird, wenn das Admin-Menü gerendert wird. Das Admin-Menü ist ein Array. Hier fügen Sie lediglich ein Array-Element hinzu, das an der von Ihnen angegebenen Position ein Trennzeichen definiert.

Von hier :

add_action( 'admin_menu', 'set_admin_menu_separator' );
function set_admin_menu_separator() {
$position = 79;
global $menu;
$menu[$position] = array(
0   =>  '',
1   =>  'read',
2   =>  'separator' . $position,
3   =>  '',
4   =>  'wp-menu-separator'
);
}

Beachten Sie, dass, obwohl dies eher der aktuell akzeptierten Antwort ähnelt, die aktuell akzeptierte Antwort für mich nicht funktioniert hat (und, nach den Kommentaren zu urteilen, für mehrere andere).

MastaBaba
quelle
Es gibt keinen Unterschied zu der vorhandenen, akzeptierten Antwort, außer dass Sie keine Erklärung geben. Bitte lesen Sie, wie Sie antworten .
fuxia
@toscho: Naja, das funktioniert bei mir und die akzeptierte Antwort nicht.
MastaBaba