|
<?php |
|
|
|
namespace App; |
|
|
|
use Roots\Soil\NavWalker as SoilNav; |
|
|
|
/** |
|
* Return if Soil does not exist. |
|
*/ |
|
if (!class_exists('Roots\Soil\NavWalker')) { |
|
return; |
|
} |
|
|
|
/** |
|
* Class BootstrapNav |
|
* Add Bootstrap 5 classes to nav walker |
|
*/ |
|
class BootstrapNav extends SoilNav |
|
{ |
|
|
|
/** |
|
* NavWalker constructor. |
|
*/ |
|
public function __construct() |
|
{ |
|
parent::__Construct(); |
|
add_filter('nav_menu_submenu_css_class', [$this, 'dropdownListClass'], 10, 2); |
|
add_filter('nav_menu_css_class', [$this, 'listItemClass'], 10, 2); |
|
add_filter('nav_menu_link_attributes', [$this, 'linkAttributes'], 10, 4); |
|
} |
|
|
|
/** |
|
* Add "dropdown-menu" class to dropdown UL |
|
* @param $classes |
|
* @return array |
|
*/ |
|
function dropdownListClass($classes): array |
|
{ |
|
$classes[] = 'dropdown-menu'; |
|
return $classes; |
|
} |
|
|
|
/** |
|
* Add Bootstrap 5 classes to list items |
|
* @param $classes |
|
* @param $item |
|
* @return array |
|
*/ |
|
|
|
function listItemClass($classes, $item): array |
|
{ |
|
if ($item->menu_item_parent == 0) { |
|
$classes[] = 'nav-item'; |
|
} |
|
if ($item->is_subitem) { |
|
$classes[] = 'dropdown'; |
|
} |
|
return $classes; |
|
} |
|
|
|
/** |
|
* Add Bootstrap 5 classes and attributes to anchor links. |
|
* This method originally created by QWp6t (see credit link). |
|
* @param $atts |
|
* @param $item |
|
* @param $args |
|
* @param $depth |
|
* @return array |
|
* @SuppressWarnings(PHPMD.UnusedFormalParameter) This method overrides its parent |
|
* @link Credit https://gist.github.com/QWp6t/8f94b7096bb0d3a72fedba68f73033a5#file-bootstrap-php-L63 |
|
*/ |
|
public function linkAttributes($atts, $item, /** @noinspection PhpUnusedParameterInspection */ $args, $depth): array |
|
{ |
|
$atts['class'] = $depth ? 'dropdown-item' : 'nav-link'; |
|
if ($item->current || $item->current_item_ancestor) { |
|
$atts['class'] .= ' active'; |
|
} |
|
if ($item->is_subitem) { |
|
$atts['class'] .= ' dropdown-toggle'; |
|
$atts += [ |
|
'data-bs-toggle' => 'dropdown', |
|
'role' => 'button', |
|
'aria-expanded' => 'false' |
|
]; |
|
} |
|
return $atts; |
|
} |
|
} |