mirror of
git://develop.git.wordpress.org/
synced 2025-02-24 16:43:06 +01:00
Explicitly assign menu term relationship rather than piggybacking on wp_insert_post() with the tax_input argument.
That argument currently depends on user context (see #19373). Adds unit test for properly updating orphaned menu items. props danielbachhuber. fixes #27113. git-svn-id: https://develop.svn.wordpress.org/trunk@27556 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
parent
ad650e283b
commit
05911cc3d4
@ -365,10 +365,6 @@ function wp_update_nav_menu_item( $menu_id = 0, $menu_item_db_id = 0, $menu_item
|
|||||||
|
|
||||||
$update = 0 != $menu_item_db_id;
|
$update = 0 != $menu_item_db_id;
|
||||||
|
|
||||||
// Only set the menu term if it isn't set to avoid unnecessary wp_get_object_terms()
|
|
||||||
if ( $menu_id && ( ! $update || ! is_object_in_term( $menu_item_db_id, 'nav_menu', (int) $menu->term_id ) ) )
|
|
||||||
$post['tax_input'] = array( 'nav_menu' => array( intval( $menu->term_id ) ) );
|
|
||||||
|
|
||||||
// New menu item. Default is draft status
|
// New menu item. Default is draft status
|
||||||
if ( ! $update ) {
|
if ( ! $update ) {
|
||||||
$post['ID'] = 0;
|
$post['ID'] = 0;
|
||||||
@ -378,6 +374,12 @@ function wp_update_nav_menu_item( $menu_id = 0, $menu_item_db_id = 0, $menu_item
|
|||||||
return $menu_item_db_id;
|
return $menu_item_db_id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Associate the menu item with the menu term
|
||||||
|
// Only set the menu term if it isn't set to avoid unnecessary wp_get_object_terms()
|
||||||
|
if ( $menu_id && ( ! $update || ! is_object_in_term( $menu_item_db_id, 'nav_menu', (int) $menu->term_id ) ) ) {
|
||||||
|
wp_set_object_terms( $menu_item_db_id, array( $menu->term_id ), 'nav_menu' );
|
||||||
|
}
|
||||||
|
|
||||||
if ( 'custom' == $args['menu-item-type'] ) {
|
if ( 'custom' == $args['menu-item-type'] ) {
|
||||||
$args['menu-item-object-id'] = $menu_item_db_id;
|
$args['menu-item-object-id'] = $menu_item_db_id;
|
||||||
$args['menu-item-object'] = 'custom';
|
$args['menu-item-object'] = 'custom';
|
||||||
|
@ -88,4 +88,32 @@ class Test_Nav_Menus extends WP_UnitTestCase {
|
|||||||
$page_items = wp_get_associated_nav_menu_items( $page_id );
|
$page_items = wp_get_associated_nav_menu_items( $page_id );
|
||||||
$this->assertEqualSets( array(), $page_items );
|
$this->assertEqualSets( array(), $page_items );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ticket 27113
|
||||||
|
*/
|
||||||
|
function test_orphan_nav_menu_item() {
|
||||||
|
|
||||||
|
// Create an orphan nav menu item
|
||||||
|
$custom_item_id = wp_update_nav_menu_item( 0, 0, array(
|
||||||
|
'menu-item-type' => 'custom',
|
||||||
|
'menu-item-title' => 'Wordpress.org',
|
||||||
|
'menu-item-link' => 'http://wordpress.org',
|
||||||
|
'menu-item-status' => 'publish'
|
||||||
|
) );
|
||||||
|
|
||||||
|
// Confirm it saved properly
|
||||||
|
$custom_item = wp_setup_nav_menu_item( get_post( $custom_item_id ) );
|
||||||
|
$this->assertEquals( 'Wordpress.org', $custom_item->title );
|
||||||
|
|
||||||
|
// Update the orphan with an associated nav menu
|
||||||
|
wp_update_nav_menu_item( $this->menu_id, $custom_item_id, array(
|
||||||
|
'menu-item-title' => 'WordPress.org',
|
||||||
|
) );
|
||||||
|
$menu_items = wp_get_nav_menu_items( $this->menu_id );
|
||||||
|
$custom_item = wp_filter_object_list( $menu_items, array( 'db_id' => $custom_item_id ) );
|
||||||
|
$custom_item = array_pop( $custom_item );
|
||||||
|
$this->assertEquals( 'WordPress.org', $custom_item->title );
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user