it-swarm.com.de

Verwenden von Shortcodes in WP-Menüs in WP 3.1 (über nav_menu_objects)?

Ich habe dieses neue Plugin gefunden

http://wpsmith.net/wordpress/creating-multiple-custom-menus-in-wordpress-3-1

das bedeutet, dass ein neuer 3.1-Hook (wp_nav_menu_objects) verwendet wird, um bestimmte Navigationsmenüelemente aus dem Navigationsmenüelement-Array zu entfernen, bevor sie von der Walker-Klasse analysiert werden, wenn ein Benutzer nicht angemeldet ist. Das Plugin verwendet ein bestimmtes CSS -Klasse als Bezeichner, um zu entscheiden, welche Elemente entfernt werden sollen.

Ich habe mich also gefragt, ob es nicht möglich sein könnte, Shortcodes in den Beschreibungen der Navigationsmenüpunkte zu verwenden, um erweiterte Bedingungen für die Anzeige bestimmter Menüpunkte zu erhalten (z. B. Anzeige auf Seite x, don nicht auf Seite y angezeigt werden, oder, besonders nützlich: automatisches Einfügen von untergeordneten Seiten/Kategorien usw. durch Einfügen in das nav_menu_item-Array, bevor das Array vom Walker analysiert wird)

Aber fügte hinzu

add_filter(‘wp_nav_menu_objects’, ‘do_shortcode’);

verursacht, dass die Seite nicht richtig geladen wird. Kein Fehler mit leeren Seiten, aber die Seite wird direkt nach dem Navigationsmenü-Container div nicht mehr gerendert. Gibt es eine Möglichkeit, die native WP-Shortcode-Funktionalität für diesen Zweck zu verwenden? Oder müsste ein benutzerdefinierter Shortcode-Parser innerhalb der Funktion zum Analysieren des Inhalts von Navigationselementen erstellt werden?

Vielen Dank für alle Ideen!

2
youngmicroserf

Das Problem ist, dass do_shortcode() einen String in seinen ersten Parametern erwartet, während wp_nav_menu_objects ein Array von Menüobjekten übergeben bekommt.

Zum Beispiel müsstest du deine eigene Wrapper-Funktion für do_shortcode schreiben ...

function my_nav_menu_objects_shortcode_mangler($items) {
    foreach ($items as $item) {
        $item->classes = explode(' ', do_shortcode(implode(' ', (array)$item->classes)));
    }
    return $items;
}

könnte funktionieren. Sie müssten sich über die Struktur der Navigationsmenüobjekte ($ item) informieren, indem Sie sich den Quellcode in wp-includes/nav-menu-template.php ansehen und dann ableiten, welche Eigenschaften am besten zu ändern sind und wie (welches Format sie haben, wie dies in einen String konvertiert wird) Sie können einen Shortcode darüber ausführen, usw.).

Es scheint mir jedoch, dass andere Mittel zur Implementierung einer solchen Logik besser sein könnten, als die Shortcode-Funktionalität darin zu hacken.

Beachten Sie auch, dass Sie bei Verwendung dieses Modells keinen Shortcode in einer Eigenschaft Ihres Menüelements haben können und erwarten, dass er die Ausgabe eines anderen ändert ... wie Sie keinen Shortcode in Ihrer Menüelementbezeichnung haben und hoffen, dass er CSS hinzufügt oder entfernt Klassen. Funktioniert einfach nicht so.

1
wyrfel

Was passiert, wenn Sie die Priorität auf beispielsweise 11 ändern?

add_filter(‘wp_nav_menu_objects’, ‘do_shortcode’, 11);

So wird der Filter zum Inhalt in shortcodes.php hinzugefügt. Siehe: http://codex.wordpress.org/Function_Reference/do_shortcode

0
aendrew