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ó 2498 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.

Để duy trì blog nên mình có làm aff cho 1 số bên hosting. Nhưng dù aff mình cũng chọn 1 số nhà cung cấp uy tín về chất lượng và support nên các bạn cứ yên tâm nhé.

Nếu có mua hosting mà có trong list dưới đây các bạn click vào link trước khi mua để ủng hộ mình nhé. Mình cảm ơn nhiều

<?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!

4.4/5 - (7 votes)
  • Bình luận
Sản phẩm nổi bật của Toản
x