Home » Classes » Walker_Nav_Menu

The Walker_Nav_Menu class in WordPress is a powerful tool used for customizing the output of navigation menus. It extends the Walker class and is specifically designed to manipulate the HTML output of navigation menus generated by the wp_nav_menu() function.

The Walker_Nav_Menu class is used to modify the structure, appearance, and behavior of navigation menus. It allows developers to create custom navigation menu layouts, add extra HTML markup, add CSS classes, and even change the order of menu items.

This class is particularly useful when you need to create complex navigation menus, such as dropdown menus, mega menus, or hierarchical menus with custom styling. It provides a flexible way to control the output of menu items and their sub-items.

To demonstrate how the Walker_Nav_Menu class can be used, let’s suppose we want to add a custom CSS class to all the top-level menu items of our navigation menu. We can achieve this by creating a custom class that extends the Walker_Nav_Menu class and overrides the start_el() method.

Here’s an example usage code:

class Custom_Walker_Nav_Menu extends Walker_Nav_Menu {
    // Override the start_el method to modify the menu item output
    function start_el(&$output, $item, $depth = 0, $args = array(), $id = 0) {
        // Add a custom CSS class to top-level menu items
        if ($depth === 0) {
            $item->classes[] = 'custom-menu-item';
        parent::start_el($output, $item, $depth, $args, $id);

// Usage: Specify the custom walker in wp_nav_menu function
    'theme_location' => 'primary',
    'walker' => new Custom_Walker_Nav_Menu()

In this example, we create a custom class called Custom_Walker_Nav_Menu that extends the Walker_Nav_Menu class. Inside the start_el() method, we check if the current menu item is at depth 0, which indicates it is a top-level menu item. If so, we add the CSS class custom-menu-item to its list of classes.

Finally, we use the wp_nav_menu() function and pass an instance of our custom walker class using the 'walker' parameter. This ensures that our custom walker is used to generate the menu output, resulting in each top-level menu item having the added CSS class.

By utilizing the flexibility and customization options provided by the Walker_Nav_Menu class, developers can create dynamic and visually appealing navigation menus that perfectly suit their website’s needs.

Learn More on WordPress.org

WordPress snippets using the Walker_Nav_Menu class

Register an account to save your snippets or go Pro to get more features.