WordPress.org

Make WordPress Core

Changeset 15844


Ignore:
Timestamp:
10/19/10 07:58:02 (4 years ago)
Author:
nacin
Message:

Introduce show_in_menu for register_post_type. Allows post types to be a submenu. Accepts boolean and also a parent base. With help from duck_. fixes #14145.

Location:
trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/wp-admin/includes/template.php

    r15843 r15844  
    18981898    global $current_screen, $typenow; 
    18991899 
     1900    var_dump( $current_screen ); 
    19001901    if ( empty($screen) ) 
    19011902        $screen = $current_screen; 
  • trunk/wp-admin/menu-header.php

    r14127 r15844  
    4848            $class[] = 'wp-has-submenu'; 
    4949 
    50         if ( ( $parent_file && $item[2] == $parent_file ) || ( false === strpos($parent_file, '?') && $self == $item[2] ) ) { 
     50        if ( ( $parent_file && $item[2] == $parent_file ) || ( empty($typenow) && $self == $item[2] ) ) { 
    5151            if ( !empty($submenu[$item[2]]) ) 
    5252                $class[] = 'wp-has-current-submenu wp-menu-open'; 
  • trunk/wp-admin/menu.php

    r15747 r15844  
    106106$_wp_last_object_menu = 25; // The index of the last top-level menu in the object menu group 
    107107 
    108 foreach ( (array) get_post_types( array('show_ui' => true, '_builtin' => false) ) as $ptype ) { 
     108foreach ( (array) get_post_types( array('show_ui' => true, '_builtin' => false, 'show_in_menu' => true ) ) as $ptype ) { 
    109109    $ptype_obj = get_post_type_object( $ptype ); 
     110    // Check if it should be a submenu. 
     111    if ( $ptype_obj->show_in_menu !== true ) 
     112        continue; 
    110113    $ptype_menu_position = is_int( $ptype_obj->menu_position ) ? $ptype_obj->menu_position : ++$_wp_last_object_menu; // If we're to use $_wp_last_object_menu, increment it first. 
    111114    $ptype_for_id = sanitize_html_class( $ptype ); 
  • trunk/wp-includes/post.php

    r15843 r15844  
    833833 * - publicly_queryable - Whether post_type queries can be performed from the front page.  Defaults to whatever public is set as. 
    834834 * - show_ui - Whether to generate a default UI for managing this post type. Defaults to true if the type is public, false if the type is not public. 
     835 * - show_in_menu - Where to show the post type in the admin menu. True for a top level menu, false for no menu, or can be a top level page like 'tools.php' or 'edit.php?post_type=page'. show_ui must be true. 
    835836 * - menu_position - The position in the menu order the post type should appear. Defaults to the bottom. 
    836837 * - menu_icon - The url to the icon to be used for this menu. Defaults to use the posts icon. 
     
    869870        'public' => false, 'rewrite' => true, 'query_var' => true, 'supports' => array(), 'register_meta_box_cb' => null, 
    870871        'taxonomies' => array(), 'show_ui' => null, 'menu_position' => null, 'menu_icon' => null, 
    871         'permalink_epmask' => EP_PERMALINK, 'can_export' => true, 'show_in_nav_menus' => null 
     872        'permalink_epmask' => EP_PERMALINK, 'can_export' => true, 'show_in_nav_menus' => null, 'show_in_menu' => null, 
    872873    ); 
    873874    $args = wp_parse_args($args, $defaults); 
     
    884885    if ( null === $args->show_ui ) 
    885886        $args->show_ui = $args->public; 
     887 
     888    // If not set, default to the setting for show_ui. 
     889    if ( null === $args->show_in_menu || ! $args->show_ui ) 
     890        $args->show_in_menu = $args->show_ui; 
    886891 
    887892    // Whether to show this type in nav-menus.php.  Defaults to the setting for public. 
     
    10351040 * 
    10361041 * @access private 
     1042 * @since 3.0.0 
    10371043 */ 
    10381044function _get_custom_object_labels( $object, $nohier_vs_hier_defaults ) { 
     
    10481054    return (object)$labels; 
    10491055} 
     1056 
     1057/** 
     1058 * Adds submenus for post types. 
     1059 * 
     1060 * @access private 
     1061 * @since 3.1.0 
     1062 */  
     1063function _add_post_type_submenus() { 
     1064    foreach ( get_post_types( array( 'show_ui' => true ) ) as $ptype ) { 
     1065        $ptype_obj = get_post_type_object( $ptype ); 
     1066        // Submenus only. 
     1067        if ( ! $ptype_obj->show_in_menu || $ptype_obj->show_in_menu === true ) 
     1068            continue; 
     1069        add_submenu_page( $ptype_obj->show_in_menu, $ptype_obj->labels->name, $ptype_obj->labels->name, $ptype_obj->cap->edit_posts, "edit.php?post_type=$ptype" ); 
     1070    } 
     1071} 
     1072add_action( 'admin_menu', '_add_post_type_submenus' ); 
    10501073 
    10511074/** 
Note: See TracChangeset for help on using the changeset viewer.