WordPress.org

Forums

nav menu question (6 posts)

  1. forgetcolor
    Member
    Posted 8 years ago #

    I'd like a nav menu that highlights the current page (or at least parent page). I have this working based on an example. However, when on a blog post permalink page, I'd like the menu to light up a specific item (Archives). I know I can figure out if I'm on a blog post with is_single(), but I'm not sure how to manip the menu code to accomodate this.

    Basically, I'm talking about a site with a pretty normal blog post filled front page, but with also using Pages with other content. The menu lists each top Page. However, for permalink pages I want the 'Archive' menu item to light up (the Archive Page will serve as an archives index).

    The code I'm using now is:


    <ul class="navigation">
    <?php if (is_home()) {$pg_li .="current_page_item";} ?>
    <li class="<?php echo $pg_li; ?>">
    <a href="<?php bloginfo('siteurl'); ?>" title="home"><span>home</span></a></li>
    <?php wp_list_page('depth=1&title_li=&exclude=6' ); ?>
    </ul>

    It seems like the wp_list_page() is basically running through the list of pages and spitting out <li> tags for each one. How can I intervene and say if is_single() then set 'archives' to current_page_item?
    thanks

  2. BPartch
    Member
    Posted 8 years ago #

    Hello

    See this article about dynamic menu highlighting: http://codex.wordpress.org/Dynamic_Menu_Highlighting

  3. forgetcolor
    Member
    Posted 8 years ago #

    thanks for the reply, i hadn't seen that page!

    however, it looks like the technique listed there works if I list out all of the pages manually in my header (even if I wrap them in php if's). i'm hoping to use this function:


    <?php wp_list_page('depth=1&title_li='); ?>

    to list out all top Pages in the database as menu items on the nav list. this way I don't have to keep updating the header.php every time I change/add a parent Page. But...I still need a way to highlight the 'Archives' page when relevant (i.e. is_single(), etc.).

    The example I'm using gets around this problem with 'home' because it puts it *first* in the list and as such, can do it manually. I suppose I could put 'Archives' last in the list and do it manually also, but I don't want it last.

    ideas?

  4. BPartch
    Member
    Posted 8 years ago #

    Hello

    Well 'archive' pages are different from 'single' pages though there should be no issue with using this method with the wp_list_pages.

    Here is an example:

    <?php /* this is for the current page highlight */
    if ( is_home() || is_single() ) { $current = 'home'; }
    elseif ( is_archive() ) { $current = 'archive'; }
    elseif ( is_page() ) { $current = 'current_page_item'; }
    ?>

    <ul id="nav">
    <li class="home><a href="" title="">Home</a></li>
    <li class="archives"><a href="" title="">Archives</a></li>
    <li class="page_item current_page_item"><a href="" title="">Current Page</a></li>
    </ul>

    Then you need some css for this all to work:

    <style type="text/css">
    /* ------ current page ------ */
    #nav li.<?php echo $current; ?> a {
    font-weight: bold;
    background: #2964C0;
    }
    </style>

    So the above would set the home and single post pages to highlight the "home" li class. It would set the "archive" li class to highlight the archive tab and finally it will set whatever page is on to highlight the "current_page_item" li class.

    Hope it makes sense

  5. rushyama
    Member
    Posted 8 years ago #

    forgetcolor,

    Did you figure out how to do the dynamic highlighting using wp_list_page()? I'm trying to do the exact same thing but am running into the problem you described.

  6. vkaryl
    Member
    Posted 8 years ago #

    That was a LONG time ago....

    Take a look at the way this is handled in the wp-andreas01-12 theme - you should be able to find it through a search at http://themes.wordpress.net/

Topic Closed

This topic has been closed to new replies.

About this Topic

Tags

No tags yet.