apply_filters( 'walker_nav_menu_start_el', string $item_output, WP_Post $item, int $depth, stdClass $args )

Filters a menu item’s starting output.


Description Description

The menu item’s starting output only includes $args->before, the opening <a>, the menu item’s title, the closing </a>, and $args->after. Currently, there is no filter for modifying the opening and closing <li> for a menu item.


Top ↑

Parameters Parameters

$item_output

(string) The menu item's starting HTML output.

$item

(WP_Post) Menu item data object.

$depth

(int) Depth of menu item. Used for padding.

$args

(stdClass) An object of wp_nav_menu() arguments.


Top ↑

Source Source

File: wp-includes/class-walker-nav-menu.php

View on Trac



Top ↑

Changelog Changelog

Changelog
Version Description
3.0.0 Introduced.

Top ↑

User Contributed Notes User Contributed Notes

  1. Skip to note 1 content
    Contributed by damchtlv

    This hook is useful when you want to add extra html to a menu item output.
    Example: add a custom sub menu based on a menu item that has a class “menu-item-target”

    /**
     *  Menu items - Add "Custom sub-menu" in menu item render output
     *  if menu item has class "menu-item-target"
     */
    add_filter( 'walker_nav_menu_start_el', 'wpdocs_menu_item_custom_output', 10, 4 );
    function wpdocs_menu_item_custom_output( $item_output, $item, $depth, $args ) {
    
        $menu_item_classes = $item->classes;
        if ( empty( $menu_item_classes ) || !in_array( 'menu-item-target', $menu_item_classes ) ) {
            return $item_output;
        }
    
        ob_start(); 
        ?>
        <ul class="custom-sub-menu">
            <li class="custom-menu-item">
                <a href="#custom-url">
                    <?php _e( 'My text', 'wpdocs' ); ?>
                </a>
            </li>
        </ul>
        <?php
        $custom_sub_menu_html = ob_get_clean();
    
        // Append after <a> element of the menu item targeted
        $item_output .= $custom_sub_menu_html;
    
        return $item_output;
    }
    

You must log in before being able to contribute a note or feedback.