How to use the wp_nav_menu() function in WordPress

The use of menus simplifies the process of navigating one’s way through a website. With the wp_nav_menu() function in WordPress, you can quickly and easily construct and manage menus on your website. With the help of this built-in function, you’ll be able to create and show dynamic menus that may be modified to fit your preferences regardless of the theme you’re using. This blog post will walk you through the process of using the wp_nav_menu() function, including providing you with some code samples to follow along with. The following examples assume you are working on your own custom theme or.a child theme within an existing theme. As always, code changes should be tested locally and/or on a staging site before pushing them live.

Getting Started with wp_nav_menu()

The wp_nav_menu() function is quite simple to use. Inserting the function into the template file of your theme, which is often found in header.php or another area where you’d like the menu to appear, is all that is required to display a menu.

Here’s a basic example of using the wp_nav_menu() function:

    'theme_location' => 'primary',
    'container' => 'nav',
    'container_class' => 'main-menu',
    'menu_class' => 'nav-menu',


The wp_nav_menu() function accepts an array of arguments that allow you to customise the appearance and behavior of the generated menu. Let’s dive into the parameters used in the example above:

  1. theme_location: This parameter specifies the location of the menu in your theme. You’ll need to register this location in your theme’s functions.php file. For instance, ‘primary’ could be used for the main navigation menu.
function register_my_menu() {
  register_nav_menu('primary', __('Primary Menu', 'your_theme_name'));
add_action('after_setup_theme', 'register_my_menu');
  1. container: This defines the HTML element that will wrap around the menu. By default, the container is a <div>. In our example, we’ve set it to be a <nav> element.
  2. container_class: This is an optional parameter that allows you to add a class to the container element. In our example, we have added the class ‘main-menu’ to the <nav> element.
  3. menu_class: This parameter adds a class to the <ul> element within the menu. In our example, we’ve added the class ‘nav-menu’.

Additional Parameters

There are several other parameters you can use to customise the wp_nav_menu() function. Here are a few examples:

  • menu_id: Set an ID attribute for the <ul> element of the menu.
  • fallback_cb: Define a custom function to display if the menu doesn’t exist or is empty. By default, this parameter is set to ‘wp_page_menu’.
  • depth: Control the depth of the menu
  • hierarchy. Set it to an integer value to limit the number of levels displayed. For example, depth => 2 would only display two levels of menu items (parent and first-level child items).
  • echo: Set this parameter to false if you don’t want to display the menu right away but instead return the generated menu HTML as a string. By default, this parameter is set to true.

Here’s an example using some of these additional parameters:

    'theme_location' => 'primary',
    'container' => 'nav',
    'container_class' => 'main-menu',
    'menu_class' => 'nav-menu',
    'menu_id' => 'primary-menu',
    'fallback_cb' => 'my_custom_fallback_menu',
    'depth' => 2,
    'echo' => false,

Creating a Fallback Function

If you want to define a custom fallback function for the fallback_cb parameter, you can create a function in your functions.php file like this:

function my_custom_fallback_menu() {
  echo '<ul class="nav-menu">';
    'title_li' => '',
    'depth' => 1,
  echo '</ul>';

This fallback function will display a list of pages when the specified menu is empty or doesn’t exist. The wp_list_pages() function generates a simple menu based on your site’s pages, and the title_li parameter is set to an empty string to remove the list item titles. The depth parameter is set to 1 to display only the top-level pages.

Styling the Menu

Once you’ve successfully implemented the wp_nav_menu() function, you’ll likely want to style your menu to match your theme’s design. Use the container, menu, and list item classes to target the menu elements in your theme’s stylesheet (usually style.css).

Here’s a simple example of CSS styling for the menu:

.main-menu {
  background-color: #333;
  padding: 10px;

.nav-menu {
  list-style-type: none;
  margin: 0;
  padding: 0;

.nav-menu li {
  display: inline-block;
  margin-right: 20px;

.nav-menu a {
  color: #fff;
  text-decoration: none;

.nav-menu a:hover {
  color: #ccc;

The menu container, list items, and links are all styled in a fundamental way in this example. Adding styles for submenus, hover effects, and responsive behaviour are some of the additional ways that you can further personalise the appearance.


Creating and managing menus in WordPress may be done in an effective and adaptable manner with the help of the wp_nav_menu() function. You are able to simply change the menu to match the style and functionality of your theme thanks to the many settings and options that it provides. Remember to register your menu positions in the functions.php file and utilise CSS to decorate your menus so that users get a consistent experience when they navigate your website. You’ll be able to install dynamic menus that are totally adjustable if you follow the instructions provided in this blog post. These menus will improve the user experience overall while also making navigating your website easier. Happy coding!