Skip to content

Instantly share code, notes, and snippets.

@bmakowski
Created October 25, 2016 11:29
Show Gist options
  • Save bmakowski/48dfc3c9758a9fc3331373616813186b to your computer and use it in GitHub Desktop.
Save bmakowski/48dfc3c9758a9fc3331373616813186b to your computer and use it in GitHub Desktop.
WordPress Overriding default navigation widget to use walker
<?php
/*
Example 1 - overriding default navigation widget to use walker
Author: Bartek Makowski
*/
//inside wp-content/themes/{template}/functions.php
class LMU_WP_Nav_Menu_Widget extends WP_Nav_Menu_Widget{
public function widget($args, $instance) {
// Get menu
$nav_menu = ! empty( $instance['nav_menu'] ) ? wp_get_nav_menu_object( $instance['nav_menu'] ) : false;
if ( !$nav_menu )
return;
/** This filter is documented in wp-includes/default-widgets.php */
$instance['title'] = apply_filters( 'widget_title', empty( $instance['title'] ) ? '' : $instance['title'], $instance, $this->id_base );
echo $args['before_widget'];
if ( !empty($instance['title']) )
echo $args['before_title'] . $instance['title'] . $args['after_title'];
$nav_menu_args = array(
'fallback_cb' => '',
'menu' => $nav_menu,
'container' => 'ul',
'echo' => true,
'items_wrap' => widget_nav_wrap(),
'walker' => new walker_widget_nav()
);
/**
* Filter the arguments for the Custom Menu widget.
*
* @since 4.2.0
*
* @param array $nav_menu_args {
* An array of arguments passed to wp_nav_menu() to retrieve a custom menu.
*
* @type callback|bool $fallback_cb Callback to fire if the menu doesn't exist. Default empty.
* @type mixed $menu Menu ID, slug, or name.
* }
* @param stdClass $nav_menu Nav menu object for the current menu.
* @param array $args Display arguments for the current widget.
*/
wp_nav_menu( apply_filters( 'widget_nav_menu_args', $nav_menu_args, $nav_menu, $args ) );
echo $args['after_widget'];
}
}
function myplugin_register_widgets() {
register_widget( 'LMU_WP_Nav_Menu_Widget' );
}
add_action( 'widgets_init', 'myplugin_register_widgets' );
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment