Skip to content

Instantly share code, notes, and snippets.

@mariovalney
Created September 17, 2020 22:04
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mariovalney/27d27a4a845f8b53262c9e7c81156d1b to your computer and use it in GitHub Desktop.
Save mariovalney/27d27a4a845f8b53262c9e7c81156d1b to your computer and use it in GitHub Desktop.
Add dropdown classes to your wp_nav_menu() output
<?php
/**
* Plugin Name: Bootstrap Dropdown on WP Nav Menu
* Description: Add dropdown classes to your wp_nav_menu() output
* Version: 1.0.0
* Author: Mário Valney
* Author URI: https://mariovalney.com
* Text Domain: bootstrap-dropdown-wp-nav-menu
*/
function boostrap_menu_nav_menu_submenu_css_class( $classes, $args, $depth ) {
if ( empty( $depth ) ) {
$classes[] = 'dropdown-menu';
}
return $classes;
}
function boostrap_menu_nav_menu_link_attributes( $atts, $item, $args, $depth ) {
if ( ! empty( $depth ) && in_array( 'menu-item-has-children', ( $item->classes ?? [] ) ) ) {
$atts['data-toggle'] = 'dropdown';
}
return $atts;
}
function boostrap_menu_wp_nav_menu_objects( $sorted_menu_items, $args ) {
foreach ( $sorted_menu_items as $menu_item ) {
if ( ! in_array( 'menu-item-has-children', ( $menu_item->classes ?? [] ) ) ) {
continue;
}
if ( ! empty( $menu_item->menu_item_parent ) ) {
continue;
}
$menu_item->classes[] = 'dropdown';
}
return $sorted_menu_items;
}
add_filter( 'nav_menu_submenu_css_class', 'boostrap_menu_nav_menu_submenu_css_class', 10, 3 );
add_filter( 'nav_menu_link_attributes', 'boostrap_menu_nav_menu_link_attributes', 10, 4 );
add_filter( 'wp_nav_menu_objects', 'boostrap_menu_wp_nav_menu_objects', 10, 2 );
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment