Ticket #28138: 28138.3.diff
File 28138.3.diff, 5.9 KB (added by , 10 years ago) |
---|
-
src/wp-includes/nav-menu.php
350 350 return $menu; 351 351 } 352 352 353 $defaults = array( 354 'menu-item-db-id' => $menu_item_db_id, 355 'menu-item-object-id' => 0, 356 'menu-item-object' => '', 357 'menu-item-parent-id' => 0, 358 'menu-item-position' => 0, 359 'menu-item-type' => 'custom', 360 'menu-item-title' => '', 361 'menu-item-url' => '', 362 'menu-item-description' => '', 363 'menu-item-attr-title' => '', 364 'menu-item-target' => '', 365 'menu-item-classes' => '', 366 'menu-item-xfn' => '', 367 'menu-item-status' => '', 368 ); 353 if ( 0 !== $menu_item_db_id ) { 354 // Existing item; only changed properties will be updated. 355 $item = get_post( $menu_item_db_id ); 356 $item = wp_setup_nav_menu_item( $item ); 357 $defaults = array( 358 'menu-item-db-id' => $menu_item_db_id, 359 'menu-item-object-id' => $item->object_id, 360 'menu-item-object' => $item->object, 361 'menu-item-parent-id' => $item->menu_item_parent, 362 'menu-item-position' => $item->menu_order, 363 'menu-item-type' => $item->type, 364 'menu-item-title' => $item->title, 365 'menu-item-url' => $item->url, 366 'menu-item-description' => $item->description, 367 'menu-item-attr-title' => $item->attr_title, 368 'menu-item-target' => $item->target, 369 'menu-item-classes' => $item->classes, 370 'menu-item-xfn' => $item->xfn, 371 'menu-item-status' => $item->post_status, 372 ); 373 } else { 374 $defaults = array( 375 'menu-item-db-id' => $menu_item_db_id, 376 'menu-item-object-id' => 0, 377 'menu-item-object' => '', 378 'menu-item-parent-id' => 0, 379 'menu-item-position' => 0, 380 'menu-item-type' => 'custom', 381 'menu-item-title' => '', 382 'menu-item-url' => '', 383 'menu-item-description' => '', 384 'menu-item-attr-title' => '', 385 'menu-item-target' => '', 386 'menu-item-classes' => '', 387 'menu-item-xfn' => '', 388 'menu-item-status' => '', 389 ); 390 } 369 391 370 392 $args = wp_parse_args( $menu_item_data, $defaults ); 371 393 … … 447 469 update_post_meta( $menu_item_db_id, '_menu_item_object', sanitize_key($args['menu-item-object']) ); 448 470 update_post_meta( $menu_item_db_id, '_menu_item_target', sanitize_key($args['menu-item-target']) ); 449 471 450 $args['menu-item-classes'] = array_map( 'sanitize_html_class', explode( ' ', $args['menu-item-classes'] ) ); 472 if ( ! is_array( $args['menu-item-classes'] ) ) { 473 $args['menu-item-classes'] = explode( ' ', $args['menu-item-classes'] ); 474 } 475 $args['menu-item-classes'] = array_map( 'sanitize_html_class', $args['menu-item-classes'] ); 451 476 $args['menu-item-xfn'] = implode( ' ', array_map( 'sanitize_html_class', explode( ' ', $args['menu-item-xfn'] ) ) ); 452 477 update_post_meta( $menu_item_db_id, '_menu_item_classes', $args['menu-item-classes'] ); 453 478 update_post_meta( $menu_item_db_id, '_menu_item_xfn', $args['menu-item-xfn'] ); -
tests/phpunit/tests/customize/nav-menu-item-setting.php
622 622 $this->assertEquals( 'deleted', $update_result['status'] ); 623 623 } 624 624 625 /** 626 * Make sure an existing menu item is pre-populated with its existing values. 627 * 628 * @ticket 28138 629 */ 630 function test_default_values() { 631 do_action( 'customize_register', $this->wp_customize ); 632 633 $first_post_id = $this->factory->post->create( array( 'post_title' => 'Hello World' ) ); 634 635 $primary_menu_id = wp_create_nav_menu( 'Primary' ); 636 $item_title = 'Greetings'; 637 $item_id = wp_update_nav_menu_item( $primary_menu_id, 0, array( 638 'menu-item-type' => 'post_type', 639 'menu-item-object' => 'post', 640 'menu-item-object-id' => $first_post_id, 641 'menu-item-title' => $item_title, 642 'menu-item-status' => 'publish', 643 'menu-item-parent-id' => 1, 644 'menu-item-position' => 1, 645 'menu-item-description' => 'This is a test', 646 'menu-item-attr-title' => 'Attribute title', 647 'menu-item-target' => '_blank', 648 'menu-item-classes' => 'first second', 649 'menu-item-xfn' => 'xfn', 650 ) ); 651 652 // Hook a mock action into the update action so we can capture arguments 653 $a = new MockAction(); 654 add_action( 'wp_update_nav_menu_item', array( $a, 'action' ), 10, 3 ); 655 656 // Now update the menu, passing no information, and verify that everything stayed the same 657 $updated_id = wp_update_nav_menu_item( $primary_menu_id, $item_id, array() ); 658 659 // Verify 660 $this->assertEquals( 1, $a->get_call_count() ); 661 662 $args = $a->get_args(); 663 $args = $args[0]; // There is only one item in the collection 664 $this->assertEquals( $primary_menu_id, $args[0] ); 665 $this->assertEquals( $item_id, $args[1] ); 666 667 $this->assertEquals( 'post_type', $args[2]['menu-item-type'] ); 668 $this->assertEquals( 'post', $args[2]['menu-item-object'] ); 669 $this->assertEquals( $first_post_id, $args[2]['menu-item-object-id'] ); 670 $this->assertEquals( $item_title, $args[2]['menu-item-title'] ); 671 $this->assertEquals( 'publish', $args[2]['menu-item-status'] ); 672 $this->assertEquals( 1, $args[2]['menu-item-parent-id'] ); 673 $this->assertEquals( 1, $args[2]['menu-item-position'] ); 674 $this->assertEquals( 'This is a test', $args[2]['menu-item-description'] ); 675 $this->assertEquals( 'Attribute title', $args[2]['menu-item-attr-title'] ); 676 $this->assertEquals( '_blank', $args[2]['menu-item-target'] ); 677 $this->assertEquals( 'xfn', $args[2]['menu-item-xfn'] ); 678 679 $this->assertContains( 'first', $args[2]['menu-item-classes'] ); 680 $this->assertContains( 'second', $args[2]['menu-item-classes'] ); 681 } 625 682 }