Page and Sub-page Menus In Wordpress

Written by Chris on September 17, 2007 – 6:52 pm -

Recently I wanted to change the theme I use on my personal blog to the following: http://www.wpdesigner.com/2007/01/22/digg-3-columns-wordpress-theme/ as the current one I was using was pretty awful (to say the least) and this was a lot better :)

I liked this theme but unfortunately it lacked one thing (as do a lot of other themes I've used) - an auto generating set of page menu tabs at the top. The default theme just had a link to the home and about pages, so I added this in and it now works exactly the way I wanted it to. I've pasted the code below should you wish to do something similar.

This mod basically creates a list of all the parent pages along the top (which are rendered as tabs due to the css), and then when a link of a parent page is clicked, it displays the home tab, the tab for the parent page and then the list of tabs for the sub pages of that parent page.

On my site so far I only have one level of sub pages below the parent, but I believe this should work for any hierarchy of sub-sub pages - if you use this code and it does please post a comment to let me know.

Also this is a bit rough - the next time I use it I will probably clean it up a bit, but I know it works for now. If you'd like to provide me with a cleaner version before I have chance to work on it please feel free to drop me a line, and if it works I'll also post it here.

  1.  
  2. <div id="header">
  3.  
  4.         <div id="menu">
  5.                 <ul>
  6.                         <li><a href="<?php bloginfo('url'); ?>/" title="<?php bloginfo('name'); ?>"><?php _e('Home'); ?></a></li>
  7.  
  8.  
  9. <?php
  10.  
  11. // From http://codex.wordpress.org/Template_Tags/wp_list_pages
  12.  
  13. $defaults = array('depth' => 1,
  14.                   'show_date' => '',
  15.                   'date_format' => get_option('date_format'),
  16.                   'child_of' => 0,
  17.                   'exclude' => '2, 53',
  18.                   'title_li' => '',
  19.                   'echo' => 1,
  20.                   'authors' => '',
  21.                   'sort_column' => 'menu_order, post_title');
  22.  
  23. if($post->post_parent)
  24.     $children = wp_list_pages("title_li=&child_of=".$post->post_parent."&echo=0");
  25. else
  26.     $children = wp_list_pages('title_li=&child_of='.$post->ID.'&echo=0');
  27.  
  28. if ($children)
  29. {  
  30.     if(intval($post->post_parent)>0)
  31.     {
  32.         wp_list_pages('title_li=&include='.$post->post_parent);
  33.     }
  34.     else
  35.     {
  36. ?>
  37. <li><a href="<?php echo get_permalink($post->ID); ?>" title="<?php the_title(); ?>"><?php the_title();  ?></a></li>
  38. <?php        
  39.  
  40.  
  41.  
  42.     }
  43.     echo $children;
  44. }
  45. else
  46. {
  47. ?>
  48. <li><a href="<?php echo get_permalink(2); ?>" title="<?php _e('About'); ?>"><?php _e('About'); ?></a></li>
  49. <?php
  50. wp_list_pages($defaults);
  51. }
  52. ?>
  53.  
  54.                 </ul>
  55.         </div>
  56.  


Popularity: 18% [?]

Sphere: Related Content


Tags: , , , , , ,
Posted in PHP, Wordpress | 2 Comments »
RSS

  • Translator

    English flagChinese (Simplified) flagChinese (Traditional) flagDutch flagFrench flagGerman flag
    Greek flagItalian flagJapanese flagKorean flagPortuguese flagRussian flag
    Spanish flag     
    By N2H
  • Also Find Me On

    Delicious  Digg  Facebook  Flickr  FriendFeed  Last.fm  LinkedIn  LiveJournal  Ma.gnolia  MyBlogLog  MySpace  StumbleUpon  Technorati  Twitter  YouTube  



  • Find job
  • Books
  • Online Advertising
  • MPAA
  • Mortgage