How to Remove the <ul> container with the wp_nav_menu function

Although WordPress has an option to remove the container from the wp_nav_menu function, that is generally for the `

` and not the `

    ` that wraps the `

  • ` items. So, while you can use the options to remove the `
    `, the `

      ` will stay. It might be good to use a filter method like add_filter( ‘wp_nav_menu’, ‘remove_ul’ ) to accomplish the filter I have below, but that the filter was not being applied at the time of writing, so I (used to) recommend changing the `echo` option to `false`, and returning the value of the `wp_nav_menu` function to a variable, and then running a regular expression on it to remove the encompassing `
      ` and `

    `.

    This code worked for me, running WordPress 3.0.4:

    $options = array(
    ‘echo’ => false
    ,’container’ => false
    );

    $menu = wp_nav_menu($options);
    echo preg_replace( array( ‘#^

      ]*>#’, ‘#

    $#’ ), ”, $menu );

    ###Use Site Pages as a Default Fallback

    If you want it to use the site’s pages as a default (if no menu is specified and the function is called), you can add an additional function and change the options array as shown:

    function default_page_menu() {
    wp_list_pages(‘title_li=’);
    }

    $options = array(
    ‘echo’ => false
    ,’container’ => false
    ,’fallback_cb’=> ‘default_page_menu’
    );

    $menu = wp_nav_menu($options);
    echo preg_replace( array( ‘#^

      ]*>#’, ‘#

    $#’ ), ”, $menu );

    ###Update: A Better Way to Remove the `

      ` element

      I think as of WordPress 3.1 they added a new parameter to make it easier to get rid of the `

      ` that wraps the menu. It is called `items_wrap`

      When you call `wp_nav_menu` you will want to specify that option.

      By default it is set as:

      ‘items_wrap’ => ‘

      %3$s

    To get the `ul` to go away change it to:

    ‘items_wrap’=>’%3$s’

    Also, someone had a question about changing the `

  • ` elements to ``. I would recommend doing this with CSS instead (i.e. just set them to display as blocks), but if really want to do that you might want to use a regular expression like this:

    $menu_items = preg_replace(‘#

  • #’,’/div>’,$menu_items);

    Or use a menu walking function like the one described on this page.
    How To Remove The Lt Ul Gt Container With The Wp Nav Menu Function

Related Posts:

  • No Related Posts
This entry was posted in Tech Tips, Web Development and tagged , . Bookmark the permalink.