Ticket #27120: 27120.3.diff
File 27120.3.diff, 2.8 KB (added by , 7 years ago) |
---|
-
src/wp-includes/nav-menu.php
diff --git src/wp-includes/nav-menu.php src/wp-includes/nav-menu.php index 6ce589b..eeba2dc 100644
function wp_update_nav_menu_item( $menu_id = 0, $menu_item_db_id = 0, $menu_item 564 564 wp_update_post( $post ); 565 565 } 566 566 567 // Invalidate wp_get_nav_menu_items object cache 568 $cache_key = sprintf( 'menu_items:%s:%s', $menu_id, md5( serialize( $args ) ) ); 569 wp_cache_delete( $cache_key, 'menu' ); 570 567 571 /** 568 572 * Fires after a navigation menu item has been updated. 569 573 * … … function wp_get_nav_menu_items( $menu, $args = array() ) { 684 688 $args['include'] = $items; 685 689 686 690 if ( ! empty( $items ) ) { 687 $items = get_posts( $args ); 691 $cache_key = sprintf( 'menu_items:%s:%s', $menu->ID, md5( serialize( $args ) ) ); 692 if ( false === ( $item_ids = wp_cache_get( $cache_key, 'menu' ) ) ) { 693 $item_ids = array(); 694 foreach ( get_posts( $args ) as $post ) { 695 $item_ids []= $post->ID; 696 } 697 wp_cache_set( $cache_key, $item_ids, 'menu' ); 698 } 699 700 $items = array_map( 'get_post', $item_ids ); 688 701 } else { 689 702 $items = array(); 690 703 } -
tests/phpunit/tests/post/nav-menu.php
diff --git tests/phpunit/tests/post/nav-menu.php tests/phpunit/tests/post/nav-menu.php index d99b1a9..be13e72 100644
class Test_Nav_Menus extends WP_UnitTestCase { 505 505 } 506 506 507 507 /** 508 * @ticket 27120 509 */ 510 function test_nav_menu_cache() { 511 $post_id = self::factory()->post->create(); 512 513 wp_update_nav_menu_item( 514 $this->menu_id, 0, array( 515 'menu-item-type' => 'post_type', 516 'menu-item-object' => 'post', 517 'menu-item-object-id' => $post_id, 518 'menu-item-status' => 'publish', 519 ) 520 ); 521 522 global $wpdb; 523 524 $num_queries = $wpdb->num_queries; 525 526 /** First call */ 527 $menu = wp_nav_menu( 528 array( 529 'echo' => false, 530 'menu' => $this->menu_id, 531 ) 532 ); 533 534 $this->assertNotEquals( $num_queries, $wpdb->num_queries ); 535 536 $num_queries = $wpdb->num_queries; 537 538 /** Cached call */ 539 $menu = wp_nav_menu( 540 array( 541 'echo' => false, 542 'menu' => $this->menu_id, 543 ) 544 ); 545 546 $this->assertEquals( $num_queries, $wpdb->num_queries ); 547 548 $post_id = self::factory()->post->create(); 549 550 $new_item_id = wp_update_nav_menu_item( 551 $this->menu_id, 0, array( 552 'menu-item-type' => 'post_type', 553 'menu-item-object' => 'post', 554 'menu-item-object-id' => $post_id, 555 'menu-item-status' => 'publish', 556 ) 557 ); 558 559 /** Invalidated */ 560 $menu = wp_nav_menu( 561 array( 562 'echo' => false, 563 'menu' => $this->menu_id, 564 ) 565 ); 566 567 $this->assertContains( "menu-item-$new_item_id", $menu ); 568 } 569 570 /** 508 571 * Run tests required to confrim Walker_Nav_Menu receives an $args object. 509 572 */ 510 573 function _confirm_nav_menu_item_args_object( $args ) {