Title: wp_create_nav_menu
Published: April 25, 2014
Last modified: August 20, 2026

---

# wp_create_nav_menu( string $menu_name ): int|󠀁[WP_Error](https://developer.wordpress.org/reference/classes/wp_error/)󠁿

## In this article

 * [Description](https://developer.wordpress.org/reference/functions/wp_create_nav_menu/?output_format=md#description)
 * [Parameters](https://developer.wordpress.org/reference/functions/wp_create_nav_menu/?output_format=md#parameters)
 * [Return](https://developer.wordpress.org/reference/functions/wp_create_nav_menu/?output_format=md#return)
 * [Source](https://developer.wordpress.org/reference/functions/wp_create_nav_menu/?output_format=md#source)
 * [Related](https://developer.wordpress.org/reference/functions/wp_create_nav_menu/?output_format=md#related)
 * [Changelog](https://developer.wordpress.org/reference/functions/wp_create_nav_menu/?output_format=md#changelog)
 * [User Contributed Notes](https://developer.wordpress.org/reference/functions/wp_create_nav_menu/?output_format=md#user-contributed-notes)

[ Back to top](https://developer.wordpress.org/reference/functions/wp_create_nav_menu/?output_format=md#wp--skip-link--target)

Creates a navigation menu.

## 󠀁[Description](https://developer.wordpress.org/reference/functions/wp_create_nav_menu/?output_format=md#description)󠁿

Note that `$menu_name` is expected to be pre-slashed.

## 󠀁[Parameters](https://developer.wordpress.org/reference/functions/wp_create_nav_menu/?output_format=md#parameters)󠁿

 `$menu_name`stringrequired

Menu name.

## 󠀁[Return](https://developer.wordpress.org/reference/functions/wp_create_nav_menu/?output_format=md#return)󠁿

 int|[WP_Error](https://developer.wordpress.org/reference/classes/wp_error/) Menu
ID on success, [WP_Error](https://developer.wordpress.org/reference/classes/wp_error/)
object on failure.

## 󠀁[Source](https://developer.wordpress.org/reference/functions/wp_create_nav_menu/?output_format=md#source)󠁿

    ```php
    function wp_create_nav_menu( $menu_name ) {
    	// expected_slashed ($menu_name)
    	return wp_update_nav_menu_object( 0, array( 'menu-name' => $menu_name ) );
    }
    ```

[View all references](https://developer.wordpress.org/reference/files/wp-includes/nav-menu.php/)
[View on Trac](https://core.trac.wordpress.org/browser/tags/7.1/src/wp-includes/nav-menu.php#L249)
[View on GitHub](https://github.com/WordPress/wordpress-develop/blob/7.1/src/wp-includes/nav-menu.php#L249-L252)

## 󠀁[Related](https://developer.wordpress.org/reference/functions/wp_create_nav_menu/?output_format=md#related)󠁿

| Uses | Description | 
| [wp_update_nav_menu_object()](https://developer.wordpress.org/reference/functions/wp_update_nav_menu_object/)`wp-includes/nav-menu.php` |

Saves the properties of a menu or create a new menu with those properties.

  |

## 󠀁[Changelog](https://developer.wordpress.org/reference/functions/wp_create_nav_menu/?output_format=md#changelog)󠁿

| Version | Description | 
| [3.0.0](https://developer.wordpress.org/reference/since/3.0.0/) | Introduced. |

## 󠀁[User Contributed Notes](https://developer.wordpress.org/reference/functions/wp_create_nav_menu/?output_format=md#user-contributed-notes)󠁿

 1.  [Skip to note 2 content](https://developer.wordpress.org/reference/functions/wp_create_nav_menu/?output_format=md#comment-content-1260)
 2.   [Codex](https://profiles.wordpress.org/codex/)  [  11 years ago  ](https://developer.wordpress.org/reference/functions/wp_create_nav_menu/#comment-1260)
 3. [You must log in to vote on the helpfulness of this note](https://login.wordpress.org?redirect_to=https%3A%2F%2Fdeveloper.wordpress.org%2Freference%2Ffunctions%2Fwp_create_nav_menu%2F%23comment-1260)
    Vote results for this note: 3[You must log in to vote on the helpfulness of this note](https://login.wordpress.org?redirect_to=https%3A%2F%2Fdeveloper.wordpress.org%2Freference%2Ffunctions%2Fwp_create_nav_menu%2F%23comment-1260)
 4. **Basic Example**
 5. To check if a menu exists first and then create it if it doesn’t exists, and finally
    add menu items to it, use:
 6.     ```php
        // Check if the menu exists
        $menu_name   = 'My First Menu';
        $menu_exists = wp_get_nav_menu_object( $menu_name );
    
        // If it doesn't exist, let's create it.
        if ( ! $menu_exists ) {
            $menu_id = wp_create_nav_menu($menu_name);
    
        	// Set up default menu items
            wp_update_nav_menu_item( $menu_id, 0, array(
                'menu-item-title'   =>  __( 'Home', 'textdomain' ),
                'menu-item-classes' => 'home',
                'menu-item-url'     => home_url( '/' ), 
                'menu-item-status'  => 'publish'
        	) );
    
            wp_update_nav_menu_item( $menu_id, 0, array(
                'menu-item-title'  =>  __( 'Custom Page', 'textdomain' ),
                'menu-item-url'    => home_url( '/custom/' ), 
                'menu-item-status' => 'publish'
        	) );
        }
        ```
    
 7.  [Log in to add feedback](https://login.wordpress.org/?redirect_to=https%3A%2F%2Fdeveloper.wordpress.org%2Freference%2Ffunctions%2Fwp_create_nav_menu%2F%3Freplytocom%3D1260%23feedback-editor-1260)

You must [log in](https://login.wordpress.org/?redirect_to=https%3A%2F%2Fdeveloper.wordpress.org%2Freference%2Ffunctions%2Fwp_create_nav_menu%2F)
before being able to contribute a note or feedback.