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( '— Select —' ) ?></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( '— Select —' ) ?></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( '— Select —' ) ?></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!
- Bình luận