array( 'publish' ) , 'post_type' => 'mywp_admin_sidebar' , 'order' => 'ASC' , 'orderby' => 'menu_order' , 'posts_per_page' => -1 ); $args = apply_filters( 'mywp_controller_admin_sidebar_get_sidebar_args' , $args ); $posts = MywpPostType::get_posts( $args ); $sidebar = apply_filters( 'mywp_controller_admin_sidebar_get_sidebar' , $posts ); self::$sidebar = $sidebar; return $sidebar; } private static function get_sidebar_items() { if( ! empty( self::$sidebar_items ) ) { return self::$sidebar_items; } $sidebar = self::get_sidebar(); if( empty( $sidebar ) ) { return false; } $sidebar_items = array(); foreach( $sidebar as $key => $sidebar_item ) { if( $sidebar_item->item_type == 'default') { $sidebar_item = MywpAdminSidebar::default_item_convert( $sidebar_item ); if( ! empty( $sidebar_item ) ) { $sidebar_items[] = $sidebar_item; } } else { $sidebar_items[] = $sidebar_item; } } $sidebar_items = apply_filters( 'mywp_controller_admin_sidebar_get_sidebar_item' , $sidebar_items ); if( empty( $sidebar_items ) ) { return false; } ksort( $sidebar_items ); self::$sidebar_items = $sidebar_items; return $sidebar_items; } private static function get_sidebar_items_added_classes(){ if( ! empty( self::$sidebar_items_added_classes ) ) { return self::$sidebar_items_added_classes; } $sidebar_items = self::get_sidebar_items(); if( empty( $sidebar_items ) ) { return false; } foreach( $sidebar_items as $key => $sidebar_item ) { if( ! is_object( $sidebar_item ) ) { unset( $sidebar_items[ $key ] ); continue; } if( empty( $sidebar_item->item_li_class ) ) { $sidebar_items[ $key ]->item_li_class = ''; } if( empty( $sidebar_item->item_link_class ) ) { $sidebar_items[ $key ]->item_link_class = ''; } if( empty( $sidebar_item->item_link_url ) ) { $sidebar_items[ $key ]->item_link_url = ''; } if( empty( $sidebar_item->item_link_url_parse ) ) { $sidebar_items[ $key ]->item_link_url_parse = array(); } if( empty( $sidebar_item->item_link_url_parse_query ) ) { $sidebar_items[ $key ]->item_link_url_parse_query = array(); } $sidebar_item->item_link_url = do_shortcode( $sidebar_item->item_link_url ); $sidebar_items[ $key ]->item_link_url = $sidebar_item->item_link_url; if( ! empty( $sidebar_item->item_link_url ) ) { $item_link_url_parse = parse_url( $sidebar_item->item_link_url ); if( isset( $item_link_url_parse['fragment'] ) ) { unset( $item_link_url_parse['fragment'] ); } if( empty( $item_link_url_parse['query'] ) ) { $item_link_url_parse['query'] = ''; } $sidebar_items[ $key ]->item_link_url_parse = $item_link_url_parse; if( ! empty( $item_link_url_parse['query'] ) ) { wp_parse_str( $item_link_url_parse['query'] , $item_link_url_parse_query ); ksort( $item_link_url_parse_query ); $sidebar_items[ $key ]->item_link_url_parse_query = $item_link_url_parse_query; } } } foreach( $sidebar_items as $key => $sidebar_item ) { self::$child_items[ $sidebar_item->item_parent ][] = $sidebar_item; } $tmp = $sidebar_items; foreach( $sidebar_items as $key => $sidebar_item ) { if( empty( $sidebar_item->item_parent ) ) { continue; } foreach( $tmp as $tmp_key => $tmp_sidebar_item ) { if( $tmp_sidebar_item->ID == $sidebar_item->item_parent ) { self::$parent_items[ $sidebar_item->ID ][] = $tmp_sidebar_item; break; } } } unset( $tmp ); $first = true; foreach( $sidebar_items as $key => $sidebar_item ) { if( $first ) { $sidebar_items[ $key ]->item_li_class .= ' wp-first-item'; $sidebar_items[ $key ]->item_link_class .= ' wp-first-item'; $first = false; } if( $sidebar_item->item_type === 'separator' ) { continue; } if( empty( $sidebar_item->item_parent ) ) { $sidebar_items[ $key ]->item_li_class .= ' menu-top'; $sidebar_items[ $key ]->item_link_class .= ' menu-top'; } if( ! empty( self::$child_items[ $sidebar_item->ID ] ) ) { $sidebar_items[ $key ]->item_li_class .= ' wp-has-submenu'; $sidebar_items[ $key ]->item_link_class .= ' wp-has-submenu'; } } $current_url = self::get_current_url(); $current_url_parse = parse_url( $current_url ); $current_url_query = array(); if( isset( $current_url_parse['fragment'] ) ) { unset( $current_url_parse['fragment'] ); } if( ! empty( $current_url_parse['query'] ) ) { wp_parse_str( $current_url_parse['query'] , $current_url_query ); ksort( $current_url_query ); } else { $current_url_parse['query'] = ''; } $found_current_item_ids = array(); foreach( $sidebar_items as $key => $sidebar_item ) { if( empty( $sidebar_item->item_link_url_parse['host'] ) or empty( $sidebar_item->item_link_url_parse['path'] ) ) { continue; } if( $current_url_parse['scheme'] === $sidebar_item->item_link_url_parse['scheme'] && $current_url_parse['host'] === $sidebar_item->item_link_url_parse['host'] && $current_url_parse['path'] === $sidebar_item->item_link_url_parse['path'] && $current_url_query === $sidebar_item->item_link_url_parse_query ) { $found_current_item_ids[] = $sidebar_item->ID; } } if( empty( $found_current_item_ids ) ) { $identification_query = array(); if( ! empty( $current_url_query['page'] ) ) { $identification_query['page'] = $current_url_query['page']; } if( ! empty( $current_url_query['post_type'] ) ) { if( $current_url_query['post_type'] != 'post' ) { $identification_query['post_type'] = $current_url_query['post_type']; } } if( ! empty( $current_url_query['taxonomy'] ) ) { $identification_query['taxonomy'] = $current_url_query['taxonomy']; } foreach( $sidebar_items as $key => $sidebar_item ) { if( empty( $sidebar_item->item_link_url_parse['host'] ) or empty( $sidebar_item->item_link_url_parse['path'] ) ) { continue; } if( $current_url_parse['scheme'] === $sidebar_item->item_link_url_parse['scheme'] && $current_url_parse['host'] === $sidebar_item->item_link_url_parse['host'] && $current_url_parse['path'] === $sidebar_item->item_link_url_parse['path'] && http_build_query( $identification_query ) === $sidebar_item->item_link_url_parse['query'] ) { $found_current_item_ids[] = $sidebar_item->ID; } } } $found_current_item_ids = apply_filters( 'mywp_controller_admin_sidebar_get_sidebar_item_added_classes_found_current_item_ids' , $found_current_item_ids , $sidebar_items , $current_url , $current_url_parse , $current_url_query ); if( ! empty( $found_current_item_ids ) ) { $found_current_item_ids = array_map( 'strip_tags' , $found_current_item_ids ); } if( ! empty( $found_current_item_ids ) ) { foreach( $sidebar_items as $key => $sidebar_item ) { if( in_array( $sidebar_item->ID , $found_current_item_ids ) ) { $sidebar_items[ $key ]->item_li_class .= ' current'; $sidebar_items[ $key ]->item_link_class .= ' current'; } } foreach( $found_current_item_ids as $found_current_item_id ) { $find_item_parents_ids = self::get_find_item_to_parent_ids( $found_current_item_id ); if( ! empty( $find_item_parents_ids ) ) { foreach( $sidebar_items as $key => $sidebar_item ) { if( ! in_array( $sidebar_item->ID , $find_item_parents_ids ) ) { continue; } $sidebar_items[ $key ]->item_li_class .= ' wp-has-current-submenu wp-menu-open'; $sidebar_items[ $key ]->item_link_class .= ' wp-has-current-submenu wp-menu-open'; } } } } $sidebar_items = apply_filters( 'mywp_controller_admin_sidebar_get_sidebar_item_added_classes' , $sidebar_items ); self::$sidebar_items_added_classes = $sidebar_items; return self::$sidebar_items_added_classes; } public static function mywp_controller_admin_sidebar_get_sidebar_item_added_classes_found_current_item_ids( $found_current_item_ids , $sidebar_items , $current_url , $current_url_parse , $current_url_query ) { if( empty( $sidebar_items ) ) { return $sidebar_items; } if( ! empty( $found_current_item_ids ) ) { return $found_current_item_ids; } foreach( $sidebar_items as $key => $sidebar_item ) { if( empty( $sidebar_item->item_link_url_parse['host'] ) or empty( $sidebar_item->item_link_url_parse['path'] ) ) { continue; } if( $current_url_parse['scheme'] !== $sidebar_item->item_link_url_parse['scheme'] or $current_url_parse['host'] !== $sidebar_item->item_link_url_parse['host'] ) { continue; } if( strpos( $current_url_parse['path'] , 'post.php' ) !== false && ! empty( $current_url_query['post'] ) ) { if( strpos( $sidebar_item->item_link_url_parse['path'] , 'edit.php' ) === false ) { continue; } $post_type = get_post_type( intval( $current_url_query['post'] ) ); if( empty( $post_type ) ) { continue; } if( $post_type == 'post' && empty( $sidebar_item->item_link_url_parse_query['post_type'] ) ) { $found_current_item_ids[] = $sidebar_item->ID; } elseif( ! empty( $sidebar_item->item_link_url_parse_query['post_type'] ) && $sidebar_item->item_link_url_parse_query === array( 'post_type' => $post_type ) ) { $found_current_item_ids[] = $sidebar_item->ID; } } elseif( strpos( $current_url_parse['path'] , 'term.php' ) !== false && $current_url_query['taxonomy'] ) { if( strpos( $sidebar_item->item_link_url_parse['path'] , 'edit-tags.php' ) === false ) { continue; } if( $current_url_query['taxonomy'] == $sidebar_item->item_link_url_parse_query['taxonomy'] ) { $found_current_item_ids[] = $sidebar_item->ID; } } elseif( strpos( $current_url_parse['path'] , 'comment.php' ) !== false ) { if( strpos( $sidebar_item->item_link_url_parse['path'] , 'edit-comments.php' ) === false ) { continue; } if( $sidebar_item->item_link_url_parse_query === array() ) { $found_current_item_ids[] = $sidebar_item->ID; } } elseif( strpos( $current_url_parse['path'] , 'theme-install.php' ) !== false ) { if( strpos( $sidebar_item->item_link_url_parse['path'] , 'themes.php' ) === false ) { continue; } if( $sidebar_item->item_link_url_parse_query === array() ) { $found_current_item_ids[] = $sidebar_item->ID; } } elseif( strpos( $current_url_parse['path'] , 'user-edit.php' ) !== false ) { if( strpos( $sidebar_item->item_link_url_parse['path'] , 'users.php' ) === false ) { continue; } if( $sidebar_item->item_link_url_parse_query === array() ) { $found_current_item_ids[] = $sidebar_item->ID; } } } return $found_current_item_ids; } private static function get_find_item_to_parent_ids( $find_id = false ) { if( empty( $find_id ) ) { return false; } $find_id = strip_tags( $find_id ); self::set_find_item_parent_ids( $find_id ); return self::$found_parent_item_ids; } private static function set_find_item_parent_ids( $find_id ) { if( empty( $find_id ) ) { return false; } if( empty( self::$parent_items[ $find_id ] ) ) { return false; } $parent_items = self::$parent_items[ $find_id ]; foreach( $parent_items as $parent_item ) { self::$found_parent_item_ids[] = $parent_item->ID; if( ! empty( $parent_item->item_parent ) ) { self::set_find_item_parent_ids( $parent_item->ID ); } } } private static function get_find_menu_items_to_parent_id( $parent_id = 0 ) { $sidebar_items_added_classes = self::get_sidebar_items_added_classes(); if( empty( $sidebar_items_added_classes ) ) { return false; } if( ! empty( $parent_id ) ) { if( is_numeric( $parent_id ) ) { $parent_id = intval( $parent_id ); } else { $parent_id = strip_tags( $parent_id ); } } if( ! empty( self::$find_parent_id[ $parent_id ] ) ) { return self::$find_parent_id[ $parent_id ]; } $find_items = array(); foreach( $sidebar_items_added_classes as $item ) { $item_parent = $item->item_parent; if( ! empty( $item_parent ) ) { if( is_numeric( $item_parent ) ) { $item_parent = intval( $item_parent ); } else { $item_parent = strip_tags( $item_parent ); } } if( $item_parent !== $parent_id ) { continue; } $find_items[] = $item; } if( empty( $find_items ) ) { return false; } self::$find_parent_id[ $parent_id ] = $find_items; return $find_items; } private static function get_current_url() { if( ! empty( self::$current_url ) ) { return self::$current_url; } $current_url = urldecode( do_shortcode( '[mywp_url current="1"]' ) ); self::$current_url = $current_url; return $current_url; } public static function admin_enqueue_scripts() { $sidebar = self::get_sidebar(); if( empty( $sidebar ) ) { return false; } wp_register_style( 'mywp_admin_sidebar' , MywpApi::get_plugin_url( 'css' ) . 'admin-sidebar.css' , array() , MYWP_VERSION ); wp_register_script( 'mywp_admin_sidebar' , MywpApi::get_plugin_url( 'js' ) . 'admin-sidebar.js' , array( 'jquery' ) , MYWP_VERSION ); wp_enqueue_style( 'mywp_admin_sidebar' ); wp_enqueue_script( 'mywp_admin_sidebar' ); $setting_data = self::get_setting_data(); if( ! empty( $setting_data['custom_menu_ui'] ) ) { wp_register_style( 'mywp_admin_sidebar_custom_ui' , MywpApi::get_plugin_url( 'css' ) . 'admin-sidebar-custom-ui.css' , array( 'mywp_admin_sidebar' ) , MYWP_VERSION ); wp_register_script( 'mywp_admin_sidebar_custom_ui' , MywpApi::get_plugin_url( 'js' ) . 'admin-sidebar-custom-ui.js' , array( 'jquery' , 'mywp_admin_sidebar' ) , MYWP_VERSION ); wp_enqueue_style( 'mywp_admin_sidebar_custom_ui' ); wp_enqueue_script( 'mywp_admin_sidebar_custom_ui' ); } } public static function hidden_default_menus() { global $menu; global $submenu; if( ! self::is_do_function( __FUNCTION__ ) ) { return false; } $sidebar = self::get_sidebar(); if( empty( $sidebar ) ) { return false; } $menu = array(); $submenu = array(); self::after_do_function( __FUNCTION__ ); } public static function render_menus() { if( ! self::is_do_function( __FUNCTION__ ) ) { return false; } $parent_items = self::get_find_menu_items_to_parent_id(); if( empty( $parent_items ) ) { return false; } foreach( $parent_items as $item ) { self::print_sidebar_item( $item ); } echo '