2012-04-04 10 views
5

Ich arbeite an einem Wordpress-Design und möchte ein benutzerdefiniertes Menü erstellen.Klasse hinzufügen current_page_item

$items = wp_get_nav_menu_items('Menu', array(
    'order'     => 'ASC', 
    'orderby'    => 'menu_order', 
    'post_type'    => 'nav_menu_item', 
    'post_status'   => 'publish', 
    'output'     => ARRAY_A, 
    'output_key'    => 'menu_order', 
    'nopaging'    => true, 
    'update_post_term_cache' => false)); 
echo '<pre>'; print_r($items); echo '</pre>'; 
foreach($items as $item){ 
    echo '<div class="menu_entry"><a href="'.$item->url.'">'.$item->title.'</a></div>'; 
} 

Das Problem ist, ich brauche die „Strom Seite“ -Klasse, die Wordpress zu erstellen ist - im Standardmenü.

Irgendwelche Ideen, wie man diese Klasse hinzufügt?

Antwort

12

Sie können einen Vergleich der aktuellen Seite/cat etc ID mit den Menüobjekten object_id durchführen. Dies ist die ID der Seite/Kategorie usw., mit der sie verknüpft ist.

Etwas wie (ungeprüft);

global $post; 
$thePostID = $post->ID; 
foreach($items as $item){ 

    if($thePostID === $item->object_id) { 
     echo '<div class="menu_entry"><a href="'.$item->url.'" class="current-menu-item">'.$item->title.'</a></div>'; 
    }else{ 
     echo '<div class="menu_entry"><a href="'.$item->url.'">'.$item->title.'</a></div>'; 
    } 

} 
+0

Vielen Dank :-) – Styler2go

+0

Aus irgendeinem Grund dies nur für mich mit einem Standard-Doppel Gleichen gearbeitet (==) anstelle des Tripple entspricht. – deweydb

+1

Es wird nicht funktionieren, wenn Sie den Menüpunkt Kategorie ausgewählt haben, zum Beispiel als object_id ist dann cat_id. – pie6k

9

Lösung Zeit:

Wordpress die Funktion, die diese Klassen hinzufügt, ist _wp_menu_item_classes_by_context(). Dies wird bereits dann aufgerufen, wenn Sie wp_nav_menu aber nicht wp_get_nav_menu_items verwenden. Glücklicherweise stellt dieser ein Filter so können wir es selbst tun:

add_filter('wp_get_nav_menu_items', 'prefix_nav_menu_classes', 10, 3); 

function prefix_nav_menu_classes($items, $menu, $args) { 
    _wp_menu_item_classes_by_context($items); 
    return $items; 
} 
+0

Dies ist sehr nützlich - ich nehme die $ -Einträge und ändern Sie die Klassen mit einer switch-Anweisung, so dass ich mehr CSS freundlich hinzufügen Tag-Namen für meine Front-End-Entwickler. Viel schöner als mit Walkern zu kämpfen :) –