WordPress.org

Make WordPress Core

Changeset 15844


Ignore:
Timestamp:
10/19/2010 07:58:02 AM (8 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.