2010-08-24 3 views
7

ist es möglich, eine Art von Klasse wie 'Pfeil' oder eine Spanne innerhalb der Menüs hinzufügen, die Untermenüs (in Wordpress) haben? es scheint, dass Sie dies tun können, ist mit Javascript, aber ich möchte wissen, ob es eine PHP-Lösung ist ...PHP/Wordpress - hinzufügen Pfeile zu übergeordneten Menüs

in WP 3.0, sah ich, dass aktive Menüs die "Eltern" oder "Vorfahren" -Klassen auf ihnen haben , aber das ist nur für aktives Menü, und ich brauche es auch für inaktive

+0

zu setzen Verwenden Sie den Menü-Builder in 3.0? Oder verwenden Sie Seiten oder Kategorien für Nav? Bitte erläutern Sie, wie Sie Menüs erhalten und illustrieren Sie mit Ihrem Arbeitscode, damit wir Ihnen besser helfen können. – kevtrout

+0

Ich benutze die eingebauten benutzerdefinierten Menüs – Alex

Antwort

12

Diese Funktionalität sollte wirklich im WordPress-Kern sein!
Wie auch immer, ich habe mir die Menüvorlagenquelle angesehen, die Sie in einem Kommentar zu der anderen Antwort gesendet haben, und habe eine (eher hacky) Methode gefunden, eine Klasse zu Menüeinträgen mit Kindern hinzuzufügen. Es untergliedert den Standard-Walker grundsätzlich, um das Standardverhalten zu erweitern. Es ist wahrscheinlich am besten, wenn Sie es in die functions.php Ihres Themas einfügen. Hier ist der Code:

<?php 
class Arrow_Walker_Nav_Menu extends Walker_Nav_Menu { 
    function display_element($element, &$children_elements, $max_depth, $depth=0, $args, &$output) { 
     $id_field = $this->db_fields['id']; 
     if (!empty($children_elements[$element->$id_field])) { 
      $element->classes[] = 'arrow'; //enter any classname you like here! 
     } 
     Walker_Nav_Menu::display_element($element, $children_elements, $max_depth, $depth, $args, $output); 
    } 
} 
?> 

es zu nennen, werden Sie das walker Argument hinzufügen müssen, wenn Sie wp_nav_menu() in Ihrem Thema nennen, etwa so:

<?php 
wp_nav_menu(array('walker' => new Arrow_Walker_Nav_Menu, [other arguments...])) 
?> 

Hoffnung, die für Sie arbeitet! Ich habe es nur oberflächlich getestet, aber es scheint zu funktionieren. Lassen Sie mich wissen, ob es Randfälle gibt, bei denen das Hinzufügen der Klasse fehlschlägt.

+0

heiliger Mist, es funktioniert! danke: D – Alex

+0

gibt es nur eine Situation, in der es fehlschlägt: wenn in den Argumenten (Fallback_cb) eine Callback-Funktion angegeben ist, dh. Wenn Sie kein benutzerdefiniertes Menü erstellt haben, ruft wp_nav_menu Menüelemente von der Funktion wp_page_menu() ab, die einen anderen Walker verwendet. – Alex

+0

Ja - der von wp_page_menu verwendete Walker erlaubt das Hinzufügen von Klassen nicht so einfach. Ich werde einen Blick darauf werfen und sehen, ob ich mir in den nächsten Tagen einen Workaround vorstellen kann und werde meine Antwort bearbeiten, wenn ich etwas finde. –

3

Ich kenne keine native WordPress-Unterstützung dafür, aber Sie könnten es leicht mit einigen jQuery tun.

<script type="text/javascript"> 
$("#menu-id ul li:has(ul)").addClass("parent"); 
</script> 
+0

Danke, das wusste ich. Ich habe mich gefragt, ob es eine Möglichkeit gibt, dies mit PHP zu tun. Das Problem mit der JS-Methode ist, dass Sie während des Ladens der Seite ein kleines "Flackern" bekommen, wenn die Menüpunkte eine variable Breite haben – Alex

+0

Sie fragen nach einer Möglichkeit, den HTML-Code zu ändern, den WP generiert , dann? Es gibt keine integrierte Unterstützung dafür oder wie Sie Ihre Vorlagen einfach anpassen können. – Rup

+0

gut können Sie die gesamte Menüausgabe (eine Zeichenfolge) und ändern Sie es, bevor es Echo, aber ich weiß nicht, was ich dort ändern könnte ... die Menüvorlage ist hier: http: //core.trac .wordpress.org/browser/trunk/wp-includes/nav-menu-template.php – Alex

0

Die einfache und bescheidene Art und Weise die Klasseneltern zum Hauptmenü hinzufügen, wenn es

Untermenü hat

und der Stil ist

<style type="text/css"> 
     .main-navigation .parent > a, .main-navigation .parent > a:hover { 
      background-image: url("images/arrow.png"); 
      background-position: right center; 
      background-repeat: no-repeat; 
    } 

    </style> 
3

Wenn Sie wie ich und möchte hinzufügen ein HTML-Pfeil in einem Bereich zu Ihrem übergeordneten Menüelement, fügen Sie eine Zeile wie folgt in Donald Harvey's Kunden Walker-Klasse hinzu:

Sie können diesen HTML-Code auch direkt zur Menübezeichnung auf der WP admin> Menüseite hinzufügen, aber das ist keine gute Möglichkeit.

gebloggt ich ein wenig über diese hier http://cameronnokes.com/blog/adding-an-icon-to

0

Ich weiß nicht, was Frage ist, aber wir können durch css wie dieser Pfeil im Menü hinzufügen:

.menu li > a:after { 
    color: #fff; 
    content: ' ▾'; 
} 

.menu li > a:only-child:after { 
    content: ''; 
} 
1

Gerade diese Paste in Ihrem css Code und es wird wie erwartet funktionieren.

.nav-menu li > a:after { 
    color: #888; 
    content: ' ▾'; 
} 

.nav-menu li > a:hover:after { 
    color: #444; 
    content: ' ▾'; 
} 

.nav-menu li > a:only-child:after { 
    content: ''; 
} 

Ps. Vergessen Sie nicht, Ihre Seite UTF-8