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ó 1141 Views
Các bạn ơi! TINO HOST đang giảm 51% Unlimited Hosting chỉ còn 39k/tháng thôi nha. Hosting KHÔNG GIỚI HẠN nha
Chi tiết Về Tino Host tại đây
Chi tiết giá Hosting tại đây

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!

Các bạn ơi! TINO HOST đang giảm 51% Unlimited Hosting chỉ còn 39k/tháng thôi nha. Hosting KHÔNG GIỚI HẠN nha
Chi tiết Về Tino Host tại đây
Chi tiết giá Hosting tại đây
  • Bình luận
Hosting nên dùng cho WordPress tại Việt Nam
Nhắn tin cho tôi 0965.419.096
Sản phẩm nổi bật của Toản
x