Title: WP_Nav_Menu_Widget::form
Published: April 25, 2014
Last modified: February 24, 2026

---

# WP_Nav_Menu_Widget::form( array $instance )

## In this article

 * [Parameters](https://developer.wordpress.org/reference/classes/wp_nav_menu_widget/form/?output_format=md#parameters)
 * [Source](https://developer.wordpress.org/reference/classes/wp_nav_menu_widget/form/?output_format=md#source)
 * [Related](https://developer.wordpress.org/reference/classes/wp_nav_menu_widget/form/?output_format=md#related)
 * [Changelog](https://developer.wordpress.org/reference/classes/wp_nav_menu_widget/form/?output_format=md#changelog)

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

Outputs the settings form for the Navigation Menu widget.

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

 `$instance`arrayrequired

Current settings.

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

    ```php
    public function form( $instance ) {
    	global $wp_customize;
    	$title    = isset( $instance['title'] ) ? $instance['title'] : '';
    	$nav_menu = isset( $instance['nav_menu'] ) ? $instance['nav_menu'] : '';

    	// Get menus.
    	$menus = wp_get_nav_menus();

    	$empty_menus_style     = '';
    	$not_empty_menus_style = '';
    	if ( empty( $menus ) ) {
    		$empty_menus_style = ' style="display:none" ';
    	} else {
    		$not_empty_menus_style = ' style="display:none" ';
    	}

    	$nav_menu_style = '';
    	if ( ! $nav_menu ) {
    		$nav_menu_style = 'display: none;';
    	}

    	// If no menus exists, direct the user to go and create some.
    	?>
    	<p class="nav-menu-widget-no-menus-message" <?php echo $not_empty_menus_style; ?>>
    		<?php
    		if ( $wp_customize instanceof WP_Customize_Manager ) {
    			$url = 'javascript: wp.customize.panel( "nav_menus" ).focus();';
    		} else {
    			$url = admin_url( 'nav-menus.php' );
    		}

    		printf(
    			/* translators: %s: URL to create a new menu. */
    			__( 'No menus have been created yet. <a href="%s">Create some</a>.' ),
    			// The URL can be a `javascript:` link, so esc_attr() is used here instead of esc_url().
    			esc_attr( $url )
    		);
    		?>
    	</p>
    	<div class="nav-menu-widget-form-controls" <?php echo $empty_menus_style; ?>>
    		<p>
    			<label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php _e( 'Title:' ); ?></label>
    			<input type="text" class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" value="<?php echo esc_attr( $title ); ?>" />
    		</p>
    		<p>
    			<label for="<?php echo $this->get_field_id( 'nav_menu' ); ?>"><?php _e( 'Select Menu:' ); ?></label>
    			<select id="<?php echo $this->get_field_id( 'nav_menu' ); ?>" name="<?php echo $this->get_field_name( 'nav_menu' ); ?>">
    				<option value="0"><?php _e( '&mdash; Select &mdash;' ); ?></option>
    				<?php foreach ( $menus as $menu ) : ?>
    					<option value="<?php echo esc_attr( $menu->term_id ); ?>" <?php selected( $nav_menu, $menu->term_id ); ?>>
    						<?php echo esc_html( $menu->name ); ?>
    					</option>
    				<?php endforeach; ?>
    			</select>
    		</p>
    		<?php if ( $wp_customize instanceof WP_Customize_Manager ) : ?>
    			<p class="edit-selected-nav-menu" style="<?php echo $nav_menu_style; ?>">
    				<button type="button" class="button"><?php _e( 'Edit Menu' ); ?></button>
    			</p>
    		<?php endif; ?>
    	</div>
    	<?php
    }
    ```

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

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

| Uses | Description | 
| [selected()](https://developer.wordpress.org/reference/functions/selected/)`wp-includes/general-template.php` |

Outputs the HTML selected attribute.

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

Returns all navigation menu objects.

  | 
| [__()](https://developer.wordpress.org/reference/functions/__/)`wp-includes/l10n.php` |

Retrieves the translation of $text.

  | 
| [_e()](https://developer.wordpress.org/reference/functions/_e/)`wp-includes/l10n.php` |

Displays translated text.

  | 
| [esc_attr()](https://developer.wordpress.org/reference/functions/esc_attr/)`wp-includes/formatting.php` |

Escaping for HTML attributes.

  | 
| [esc_html()](https://developer.wordpress.org/reference/functions/esc_html/)`wp-includes/formatting.php` |

Escaping for HTML blocks.

  | 
| [admin_url()](https://developer.wordpress.org/reference/functions/admin_url/)`wp-includes/link-template.php` |

Retrieves the URL to the admin area for the current site.

  |

[Show 5 more](https://developer.wordpress.org/reference/classes/wp_nav_menu_widget/form/?output_format=md#)
[Show less](https://developer.wordpress.org/reference/classes/wp_nav_menu_widget/form/?output_format=md#)

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

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

## User Contributed Notes

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