Nav Menus: show custom post type Archive item at the top of the View All tab for the post type on the legacy Nav Menu screen.

Props aaroncampbell, DrewAPicture, seanchayes, hlashbrooke, paulwilde, ericlewis, raulillana
See #16075.

Built from https://develop.svn.wordpress.org/trunk@35382


git-svn-id: http://core.svn.wordpress.org/trunk@35346 1a063a9b-81f0-0310-95a4-ce76da25c4cd
This commit is contained in:
Scott Taylor 2015-10-24 17:46:25 +00:00
parent 21278f1fc8
commit dc1e85a540
6 changed files with 51 additions and 0 deletions

View File

@ -1159,6 +1159,10 @@ function wp_ajax_add_menu_item() {
$_object = get_post( $menu_item_data['menu-item-object-id'] ); $_object = get_post( $menu_item_data['menu-item-object-id'] );
break; break;
case 'post_type_archive' :
$_object = get_post_type_object( $menu_item_data['menu-item-object'] );
break;
case 'taxonomy' : case 'taxonomy' :
$_object = get_term( $menu_item_data['menu-item-object-id'], $menu_item_data['menu-item-object'] ); $_object = get_term( $menu_item_data['menu-item-object-id'], $menu_item_data['menu-item-object'] );
break; break;

View File

@ -78,6 +78,9 @@ class Walker_Nav_Menu_Edit extends Walker_Nav_Menu {
} elseif ( 'post_type' == $item->type ) { } elseif ( 'post_type' == $item->type ) {
$original_object = get_post( $item->object_id ); $original_object = get_post( $item->object_id );
$original_title = get_the_title( $original_object->ID ); $original_title = get_the_title( $original_object->ID );
} elseif ( 'post_type_archive' == $item->type ) {
$original_object = get_post_type_object( $item->object );
$original_title = $original_object->labels->archives;
} }
$classes = array( $classes = array(

View File

@ -493,6 +493,23 @@ function wp_nav_menu_item_post_type_meta_box( $object, $post_type ) {
} }
} }
$post_type = get_post_type_object( $post_type_name );
$archive_link = get_post_type_archive_link( $post_type_name );
if ( $post_type->has_archive ) {
$_nav_menu_placeholder = ( 0 > $_nav_menu_placeholder ) ? intval($_nav_menu_placeholder) - 1 : -1;
array_unshift( $posts, (object) array(
'ID' => 0,
'object_id' => $_nav_menu_placeholder,
'object' => $post_type_name,
'post_content' => '',
'post_excerpt' => '',
'post_title' => $post_type->labels->archives,
'post_type' => 'nav_menu_item',
'type' => 'post_type_archive',
'url' => get_post_type_archive_link( $post_type_name ),
) );
}
/** /**
* Filter the posts displayed in the 'View All' tab of the current * Filter the posts displayed in the 'View All' tab of the current
* post type's menu items meta box. * post type's menu items meta box.

View File

@ -578,6 +578,13 @@ function _wp_menu_item_classes_by_context( &$menu_items ) {
$active_parent_object_ids[] = (int) $menu_item->post_parent; $active_parent_object_ids[] = (int) $menu_item->post_parent;
$active_object = $menu_item->object; $active_object = $menu_item->object;
// if the menu item corresponds to the currently-queried post type archive
} elseif (
'post_type_archive' == $menu_item->type &&
is_post_type_archive( array( $menu_item->object ) )
) {
$classes[] = 'current-menu-item';
$menu_items[$key]->current = true;
// if the menu item corresponds to the currently-requested URL // if the menu item corresponds to the currently-requested URL
} elseif ( 'custom' == $menu_item->object && isset( $_SERVER['HTTP_HOST'] ) ) { } elseif ( 'custom' == $menu_item->object && isset( $_SERVER['HTTP_HOST'] ) ) {
$_root_relative_current = untrailingslashit( $_SERVER['REQUEST_URI'] ); $_root_relative_current = untrailingslashit( $_SERVER['REQUEST_URI'] );

View File

@ -403,6 +403,9 @@ function wp_update_nav_menu_item( $menu_id = 0, $menu_item_db_id = 0, $menu_item
$original_object = get_post( $args['menu-item-object-id'] ); $original_object = get_post( $args['menu-item-object-id'] );
$original_parent = (int) $original_object->post_parent; $original_parent = (int) $original_object->post_parent;
$original_title = $original_object->post_title; $original_title = $original_object->post_title;
} elseif ( 'post_type_archive' == $args['menu-item-type'] ) {
$original_object = get_post_type_object( $args['menu-item-object'] );
$original_title = $original_object->labels->archives;
} }
if ( $args['menu-item-title'] == $original_title ) if ( $args['menu-item-title'] == $original_title )
@ -731,6 +734,17 @@ function wp_setup_nav_menu_item( $menu_item ) {
$menu_item->title = '' == $menu_item->post_title ? $original_title : $menu_item->post_title; $menu_item->title = '' == $menu_item->post_title ? $original_title : $menu_item->post_title;
} elseif ( 'post_type_archive' == $menu_item->type ) {
$object = get_post_type_object( $menu_item->object );
if ( $object ) {
$menu_item->title = '' == $menu_item->post_title ? $object->labels->archives : $menu_item->post_title;
} else {
$menu_item->_invalid = true;
}
$menu_item->type_label = __( 'Post Type Archive' );
$menu_item->description = '';
$menu_item->url = get_post_type_archive_link( $menu_item->object );
} elseif ( 'taxonomy' == $menu_item->type ) { } elseif ( 'taxonomy' == $menu_item->type ) {
$object = get_taxonomy( $menu_item->object ); $object = get_taxonomy( $menu_item->object );
if ( $object ) { if ( $object ) {

View File

@ -1323,6 +1323,7 @@ function _post_type_meta_capabilities( $capabilities = null ) {
* - parent_item_colon - This string isn't used on non-hierarchical types. In hierarchical * - parent_item_colon - This string isn't used on non-hierarchical types. In hierarchical
* ones the default is 'Parent Page:'. * ones the default is 'Parent Page:'.
* - all_items - String for the submenu. Default is All Posts/All Pages. * - all_items - String for the submenu. Default is All Posts/All Pages.
* - archives - String for use with archives in nav menus. Default is Post Archives/Page Archives.
* - insert_into_item - String for the media frame button. Default is Insert into post/Insert into page. * - insert_into_item - String for the media frame button. Default is Insert into post/Insert into page.
* - uploaded_to_this_item - String for the media frame filter. Default is Uploaded to this post/Uploaded to this page. * - uploaded_to_this_item - String for the media frame filter. Default is Uploaded to this post/Uploaded to this page.
* - featured_image - Default is Featured Image. * - featured_image - Default is Featured Image.
@ -1362,6 +1363,7 @@ function get_post_type_labels( $post_type_object ) {
'not_found_in_trash' => array( __('No posts found in Trash.'), __('No pages found in Trash.') ), 'not_found_in_trash' => array( __('No posts found in Trash.'), __('No pages found in Trash.') ),
'parent_item_colon' => array( null, __('Parent Page:') ), 'parent_item_colon' => array( null, __('Parent Page:') ),
'all_items' => array( __( 'All Posts' ), __( 'All Pages' ) ), 'all_items' => array( __( 'All Posts' ), __( 'All Pages' ) ),
'archives' => array( __( 'Post Archives' ), __( 'Page Archives' ) ),
'insert_into_item' => array( __( 'Insert into post' ), __( 'Insert into page' ) ), 'insert_into_item' => array( __( 'Insert into post' ), __( 'Insert into page' ) ),
'uploaded_to_this_item' => array( __( 'Uploaded to this post' ), __( 'Uploaded to this page' ) ), 'uploaded_to_this_item' => array( __( 'Uploaded to this post' ), __( 'Uploaded to this page' ) ),
'featured_image' => array( __( 'Featured Image' ), __( 'Featured Image' ) ), 'featured_image' => array( __( 'Featured Image' ), __( 'Featured Image' ) ),
@ -1428,6 +1430,10 @@ function _get_custom_object_labels( $object, $nohier_vs_hier_defaults ) {
if ( !isset( $object->labels['all_items'] ) && isset( $object->labels['menu_name'] ) ) if ( !isset( $object->labels['all_items'] ) && isset( $object->labels['menu_name'] ) )
$object->labels['all_items'] = $object->labels['menu_name']; $object->labels['all_items'] = $object->labels['menu_name'];
if ( !isset( $object->labels['archives'] ) && isset( $object->labels['all_items'] ) ) {
$object->labels['archives'] = $object->labels['all_items'];
}
$defaults = array(); $defaults = array();
foreach ( $nohier_vs_hier_defaults as $key => $value ) { foreach ( $nohier_vs_hier_defaults as $key => $value ) {
$defaults[$key] = $object->hierarchical ? $value[1] : $value[0]; $defaults[$key] = $object->hierarchical ? $value[1] : $value[0];