How to add dropdown Navigation menus in WordPress Customize

When I was creating a WordPress theme for my client I needed to get dropdown of Navigation menus in customize so user can choose a menu. I wrote a function for that which really worked well. You can use it if you need it.

Add it these below codes in your themes function.php file. It creates the dropdown.

/**
* Dropdown Menu List for customizer
*/
if ( !function_exists( 'your_theme_customizer_menulist' ) ) {
    // Function
    function your_theme_customizer_menulist() {
        $menus = wp_get_nav_menus();

        $menu_list['none'] = esc_html__(' -- Choose Menu -- ', 'your-theme');
        foreach ($menus as $menu) {
            $menu_list[$menu->slug] = $menu->name;
        }

        return $menu_list;
    }

}

Explanation of the above code:

Set a variable $menu to get all available menus, then set an another variable $menu_list to store the dropdown value. Now do a foreach loop to exact the menus into drowdown options.

Add the below code in function.php to create setting in customize.

/**
* Register customizer
*/
if ( !function_exists( 'your_theme_customize_register' ) ) {
    // Function starts
    function your_theme_customize_register( $wp_customize ) {

    /** Header Options Panel */
    $wp_customize->add_panel( 'your_theme_header_settings', array(
        'title' => esc_html__( 'Header Settings', 'your-theme' ),
        'description' => esc_html__( 'Configure header settings', 'your-theme' ),
        'priority' => 10,
    ));

    /** Top Header Options */
    $wp_customize->add_section( 'your_theme_top_header_options', array(
        'title' => esc_html__( 'Top Header', 'your-theme' ),
        'panel' => 'your_theme_header_settings',
    ));

    $wp_customize->add_setting('your_theme_top_navigation_menu', array(
        'sanitize_callback' => 'sanitize_option',
        'default' => 'none',
        'transport' => 'refresh'
    ));

    $wp_customize->add_control('your_theme_top_navigation_menu', array(
        'section' => 'your_theme_top_header_options',
        'type' => 'select',
        'label' => esc_html__('Select Menu', 'your-theme'),
        'choices' => your_theme_customizer_menulist() // Dropdown function which we created first
    ));
        
    }
    add_action( 'customize_register', 'your_theme_customize_register' );
}

Explanation of the above code: The above code creates customize panel, section and settings. Customize settings will look like below image.

 

How to use the code in front end

/**
* Echo navigational menu
*/
$top_menu = get_theme_mod( 'your_theme_top_navigation_menu' );
//Ignore if menu is empty
if ( !empty( $top_menu ) ) {
    wp_nav_menu( array(
        'menu' => $top_menu,
        'menu_id' => 'menu',
        'items_wrap' => '<ul id="menu" class="%2$s">%3$s</ul>',
    ) ) ;
}

 

It will echo the navigational menu, place it in header.php or wherever you want to display the menu. Please feel free to reply if you have any questions. Thank you!

 

WordPress theme developer   August 3, 2023   Tutorial WordPress

Ponvendhan is a WordPress theme developer with 5+ years experience in Web Design industry. He is also a content writer who loves to write articles about WordPress....

Post a Comment