2012-04-04 13 views
5

Estoy trabajando en un Wordpress-Design y quiero crear un menú personalizado.Agregar clase 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>'; 
} 

El problema es que necesito la "corriente-página" -Class, que es la creación de WordPress - en el menú estándar.

Any Ideas ¿cómo agregar esta clase?

Respuesta

12

Puede hacer una comparación en la página/gato actual, etc. ID contra los elementos del menú object_id, que es el ID de la página/categoría, etc. está vinculado a.

Algo así como (no probado);

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

Muchas gracias :-) – Styler2go

+0

Por alguna razón esto sólo funcionó para mí con iguales dobles normales (==) en lugar del triple es igual. – deweydb

+1

No funcionará si ha elegido el elemento del menú Categoría, por ejemplo, como object_id es cat_id a continuación. – pie6k

9

Tiempo de solución: la función

de WordPress que añade estas clases es _wp_menu_item_classes_by_context(). Esto ya se llama cuando usa wp_nav_menu pero no wp_get_nav_menu_items. Afortunadamente, este último proporciona un filtro para que podamos hacerlo nosotros mismos:

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

Esto es muy útil - Tomo los $ artículos y enmiendas las clases con una declaración de cambio que me permite agregar algunos más amigables con CSS nombres de etiquetas para mis desarrolladores front-end. Mucho mejor que pelear con los senderistas :) –

Cuestiones relacionadas