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
- Azdigi: Giá rẻ thì dùng gói Pro Gold Hosting còn chất lượng hơn thì em khuyên dùng Business Hosting. Có điều kiện thì lên VPS nhé
- Tino hosting
- iNet
- Nước ngoài thì Vultr
<?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