diff --git a/wp-admin/menu.php b/wp-admin/menu.php index 56145d995f..040d6dd1b0 100644 --- a/wp-admin/menu.php +++ b/wp-admin/menu.php @@ -116,8 +116,10 @@ $_wp_last_object_menu = 25; // The index of the last top-level menu in the objec foreach ( (array) get_post_types( array('show_ui' => true) ) as $ptype ) { $_wp_last_object_menu++; $ptype_obj = get_post_type_object($ptype); - - $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'); + $ptype_menu_position = is_int( $ptype_obj->menu_position ) ? $ptype_obj->menu_position : $_wp_last_object_menu; + $menu_icon = is_string($ptype_obj->menu_icon) ? esc_url($ptype_obj->menu_icon) : 'div'; + + $menu[$ptype_menu_position] = 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), $menu_icon); $submenu["edit.php?post_type=$ptype"][5] = array( __('Edit'), $ptype_obj->edit_type_cap, "edit.php?post_type=$ptype"); /* translators: add new custom post type */ $submenu["edit.php?post_type=$ptype"][10] = array( _x('Add New', 'post'), $ptype_obj->edit_type_cap, "post-new.php?post_type=$ptype" ); diff --git a/wp-includes/post.php b/wp-includes/post.php index 66eed66677..4dc72866df 100644 --- a/wp-includes/post.php +++ b/wp-includes/post.php @@ -764,6 +764,8 @@ function get_post_types( $args = array(), $output = 'names' ) { * 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. * publicly_queryable - Whether post_type queries can be performed from the front page. Defaults to whatever public is set as. * 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. + * menu_position - The position in the menu order the post type should appear. Defaults to the bottom. + * menu_icon - The url to the icon to be used for this menu. Defaults to use the posts icon. * inherit_type - The post type from which to inherit the edit link and capability type. Defaults to none. * capability_type - The post type to use for checking read, edit, and delete capabilities. Defaults to "post". * edit_cap - The capability that controls editing a particular object of this post type. Defaults to "edit_$capability_type" (edit_post). @@ -792,7 +794,7 @@ function register_post_type($post_type, $args = array()) { $wp_post_types = array(); // Args prefixed with an underscore are reserved for internal use. - $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, 'permalink_epmask' => EP_NONE ); + $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_icon' => null, 'permalink_epmask' => EP_NONE ); $args = wp_parse_args($args, $defaults); $args = (object) $args;