Ticket #14439: 14439.patch
File 14439.patch, 3.9 KB (added by , 10 years ago) |
---|
-
src/wp-includes/nav-menu.php
780 780 * @since 3.0.0 781 781 * 782 782 * @param int $object_id The ID of the original object. 783 * @param string $object_type The type of object, such as "taxonomy" or "post_type." 784 * @param string $taxonomy If $object_type is "taxonomy", $taxonomy is the name of the tax that $object_id belongs to 785 * @return array The array of menu item IDs; empty array if none; 783 * @param string $object_type The type of object, such as "taxonomy" or "post_type". 784 * @param string $taxonomy If $object_type is "taxonomy", $taxonomy is the name of the tax that $object_id belongs to. 785 * @param int $menu_id The ID of the menu to search into. "0" will search in all menus. 786 * @return array The array of menu item IDs; empty array if none. 786 787 */ 787 function wp_get_associated_nav_menu_items( $object_id = 0, $object_type = 'post_type', $taxonomy = '' ) {788 function wp_get_associated_nav_menu_items( $object_id = 0, $object_type = 'post_type', $taxonomy = '', $menu_id = 0 ) { 788 789 $object_id = (int) $object_id; 789 790 $menu_item_ids = array(); 790 791 792 $query_args = array( 793 'meta_key' => '_menu_item_object_id', 794 'meta_value' => $object_id, 795 'post_status' => 'any', 796 'post_type' => 'nav_menu_item', 797 'posts_per_page' => -1, 798 ); 799 800 if ( $menu_id ) { 801 $term = get_term( $menu_id, 'nav_menu' ); 802 if ( !$term || is_wp_error($term) ) { 803 return new WP_Error( 'invalid_menu_id', __( 'Invalid menu ID.' ) ); 804 } 805 806 $query_args['taxonomy'] = 'nav_menu'; 807 $query_args['term'] = $term->slug; 808 } 809 791 810 $query = new WP_Query; 792 $menu_items = $query->query( 793 array( 794 'meta_key' => '_menu_item_object_id', 795 'meta_value' => $object_id, 796 'post_status' => 'any', 797 'post_type' => 'nav_menu_item', 798 'posts_per_page' => -1, 799 ) 800 ); 811 $menu_items = $query->query($query_args); 812 801 813 foreach( (array) $menu_items as $menu_item ) { 802 814 if ( isset( $menu_item->ID ) && is_nav_menu_item( $menu_item->ID ) ) { 803 815 $menu_item_type = get_post_meta( $menu_item->ID, '_menu_item_type', true ); -
tests/phpunit/tests/post/nav-menu.php
90 90 } 91 91 92 92 /** 93 * @ticket 14439 94 */ 95 function test_wp_get_associated_nav_menu_items_menu_id() { 96 97 // Create the second menu 98 $menu_id_2 = wp_create_nav_menu( rand_str() ); 99 100 // Create our post object 101 $post_id = $this->factory->post->create(); 102 103 // Insert the menu item into the first menu 104 $post_insert_1 = wp_update_nav_menu_item( $this->menu_id, 0, array( 105 'menu-item-type' => 'post_type', 106 'menu-item-object' => 'post', 107 'menu-item-object-id' => $post_id, 108 'menu-item-status' => 'publish' 109 ) ); 110 111 // Insert the menu item into the second menu 112 $post_insert_2 = wp_update_nav_menu_item( $menu_id_2, 0, array( 113 'menu-item-type' => 'post_type', 114 'menu-item-object' => 'post', 115 'menu-item-object-id' => $post_id, 116 'menu-item-status' => 'publish' 117 ) ); 118 119 $post_items = wp_get_associated_nav_menu_items( $post_id, 'post_type', '', $menu_id_2); 120 $this->assertEqualSets( array( $post_insert_2 ), $post_items ); 121 } 122 123 /** 124 * @ticket 14439 125 */ 126 function test_wp_get_associated_nav_menu_items_wrong_menu_id() { 127 128 $post_id = $this->factory->post->create(); 129 130 $post_insert = wp_update_nav_menu_item( $this->menu_id, 0, array( 131 'menu-item-type' => 'post_type', 132 'menu-item-object' => 'post', 133 'menu-item-object-id' => $post_id, 134 'menu-item-status' => 'publish' 135 ) ); 136 137 $post_items = wp_get_associated_nav_menu_items( $post_id, 'post_type', '', 12345678); 138 $this->assertInstanceOf( 'WP_Error', $post_items ); 139 } 140 141 /** 93 142 * @ticket 27113 94 143 */ 95 144 function test_orphan_nav_menu_item() {