Make WordPress Core


Ignore:
Timestamp:
03/04/2010 12:15:55 AM (15 years ago)
Author:
ryan
Message:

Fix submenus for post types. Props TobiasBg. see #12453

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/wp-admin/menu-header.php

    r12733 r13579  
    3434 */
    3535function _wp_menu_output( $menu, $submenu, $submenu_as_parent = true ) {
    36     global $self, $parent_file, $submenu_file, $plugin_page, $pagenow;
     36    global $self, $parent_file, $submenu_file, $plugin_page, $pagenow, $typenow;
    3737
    3838    $first = true;
     
    4848            $class[] = 'wp-has-submenu';
    4949
    50         if ( ( $parent_file && $item[2] == $parent_file ) || ( false === strpos($parent_file, '?') && strcmp($self, $item[2]) == 0 ) ) {
     50        if ( ( $parent_file && $item[2] == $parent_file ) || ( false === strpos($parent_file, '?') && $self == $item[2] ) ) {
    5151            if ( !empty($submenu[$item[2]]) )
    5252                $class[] = 'wp-has-current-submenu wp-menu-open';
     
    113113
    114114                $menu_file = $item[2];
     115
    115116                if ( false !== $pos = strpos($menu_file, '?') )
    116117                    $menu_file = substr($menu_file, 0, $pos);
     118
     119                // Handle current for post_type=post|page|foo pages, which won't match $self.
     120                if ( !empty($typenow) )
     121                    $self_type = $self . '?post_type=' . $typenow;
     122                else
     123                    $self_type = 'nothing';
    117124
    118125                if ( isset($submenu_file) ) {
     
    121128                // If plugin_page is set the parent must either match the current page or not physically exist.
    122129                // This allows plugin pages with the same hook to exist under different parents.
    123                 } else if ( (isset($plugin_page) && $plugin_page == $sub_item[2] && (!file_exists($menu_file) || ($item[2] == $self))) || (!isset($plugin_page) && $self == $sub_item[2]) ) {
     130                } else if ( (isset($plugin_page) && $plugin_page == $sub_item[2] && (!file_exists($menu_file) || ($item[2] == $self) || ($item[2] == $self_type))) || (!isset($plugin_page) && $self == $sub_item[2]) ) {
    124131                    $class[] = 'current';
    125132                }
     
    134141                if ( ( ('index.php' != $sub_item[2]) && file_exists(WP_PLUGIN_DIR . "/$sub_file") ) || ! empty($menu_hook) ) {
    135142                    // If admin.php is the current page or if the parent exists as a file in the plugins or admin dir
    136 
    137                     $parent_exists = (!$admin_is_parent && file_exists(WP_PLUGIN_DIR . "/$menu_file") && !is_dir(WP_PLUGIN_DIR . "/{$item[2]}") ) || file_exists($menu_file);
    138                     if ( $parent_exists )
    139                         echo "<li$class><a href='{$item[2]}?page={$sub_item[2]}'$class$tabindex>{$sub_item[0]}</a></li>";
    140                     elseif ( 'admin.php' == $pagenow || !$parent_exists )
    141                         echo "<li$class><a href='admin.php?page={$sub_item[2]}'$class$tabindex>{$sub_item[0]}</a></li>";
     143                    if ( (!$admin_is_parent && file_exists(WP_PLUGIN_DIR . "/$menu_file") && !is_dir(WP_PLUGIN_DIR . "/{$item[2]}")) || file_exists($menu_file) )
     144                        $sub_item_url = add_query_arg( array('page' => $sub_item[2]), $item[2] );
    142145                    else
    143                         echo "<li$class><a href='{$item[2]}?page={$sub_item[2]}'$class$tabindex>{$sub_item[0]}</a></li>";
     146                        $sub_item_url = add_query_arg( array('page' => $sub_item[2]), 'admin.php' );
     147                    echo "<li$class><a href='$sub_item_url'$class$tabindex>{$sub_item[0]}</a></li>";
    144148                } else {
    145149                    echo "<li$class><a href='{$sub_item[2]}'$class$tabindex>{$sub_item[0]}</a></li>";
Note: See TracChangeset for help on using the changeset viewer.