WordPress.org

Make WordPress Core


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

File:
1 edited

Legend:

Unmodified
Added
Removed
  • 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.