Nav Menu: Remove post/page items from the Nav Menu when the post/page is deleted.
This was broken through a change in [25163]. `_menu_item_object` in wp_get_associated_nav_menu_items() is not relevant for post types. Adds unit tests. props UmeshSingla for initial patch. fixes #26795. git-svn-id: https://develop.svn.wordpress.org/trunk@27150 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
parent
d670819b03
commit
586cb2b140
|
@ -702,11 +702,19 @@ function wp_get_associated_nav_menu_items( $object_id = 0, $object_type = 'post_
|
||||||
);
|
);
|
||||||
foreach( (array) $menu_items as $menu_item ) {
|
foreach( (array) $menu_items as $menu_item ) {
|
||||||
if ( isset( $menu_item->ID ) && is_nav_menu_item( $menu_item->ID ) ) {
|
if ( isset( $menu_item->ID ) && is_nav_menu_item( $menu_item->ID ) ) {
|
||||||
if ( get_post_meta( $menu_item->ID, '_menu_item_type', true ) !== $object_type ||
|
$menu_item_type = get_post_meta( $menu_item->ID, '_menu_item_type', true );
|
||||||
get_post_meta( $menu_item->ID, '_menu_item_object', true ) !== $taxonomy )
|
if (
|
||||||
continue;
|
'post_type' == $object_type &&
|
||||||
|
'post_type' == $menu_item_type
|
||||||
|
) {
|
||||||
$menu_item_ids[] = (int) $menu_item->ID;
|
$menu_item_ids[] = (int) $menu_item->ID;
|
||||||
|
} else if (
|
||||||
|
'taxonomy' == $object_type &&
|
||||||
|
'taxonomy' == $menu_item_type &&
|
||||||
|
get_post_meta( $menu_item->ID, '_menu_item_object', true ) == $taxonomy
|
||||||
|
) {
|
||||||
|
$menu_item_ids[] = (int) $menu_item->ID;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -18,6 +18,9 @@ class Test_Nav_Menus extends WP_UnitTestCase {
|
||||||
function test_wp_get_associated_nav_menu_items() {
|
function test_wp_get_associated_nav_menu_items() {
|
||||||
$tag_id = $this->factory->tag->create();
|
$tag_id = $this->factory->tag->create();
|
||||||
$cat_id = $this->factory->category->create();
|
$cat_id = $this->factory->category->create();
|
||||||
|
$post_id = $this->factory->post->create();
|
||||||
|
$post_2_id = $this->factory->post->create();
|
||||||
|
$page_id = $this->factory->post->create( array( 'post_type' => 'page' ) );
|
||||||
|
|
||||||
$tag_insert = wp_update_nav_menu_item( $this->menu_id, 0, array(
|
$tag_insert = wp_update_nav_menu_item( $this->menu_id, 0, array(
|
||||||
'menu-item-type' => 'taxonomy',
|
'menu-item-type' => 'taxonomy',
|
||||||
|
@ -33,9 +36,56 @@ class Test_Nav_Menus extends WP_UnitTestCase {
|
||||||
'menu-item-status' => 'publish'
|
'menu-item-status' => 'publish'
|
||||||
) );
|
) );
|
||||||
|
|
||||||
|
$post_insert = wp_update_nav_menu_item( $this->menu_id, 0, array(
|
||||||
|
'menu-item-type' => 'post_type',
|
||||||
|
'menu-item-object' => 'post',
|
||||||
|
'menu-item-object-id' => $post_id,
|
||||||
|
'menu-item-status' => 'publish'
|
||||||
|
) );
|
||||||
|
|
||||||
|
// Item without menu-item-object arg
|
||||||
|
$post_2_insert = wp_update_nav_menu_item( $this->menu_id, 0, array(
|
||||||
|
'menu-item-type' => 'post_type',
|
||||||
|
'menu-item-object-id' => $post_2_id,
|
||||||
|
'menu-item-status' => 'publish'
|
||||||
|
) );
|
||||||
|
|
||||||
|
$page_insert = wp_update_nav_menu_item( $this->menu_id, 0, array(
|
||||||
|
'menu-item-type' => 'post_type',
|
||||||
|
'menu-item-object' => 'page',
|
||||||
|
'menu-item-object-id' => $page_id,
|
||||||
|
'menu-item-status' => 'publish'
|
||||||
|
) );
|
||||||
|
|
||||||
$tag_items = wp_get_associated_nav_menu_items( $tag_id, 'taxonomy', 'post_tag' );
|
$tag_items = wp_get_associated_nav_menu_items( $tag_id, 'taxonomy', 'post_tag' );
|
||||||
$this->assertEqualSets( array( $tag_insert ), $tag_items );
|
$this->assertEqualSets( array( $tag_insert ), $tag_items );
|
||||||
$cat_items = wp_get_associated_nav_menu_items( $cat_id, 'taxonomy', 'category' );
|
$cat_items = wp_get_associated_nav_menu_items( $cat_id, 'taxonomy', 'category' );
|
||||||
$this->assertEqualSets( array( $cat_insert ), $cat_items );
|
$this->assertEqualSets( array( $cat_insert ), $cat_items );
|
||||||
|
$post_items = wp_get_associated_nav_menu_items( $post_id );
|
||||||
|
$this->assertEqualSets( array( $post_insert ), $post_items );
|
||||||
|
$post_2_items = wp_get_associated_nav_menu_items( $post_2_id );
|
||||||
|
$this->assertEqualSets( array( $post_2_insert ), $post_2_items );
|
||||||
|
$page_items = wp_get_associated_nav_menu_items( $page_id );
|
||||||
|
$this->assertEqualSets( array( $page_insert ), $page_items );
|
||||||
|
|
||||||
|
wp_delete_term( $tag_id, 'post_tag' );
|
||||||
|
$tag_items = wp_get_associated_nav_menu_items( $tag_id, 'taxonomy', 'post_tag' );
|
||||||
|
$this->assertEqualSets( array(), $tag_items );
|
||||||
|
|
||||||
|
wp_delete_term( $cat_id, 'category' );
|
||||||
|
$cat_items = wp_get_associated_nav_menu_items( $cat_id, 'taxonomy', 'category' );
|
||||||
|
$this->assertEqualSets( array(), $cat_items );
|
||||||
|
|
||||||
|
wp_delete_post( $post_id, true );
|
||||||
|
$post_items = wp_get_associated_nav_menu_items( $post_id );
|
||||||
|
$this->assertEqualSets( array(), $post_items );
|
||||||
|
|
||||||
|
wp_delete_post( $post_2_id, true );
|
||||||
|
$post_2_items = wp_get_associated_nav_menu_items( $post_2_id );
|
||||||
|
$this->assertEqualSets( array(), $post_2_items );
|
||||||
|
|
||||||
|
wp_delete_post( $page_id, true );
|
||||||
|
$page_items = wp_get_associated_nav_menu_items( $page_id );
|
||||||
|
$this->assertEqualSets( array(), $page_items );
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue