Pass the taxonomy around to relevant nav menu actions to avoid arbitrarily deleting all items with menu-item-type of taxonomy. Adds unit test for wp_get_associated_nav_menu_items().

Props garyc40, SergeyBiryukov.
Fixes #15264.


Built from https://develop.svn.wordpress.org/trunk@25163


git-svn-id: http://core.svn.wordpress.org/trunk@25142 1a063a9b-81f0-0310-95a4-ce76da25c4cd
This commit is contained in:
Scott Taylor 2013-08-29 16:45:10 +00:00
parent 4b449d38b4
commit eeb3b15936
2 changed files with 7 additions and 5 deletions

View File

@ -262,7 +262,7 @@ add_action( 'welcome_panel', 'wp_welcome_panel'
// Navigation menu actions // Navigation menu actions
add_action( 'delete_post', '_wp_delete_post_menu_item' ); add_action( 'delete_post', '_wp_delete_post_menu_item' );
add_action( 'delete_term', '_wp_delete_tax_menu_item' ); add_action( 'delete_term', '_wp_delete_tax_menu_item', 10, 3 );
add_action( 'transition_post_status', '_wp_auto_add_pages_to_menu', 10, 3 ); add_action( 'transition_post_status', '_wp_auto_add_pages_to_menu', 10, 3 );
// Post Thumbnail CSS class filtering // Post Thumbnail CSS class filtering

View File

@ -685,9 +685,10 @@ function wp_setup_nav_menu_item( $menu_item ) {
* *
* @param int $object_id The ID of the original object. * @param int $object_id The ID of the original object.
* @param string $object_type The type of object, such as "taxonomy" or "post_type." * @param string $object_type The type of object, such as "taxonomy" or "post_type."
* @param string $taxonomy If $object_type is "taxonomy", $taxonomy is the name of the tax that $object_id belongs to
* @return array The array of menu item IDs; empty array if none; * @return array The array of menu item IDs; empty array if none;
*/ */
function wp_get_associated_nav_menu_items( $object_id = 0, $object_type = 'post_type' ) { function wp_get_associated_nav_menu_items( $object_id = 0, $object_type = 'post_type', $taxonomy = '' ) {
$object_id = (int) $object_id; $object_id = (int) $object_id;
$menu_item_ids = array(); $menu_item_ids = array();
@ -703,7 +704,8 @@ 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 ) if ( get_post_meta( $menu_item->ID, '_menu_item_type', true ) !== $object_type ||
get_post_meta( $menu_item->ID, '_menu_item_object', true ) !== $taxonomy )
continue; continue;
$menu_item_ids[] = (int) $menu_item->ID; $menu_item_ids[] = (int) $menu_item->ID;
@ -741,10 +743,10 @@ function _wp_delete_post_menu_item( $object_id = 0 ) {
* @param int $object_id The ID of the original object being trashed. * @param int $object_id The ID of the original object being trashed.
* *
*/ */
function _wp_delete_tax_menu_item( $object_id = 0 ) { function _wp_delete_tax_menu_item( $object_id = 0, $tt_id, $taxonomy ) {
$object_id = (int) $object_id; $object_id = (int) $object_id;
$menu_item_ids = wp_get_associated_nav_menu_items( $object_id, 'taxonomy' ); $menu_item_ids = wp_get_associated_nav_menu_items( $object_id, 'taxonomy', $taxonomy );
foreach( (array) $menu_item_ids as $menu_item_id ) { foreach( (array) $menu_item_ids as $menu_item_id ) {
wp_delete_post( $menu_item_id, true ); wp_delete_post( $menu_item_id, true );