Widget tùy chỉnh menu ẩn hiện từng page khác nhau

Cập nhật lần cuối 25/12/2014 by trong Widgets vào 25/12/2014 có 572 Views

widget tùy chỉnh ẩn hiện menu trong các page khác nhau

Do yêu cầu của website là mỗi page là 1 menu khác nhau. lên mình có viết 1 widgets dựa trên widget menu mặc định của wordpress có thêm 1 số chức năng như. Chọn hiện hoặc ẩn. Hiện ở page nào, ẩn ở page nào hay chỉ hiện ở 1 page hoặc ẩn ở 1 page còn hiện ở toàn bộ các page.

Code widget tùy chỉnh menu ẩn hiện ở từng page

Các bạn có thể chèn code sau vào file functions.php hoặc tạo 1 file riêng rồi require_once file đó vào file functions.php là ok.

<?php
add_action('widgets_init', 'menu_svl_load_widgets');

function menu_svl_load_widgets()
{
 register_widget('Menu_Page_Widget');
}

class Menu_Page_Widget extends WP_Widget {

 function Menu_Page_Widget()
 {
 $widget_ops = array('classname' => 'menu_svl_comment', 'description' => 'Adds support for custom menu.');

 $control_ops = array('id_base' => 'menu_svl-widget');

 $this->WP_Widget('menu_svl-widget', 'OnegoCorp: Custom menu page', $widget_ops, $control_ops);
 }

 function widget($args, $instance)
 {
 extract($args);

 $title = apply_filters('widget_title', $instance['title']); 
 $nav_menu = ! empty( $instance['nav_menu'] ) ? wp_get_nav_menu_object( $instance['nav_menu'] ) : false;
 $hide_show = $instance['hide_show'];
 $show_page = $instance['show_page'];
 
 if ( !$nav_menu )
 return;
 if($hide_show == 1){
 if(!is_page($show_page)){
 echo $before_widget;
 
 if($title) {
 echo $before_title.$title.$after_title;
 }
 
 wp_nav_menu( array( 'fallback_cb' => '', 'menu' => $nav_menu ) );
 
 echo $after_widget;
 }
 }elseif ($hide_show == 2){
 if(is_page($show_page)){
 echo $before_widget;
 
 if($title) {
 echo $before_title.$title.$after_title;
 }
 
 wp_nav_menu( array( 'fallback_cb' => '', 'menu' => $nav_menu ) );
 
 echo $after_widget;
 }
 }else{
 echo $before_widget;
 
 if($title) {
 echo $before_title.$title.$after_title;
 }
 
 wp_nav_menu( array( 'fallback_cb' => '', 'menu' => $nav_menu ) );
 
 echo $after_widget;
 }
 }

 function update($new_instance, $old_instance)
 {
 $instance = $old_instance;

 $instance['title'] = strip_tags($new_instance['title']);
 $instance['nav_menu'] = (int)$new_instance['nav_menu'];
 $instance['hide_show'] = (int)$new_instance['hide_show'];
 $instance['show_page'] = (int)$new_instance['show_page'];

 return $instance;
 }

 function form($instance)
 {
 $defaults = array('title' => '');
 $instance = wp_parse_args((array) $instance, $defaults); 
 $nav_menu = isset( $instance['nav_menu'] ) ? $instance['nav_menu'] : '';
 $hide_show = isset( $instance['hide_show'] ) ? $instance['hide_show'] : '';
 $show_page = isset( $instance['show_page'] ) ? $instance['show_page'] : '';
 // Get menus
 $menus = wp_get_nav_menus( array( 'orderby' => 'name' ) );
 $pages = get_pages(); 
 ?>
 <p>
 <label for="<?php echo $this->get_field_id('title'); ?>">Title:</label>
 <input class="widefat" type="text" id="<?php echo $this->get_field_id('title'); ?>" name="<?php echo $this->get_field_name('title'); ?>" value="<?php echo $instance['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 ) {
 echo '<option value="' . $menu->term_id . '"'
 . selected( $nav_menu, $menu->term_id, false )
 . '>'. esc_html( $menu->name ) . '</option>';
 }
 ?>
 </select>
 </p>
 <p>
 <label for="<?php echo $this->get_field_id('hide_show'); ?>"><?php _e('Hidden/Show:'); ?></label>
 <select id="<?php echo $this->get_field_id('hide_show'); ?>" name="<?php echo $this->get_field_name('hide_show'); ?>">
 <option value="0"><?php _e( '&mdash; Select &mdash;' ) ?></option>
 <option value="1" <?php echo selected( $hide_show, 1, false );?>><?php _e( 'Hidden' ) ?></option>
 <option value="2" <?php echo selected( $hide_show, 2, false );?>><?php _e( 'Show' ) ?></option>
 </select>
 </p>
 <p>
 <label for="<?php echo $this->get_field_id('show_page'); ?>"><?php _e('Page:'); ?></label>
 <select id="<?php echo $this->get_field_id('show_page'); ?>" name="<?php echo $this->get_field_name('show_page'); ?>">
 <option value="0"><?php _e( '&mdash; Select &mdash;' ) ?></option>
 <?php 
 foreach ( $pages as $page ) {
 $option = '<option value="' .$page->ID. '"';
 $option .= selected( $show_page, $page->ID, false ).'>';
 $option .= $page->post_title;
 $option .= '</option>';
 echo $option;
 }
 ?>
 </select>
 </p>
 <?php
 }
}
?>

Các bạn có thể download file hoàn chỉnh về tại đây vào include vào functions.php là được: widget tùy chỉnh menu ẩn hiện ở từng page

Chúc các bạn thành công!

Widget tùy chỉnh menu ẩn hiện từng page khác nhau
5 (100%) 3 votes
  • Bình luận
Hosting nên dùng cho WordPress tại Việt Nam
Có thể bạn quan tâm
x