class DropDown_Nav_Menu extends Walker_Nav_Menu {
// Easy way to check it's this walker we're using to mod the output.
public function is_dropdown() {
return true;
}
/**
* Start submenu level.
*
* Compatible with modern WordPress / PHP 8.x.
*/
public function start_lvl( &$output, $depth = 0, $args = null ) {
$output .= "";
}
/**
* End submenu level.
*
* Compatible with modern WordPress / PHP 8.x.
*/
public function end_lvl( &$output, $depth = 0, $args = null ) {
$output .= "";
}
/**
* Start menu element.
*
* Compatible with modern Walker_Nav_Menu signature.
*/
public function start_el(
&$output,
$data_object,
$depth = 0,
$args = null,
$current_object_id = 0
) {
global $wp_query;
// Keep compatibility with the original Pindol code.
$item = $data_object;
$indent = ( $depth ) ? str_repeat( "\t", $depth ) : '';
$class_names = '';
$value = '';
$classes = empty( $item->classes ) ? array() : (array) $item->classes;
$classes[] = 'menu-item-' . $item->ID;
$classes[] = 'menu-item-depth-' . $depth;
$class_names = join(
' ',
apply_filters(
'nav_menu_css_class',
array_unique( array_filter( $classes ) ),
$item,
$args
)
);
$class_names = ' class="' . esc_attr( $class_names ) . '"';
// Select current item.
$selected = in_array( 'current-menu-item', $classes, true )
? ' selected="selected"'
: '';
$item_url = isset( $item->url ) ? $item->url : '';
$output .= $indent
. ' ';
/*
* Push sub-menu items in because select elements
* cannot contain nested option groups the same way
* normal menus contain nested lists.
*/
$indent_string_setting = '';
if ( is_object( $args ) && isset( $args->indent_string ) ) {
$indent_string_setting = $args->indent_string;
} elseif ( is_array( $args ) && isset( $args['indent_string'] ) ) {
$indent_string_setting = $args['indent_string'];
}
if ( empty( $indent_string_setting ) ) {
$indent_string_setting = '– ';
}
$indent_after_setting = '';
if ( is_object( $args ) && isset( $args->indent_after ) ) {
$indent_after_setting = $args->indent_after;
} elseif ( is_array( $args ) && isset( $args['indent_after'] ) ) {
$indent_after_setting = $args['indent_after'];
}
$indent_string = str_repeat(
apply_filters(
'dropdown_menus_indent_string',
$indent_string_setting,
$item,
$depth,
$args
),
( $depth ) ? $depth : 0
);
if ( ! empty( $indent_string ) ) {
$indent_string .= apply_filters(
'dropdown_menus_indent_after',
$indent_after_setting,
$item,
$depth,
$args
);
}
$before = '';
$after = '';
$link_before = '';
$link_after = '';
if ( is_object( $args ) ) {
$before = isset( $args->before ) ? $args->before : '';
$after = isset( $args->after ) ? $args->after : '';
$link_before = isset( $args->link_before )
? $args->link_before
: '';
$link_after = isset( $args->link_after )
? $args->link_after
: '';
} elseif ( is_array( $args ) ) {
$before = isset( $args['before'] ) ? $args['before'] : '';
$after = isset( $args['after'] ) ? $args['after'] : '';
$link_before = isset( $args['link_before'] )
? $args['link_before']
: '';
$link_after = isset( $args['link_after'] )
? $args['link_after']
: '';
}
$item_output = $before . $indent_string;
$item_output .= $link_before
. apply_filters(
'the_title',
$item->title,
$item->ID
)
. $link_after;
$item_output .= $after;
$output .= apply_filters(
'walker_nav_menu_dropdown_start_el',
$item_output,
$item,
$depth,
$args
);
}
/**
* End menu element.
*
* Compatible with modern Walker_Nav_Menu signature.
*/
public function end_el(
&$output,
$data_object,
$depth = 0,
$args = null
) {
$item = $data_object;
$output .= apply_filters(
'walker_nav_menu_dropdown_end_el',
" \n",
$item,
$depth
);
}
}