Cover image from Wordpress wp_nav_menu output class when menu item has children

Wordpress wp_nav_menu output class when menu item has children

September 9, 2011

I recently wanted to insert a class for the case where a menu item has children in Wordpress. There doesn’t appear to be any option to do this in wp_nav_menu function, so I started doing some research.

I found out from this article how to add a ’last-menu-item’ css class.

This doesn’t quite work for what I wanted though, because the returned data object from Wordpress doesn’t tell you if the current node has children.

So, I used a walker object instead (there’s a good article on their usage here) and then used the theory behind the first article to achieve my objective. Nice.

<?php
class TopnavWalker extends Walker_Nav_Menu {
    function start_lvl(&$output, $depth) {
        $indent = str_repeat("\t", $depth);
        $intPos = strripos($output,'menu-item');
        $output = sprintf(
            "%s has-children %s",
            substr($output,0,$intPos),
            substr($output,$intPos,strlen($output))
        );
        $output .= "\n$indent<ul class="sub-menu">\n";
    }
}
?>