2012-04-04 12 views
5

Pracuję nad Wordpress-Design i chcę utworzyć niestandardowe menu.Dodawanie klasy 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>'; 
} 

Problem polega na tym, że potrzebuję "aktualnej strony" -klasy, która jest tworzona przez WordPressa - w menu standardowym.

Wszelkie pomysły, jak dodać tę klasę?

Odpowiedz

12

Możesz porównać na bieżącej stronie/kota itp. ID z pozycjami menu id_obiektu, który jest identyfikatorem strony/kategorii itd., Z którą jest powiązany.

Coś jak (niesprawdzonego);

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

Dzięki bardzo :-) – Styler2go

+0

z jakiegoś powodu pracował tylko dla mnie ze zwykłym równych podwójnych (==) zamiast łóżkowy równa. – deweydb

+1

Nie zadziała, jeśli wybrano element menu kategorii, na przykład jako id_obiektu ma wtedy wartość cat_id. – pie6k

9

czas Rozwiązanie: Funkcja

WordPress że dodaje tych klas jest _wp_menu_item_classes_by_context(). To się już nazywa, gdy używasz wp_nav_menu, ale nie wp_get_nav_menu_items. Na szczęście, ten ostatni zapewnia filtr więc możemy zrobić to sami:

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

Jest to bardzo przydatne - biorę $ itemy i poprawiam klasy za pomocą instrukcji switch, która pozwala mi dodać więcej CSS friendly nazwy znaczników dla moich programistów. Dużo fajniej niż walka z piechurami :) –

Powiązane problemy