WordPress.org

Make WordPress Core

Ticket #12541: register_post_type_submenu_arg.diff

File register_post_type_submenu_arg.diff, 8.8 KB (added by ptahdunbar, 8 years ago)
  • wp-includes/post.php

     
    1818        register_post_type( 'post', array(      'label' => __('Posts'),
    1919                                                                                'singular_label' => __('Post'),
    2020                                                                                'public' => true,
    21                                                                                 'show_ui' => false,
     21                                                                                'show_ui' => true,
     22                                                                                'menu_position' => 5,
    2223                                                                                '_builtin' => true,
    2324                                                                                '_edit_link' => 'post.php?post=%d',
    2425                                                                                'capability_type' => 'post',
     
    3132        register_post_type( 'page', array(      'label' => __('Pages'),
    3233                                                                                'singular_label' => __('Page'),
    3334                                                                                'public' => true,
    34                                                                                 'show_ui' => false,
     35                                                                                'show_ui' => true,
     36                                                                                'menu_position' => 20,
     37                                                                                'menu_class' => 'menu-icon-pages',
    3538                                                                                '_builtin' => true,
    3639                                                                                '_edit_link' => 'post.php?post=%d',
    3740                                                                                'capability_type' => 'page',
     
    4346
    4447        register_post_type( 'attachment', array('label' => __('Media'),
    4548                                                                                        'public' => true,
    46                                                                                         'show_ui' => false,
     49                                                                                        'show_ui' => true,
     50                                                                                        'menu_position' => 10,
     51                                                                                        'menu_class' => 'menu-icon-media',
    4752                                                                                        '_builtin' => true,
    4853                                                                                        '_edit_link' => 'media.php?attachment_id=%d',
    4954                                                                                        'capability_type' => 'post',
    5055                                                                                        'hierarchical' => false,
    5156                                                                                        'rewrite' => false,
    5257                                                                                        'query_var' => false,
     58                                                                                        'menu_slug' => 'upload.php',
     59                                                                                        'submenu' => array( 5 => array(
     60                                                                                                        'menu_title' => __('Library'),
     61                                                                                                        'capability' => 'upload_files',
     62                                                                                                        'menu_slug' => 'upload.php',
     63                                                                                                ), 10 => array(
     64                                                                                                        'menu_title' => _x('Add New', 'file'),
     65                                                                                                        'capability' => 'upload_files',
     66                                                                                                        'menu_slug' => 'media-new.php',
     67                                                                                                ),
     68                                                                                        ),
    5369                                                                                ) );
    5470
    5571        register_post_type( 'revision', array(  'label' => __('Revisions'),
     
    762778 * exclude_from_search - Whether to exclude posts with this post type from search results. Defaults to true if the type is not public, false if the type is public.
    763779 * publicly_queryable - Whether post_type queries can be performed from the front page.  Defaults to whatever public is set as.
    764780 * 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.
     781 * menu_position - The position in the menu order the post type should appear
     782 * menu_class - The menu class to apply to the post type to allow for a custom icon. Defaults to the posts icon.
     783 * menu_slug - The menu's page slug. Defaults to 'edit.php?post_type=%s'.
     784 * submenu - Customize the submenu items for the post type. Defaults to Edit, and Add New.
    765785 * inherit_type - The post type from which to inherit the edit link and capability type. Defaults to none.
    766786 * capability_type - The post type to use for checking read, edit, and delete capabilities. Defaults to "post".
    767787 * edit_cap - The capability that controls editing a particular object of this post type. Defaults to "edit_$capability_type" (edit_post).
     
    790810                $wp_post_types = array();
    791811
    792812        // Args prefixed with an underscore are reserved for internal use.
    793         $defaults = array('label' => false, 'singular_label' => false, 'description' => '', 'publicly_queryable' => null, 'exclude_from_search' => null, '_builtin' => false, '_edit_link' => 'post.php?post=%d', 'capability_type' => 'post', 'hierarchical' => false, 'public' => false, 'rewrite' => true, 'query_var' => true, 'supports' => array(), 'register_meta_box_cb' => null, 'taxonomies' => array(), 'show_ui' => null );
     813        $defaults = array('label' => false, 'singular_label' => false, 'description' => '', 'publicly_queryable' => null, 'exclude_from_search' => null, '_builtin' => false, '_edit_link' => 'post.php?post=%d', 'capability_type' => 'post', 'hierarchical' => false, 'public' => false, 'rewrite' => true, 'query_var' => true, 'supports' => array(), 'register_meta_box_cb' => null, 'taxonomies' => array(), 'show_ui' => null, 'menu_position' => null, 'menu_class' => null,  'menu_slug' => 'edit.php?post_type=%s' );
     814       
     815        $defaults['submenu'] = array(
     816                5 => array(
     817                        'menu_title' => __('Edit'),
     818                        'capability' => 'edit_posts',
     819                        'menu_slug' => 'edit.php?post_type=%s',
     820                ),
     821                10 => array(
     822                        'menu_title' => _x('Add New', 'post'),
     823                        'capability' => 'edit_posts',
     824                        'menu_slug' => 'post-new.php?post_type=%s',
     825                ),
     826        );
     827       
    794828        $args = wp_parse_args($args, $defaults);
    795829        $args = (object) $args;
    796830
  • wp-admin/menu.php

     
    7979
    8080$menu[4] = array( '', 'read', 'separator1', '', 'wp-menu-separator' );
    8181
    82 $menu[5] = array( __('Posts'), 'edit_posts', 'edit.php', '', 'open-if-no-js menu-top menu-icon-posts', 'menu-posts', 'div' );
    83         $submenu['edit.php'][5]  = array( __('Edit'), 'edit_posts', 'edit.php' );
    84         /* translators: add new post */
    85         $submenu['edit.php'][10]  = array( _x('Add New', 'post'), 'edit_posts', 'post-new.php' );
    86 
    87         $i = 15;
    88         foreach ( $wp_taxonomies as $tax ) {
    89                 if ( ! $tax->show_ui || ! in_array('post', (array) $tax->object_type, true) )
    90                         continue;
    91 
    92                 $submenu['edit.php'][$i++] = array( esc_attr($tax->label), $tax->manage_cap, 'edit-tags.php?taxonomy=' . $tax->name );
    93         }
    94         unset($tax);
    95 
    96 $menu[10] = array( __('Media'), 'upload_files', 'upload.php', '', 'menu-top menu-icon-media', 'menu-media', 'div' );
    97         $submenu['upload.php'][5] = array( __('Library'), 'upload_files', 'upload.php');
    98         /* translators: add new file */
    99         $submenu['upload.php'][10] = array( _x('Add New', 'file'), 'upload_files', 'media-new.php');
    100 
    10182$menu[15] = array( __('Links'), 'manage_links', 'link-manager.php', '', 'menu-top menu-icon-links', 'menu-links', 'div' );
    10283        $submenu['link-manager.php'][5] = array( __('Edit'), 'manage_links', 'link-manager.php' );
    10384        /* translators: add new links */
    10485        $submenu['link-manager.php'][10] = array( _x('Add New', 'link'), 'manage_links', 'link-add.php' );
    10586        $submenu['link-manager.php'][15] = array( __('Link Categories'), 'manage_categories', 'edit-link-categories.php' );
    10687
    107 $menu[20] = array( __('Pages'), 'edit_pages', 'edit.php?post_type=page', '', 'menu-top menu-icon-pages', 'menu-pages', 'div' );
    108         $submenu['edit.php?post_type=page'][5] = array( __('Edit'), 'edit_pages', 'edit.php?post_type=page' );
    109         /* translators: add new page */
    110         $submenu['edit.php?post_type=page'][10] = array( _x('Add New', 'page'), 'edit_pages', 'post-new.php?post_type=page' );
    111 
    11288$menu[25] = array( sprintf( __('Comments %s'), "<span id='awaiting-mod' class='count-$awaiting_mod'><span class='pending-count'>" . number_format_i18n($awaiting_mod) . "</span></span>" ), 'edit_posts', 'edit-comments.php', '', 'menu-top menu-icon-comments', 'menu-comments', 'div' );
    11389
    11490$_wp_last_object_menu = 25; // The index of the last top-level menu in the object menu group
     
    11793        $_wp_last_object_menu++;
    11894        $ptype_obj = get_post_type_object($ptype);
    11995       
    120         $menu[$_wp_last_object_menu] = array(esc_attr($ptype_obj->label), $ptype_obj->edit_type_cap, "edit.php?post_type=$ptype", '', 'menu-top menu-icon-posts', 'menu-' . sanitize_html_class($ptype), 'div');
    121         $submenu["edit.php?post_type=$ptype"][5]  = array( __('Edit'), 'edit_posts',  "edit.php?post_type=$ptype");
    122         /* translators: add new custom post type */
    123         $submenu["edit.php?post_type=$ptype"][10]  = array( _x('Add New', 'post'), 'edit_posts', "post-new.php?post_type=$ptype" );
     96        $ptype_menu_position = is_int($ptype_obj->menu_position) ? $ptype_obj->menu_position : $_wp_last_object_menu;
     97        $ptype_menu_class = is_string( $ptype_obj->menu_class ) ? $ptype_obj->menu_class : 'menu-icon-posts';
     98       
     99        $ptype_menu_slug = esc_url_raw( sprintf( $ptype_obj->menu_slug, $ptype ) );
     100       
     101        $menu[$ptype_menu_position] = array(esc_attr($ptype_obj->label), $ptype_obj->edit_type_cap, $ptype_menu_slug, '', 'menu-top ' . $ptype_menu_class, 'menu-' . sanitize_html_class($ptype), 'div');
     102       
     103        if ( is_array($ptype_obj->submenu) ) {
     104                foreach ( $ptype_obj->submenu as $key => $_submenu ) {
     105                        $submenu[$ptype_menu_slug][$key] = array( $_submenu['menu_title'], $_submenu['capability'], sprintf( $_submenu['menu_slug'], $ptype ) );
     106                }
     107        }
    124108
    125109        $i = 15;
    126110        foreach ( $wp_taxonomies as $tax ) {
    127111                if ( ! $tax->show_ui || ! in_array($ptype, (array) $tax->object_type, true) )
    128112                        continue;
    129113
    130                 $submenu["edit.php?post_type=$ptype"][$i++] = array( esc_attr($tax->label), $tax->manage_cap, "edit-tags.php?taxonomy=$tax->name&amp;post_type=$ptype" );
     114                $submenu[$ptype_menu_slug][$i++] = array( esc_attr($tax->label), $tax->manage_cap, "edit-tags.php?taxonomy=$tax->name&amp;post_type=$ptype" );
    131115        }
    132116}
    133 unset($ptype, $ptype_obj);
     117unset($ptype, $ptype_obj, $ptype_menu_position, $ptype_menu_class, $ptype_menu_slug);
    134118
    135119$menu[59] = array( '', 'read', 'separator2', '', 'wp-menu-separator' );
    136120