Skip to content

Instantly share code, notes, and snippets.

@fencermonir
Created August 16, 2018 08:55
Show Gist options
  • Save fencermonir/64dc60ae73a582621081d072db1032cd to your computer and use it in GitHub Desktop.
Save fencermonir/64dc60ae73a582621081d072db1032cd to your computer and use it in GitHub Desktop.
This script add sidebar menu widget at your WordPress theme.
<?php
class Dvault_Sidebar_Menu extends WP_Widget {
//setup the widget name, description, etc...
public function __construct() {
$widget_ops = array(
'classname' => 'dvault-sidebar-menu-widget',
'description' => 'Add a custom menu in sidebar. ',
);
parent::__construct( 'dvault-sidebar-menu', 'Dvault Sidebar Menu', $widget_ops );
}
//back-end display of widget
public function form( $instance ) {
$title = isset($instance['title']) ? $instance['title']: '';
$nav_menu = isset( $instance['nav_menu'] ) ? $instance['nav_menu'] : '';
$menus = wp_get_nav_menus();
?>
<p>
<label for="<?php echo $this->get_field_id('title'); ?>">Title:</label></br>
<input class="widefat" id="<?php echo $this->get_field_id('title'); ?>" type="text" name="<?php echo $this->get_field_name('title'); ?>" value="<?php echo $title; ?>">
</p>
<p>
<label for="<?php echo $this->get_field_id( 'nav_menu' ); ?>"><?php _e( 'Select Menu:' ); ?></label>
<select id="<?php echo $this->get_field_id( 'nav_menu' ); ?>" name="<?php echo $this->get_field_name( 'nav_menu' ); ?>">
<option value="0"><?php _e( '&mdash; Select &mdash;' ); ?></option>
<?php foreach ( $menus as $menu ) : ?>
<option value="<?php echo esc_attr( $menu->term_id ); ?>" <?php selected( $nav_menu, $menu->term_id ); ?>>
<?php echo esc_html( $menu->name ); ?>
</option>
<?php endforeach; ?>
</select>
</p>
<?php
}
function update( $new_instance, $old_instance ) {
$instance = $old_instance;
$instance['title'] = $new_instance['title'];
$instance['nav_menu'] = $new_instance['nav_menu'];
return $instance;
}
//front-end display of widget
public function widget( $args, $instance ){
$pageId = get_the_ID();
$currentClass = '';
$title = $instance['title'];
$nav_id = $instance['nav_menu'];
$nav_menu = ! empty( $instance['nav_menu'] ) ? wp_get_nav_menu_object( $instance['nav_menu'] ) : false;
$wp_menus = wp_get_nav_menu_items($instance['nav_menu']);
echo $args['before_widget'];
?>
<div class="widget-title"><?php echo $title; ?></div>
<div class="menu-<?php echo $nav_menu->slug; ?>-posts-container">
<ul id="menu-<?php echo $nav_menu->slug; ?>-posts" class="menu">
<?php foreach ($wp_menus as $wp_menu) :
$thumbImage = wp_get_attachment_url(get_post_thumbnail_id($wp_menu->object_id));
$thumbImage = (isset($thumbImage) && $thumbImage != '') ? $thumbImage : '';
$pageIDFromMenu = get_post_meta( $wp_menu->ID, '_menu_item_object_id', true );
$pageIDFromMenu;
if( $pageId == $pageIDFromMenu){
$currentClass = 'current-menu-item';
} else {
$currentClass = '';
}
?>
<li id="menu-item-<?php echo $wp_menu->ID; ?>" class="menu-item menu-item-type-<?php echo $wp_menu->type; ?> menu-item-object-<?php echo $wp_menu->object; ?> menu-item-<?php echo $wp_menu->ID; ?> <?php echo $currentClass; ?>">
<a href="<?php echo $wp_menu->url; ?>"><?php echo $wp_menu->title; ?></a>
<div class="sidebar-submenu-hover">
<?php if( !empty($thumbImage) ) : ?>
<img src="<?php echo $thumbImage; ?>" alt="" class="img-responsive">
<?php endif; ?>
<a class="sidebar-submenu-hover-title"><?php echo $wp_menu->title; ?></a>
</div>
</li>
<?php endforeach; ?>
</ul></div>
<?php
echo $args['after_widget'];
}
}
/*
============================
widget action hook
============================
*/
add_action( 'widgets_init', function() {
register_widget( 'Dvault_Sidebar_Menu' );
} );
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment