First page of the wp_page_menu archive.

Upgrade wp_page_menu() to wp_nav_menu()

Posted by The Doctor on Jul 12, 2010 with No Comments | Short Link
Last modified by The Doctor on July 25, 2010
in Functions
as , , ,

WordPress version 3.0 has been live for a while and a lot of people want to make use of the wp_nav_menu() functionality but they are using one of the older template tags: wp_page_menu(); wp_list_pages(); or, wp_list_categories().

This post will be dealing with function arguments in common between wp_nav_menu() and wp_page_menu(). Follow-up posts will be covering wp_list_pages() and wp_list_categories(). I will not be covering the specific use for each function’s arguments; the idea is to help show how these options correlate to one another.

Let’s start with the full default of wp_nav_menu() 1 explicitly displayed:

wp_nav_menu( array(
    'menu'              => '',
    'container'         => 'div',
    'container_class'   => '',
    'container_id'      => '',
    'menu_class'        => 'menu',
    'menu_id'           => '',
    'echo'              => true,
    'fallback_cb'       => 'wp_page_menu',
    'before'            => '',
    'after'             => '',
    'link_before'       => '',
    'link_after'        => '',
    'depth'             => 0,
    'walker'            => '',
    'theme_location'    => ''
    ) );

Followed by the same explicit defaults of wp_page_menu() 2, 3:

wp_page_menu( array(
    'sort_column'       => 'menu_order, post_title',
    'include'           => '',
    'exclude'           => '',
    'show_home'         => false,
    'menu_class'        => 'menu',
    'echo'              => true,
    'link_before'       => '',
    'link_after'        => ''
    ) );

Now onto updating wp_page_menu() to wp_nav_menu(), which turns out to be rather simple.

Here is the break-down of the wp_page_menu() default options from above:

  • 'sort_column' – not used
  • 'include' – not used
  • 'exclude' – not used
  • 'show_home' – not used (see bonus section below)
  • 'menu_class' – same as wp_nav_menu()
  • 'echo' – same as wp_nav_menu()
  • 'link_before' – same as wp_nav_menu()
  • 'link_after' – same as wp_nav_menu()

First off ‘sort_column’, ‘include’, and ‘exclude’ are replaced by the end-user’s choices using the UI of wp_nav_menu() found under Appearance | Menu in the dashboard. The balance of the default options are the same in wp_nav_menu(), with the exception of 'show_home' => false which is the “bonus” content.

Upgrading from wp_page_menu() to wp_nav_menu() may be as easy as a simple find and replace operation.

Bonus – Although the default in wp_page_menu() does not show a home page link you can add a custom menu item in wp_nav_menu() if you want one to appear. You may need to edit your theme to remove the orginal “home” link if one was being generated before upgrading.
NB: You may also need to add this line of code to your ‘functions.php’ template file to add custom menu support to your theme: add_theme_support( 'menus' );

Going Home

Posted by The Doctor on Nov 25, 2009 with 1 Comment | Short Link
Last modified by The Doctor on March 17, 2010
in Functions
as , , , , ,

Creating text links back to the home page, or front page, of a blog are done in many ways. Many themes use the blog Title as a link back to the home page. It is also very common for the menu or navigation bar to link to the home page. This article will cover some examples of links for going home.

Let’s start with an obvious example: a link from the blog title back to the home page.

<a href="http://wpfirstaid.com/">WP First Aid</a>

The above example is very, very basic … let’s dress it up a bit:

<h1 class="blog-title"><a href="http://wpfirstaid.com/" alt="Going Home: WP First Aid">WP First Aid</a></h1>

Now we have a title using the h1 element and a CSS class of blog-title with some alt text letting the reader know where the link will be going. This is better but how does this help you? Let’s make use of WordPress’ built in functions to make this example more generic and easily transferable.

<h1 class="blog-title"><a href="<?php bloginfo('url'); ?>" alt="Going Home: <?php bloginfo('name'); ?>"><?php bloginfo('name'); ?></a></h1>

This example makes use of the WordPress function bloginfo(). Here is a link to the WordPress codex for this function; and, here is a link to the get_bloginfo() function which provides additional details.

Our next example is adding a home page link to a navigation bar. Many navigation bars are generated with one of three WordPress functions: wp_list_pages(), wp_page_menu(), or wp_list_categories(). The wp_page_menu function uses a value that creates a home page link, for example:

<?php wp_page_menu('show_home=1'); ?>

The wp_page_menu function includes all the available parameters of the wp_list_pages function and also includes wrapping the output in an unordered list.

To add a home page link into a theme using the wp_list_pages function you may look at the following example for guidance:

<ul>
  <li><a href="<?php bloginfo('url'); ?>" alt="Going Home: <?php bloginfo('name'); ?>"><?php bloginfo('name'); ?></a></li>
  <?php wp_list_pages(); ?>
</ul>

Adding a home page link to a navigation menu created with the wp_list_categories function is very similar. Let’s take a quick look at it below.

<ul>
  <li><a href="<?php bloginfo('url'); ?>" alt="Going Home: <?php bloginfo('name'); ?>"><?php bloginfo('name'); ?></a></li>
  <?php wp_list_categories(); ?>
</ul>

The only difference in the above two examples are the function call. The links we added to the home page are almost identical to the the link example we used for the blog title.

Feel free to use any of the above examples in your own works. Of course, there could be additional CSS elements needed to work with your theme’s style but I will leave that as an exercise for you … or feel free to contact us with more complex code requirements.