From 3fce77b44db63a2daa3fba29382061e65ed0dc44 Mon Sep 17 00:00:00 2001 From: Scott Taylor Date: Sun, 9 Feb 2014 21:46:43 +0000 Subject: [PATCH] Collect the post and link ids that will be reassigned before running the update in `remove_user_from_blog()`. Use `array_walk()` instead of `array_map()` when invalidating the caches for the collected ids. Props kovshenin. Fixes #25545. git-svn-id: https://develop.svn.wordpress.org/trunk@27152 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/ms-functions.php | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/wp-includes/ms-functions.php b/src/wp-includes/ms-functions.php index 43c23113a3..84e0854db9 100644 --- a/src/wp-includes/ms-functions.php +++ b/src/wp-includes/ms-functions.php @@ -275,11 +275,18 @@ function remove_user_from_blog($user_id, $blog_id = '', $reassign = '') { if ( $reassign != '' ) { $reassign = (int) $reassign; - $wpdb->query( $wpdb->prepare("UPDATE $wpdb->posts SET post_author = %d WHERE post_author = %d", $reassign, $user_id) ); - $wpdb->query( $wpdb->prepare("UPDATE $wpdb->links SET link_owner = %d WHERE link_owner = %d", $reassign, $user_id) ); + $post_ids = $wpdb->get_col( $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_author = %d", $user_id ) ); + $link_ids = $wpdb->get_col( $wpdb->prepare( "SELECT ID FROM $wpdb->links WHERE link_owner = %d", $user_id ) ); - $post_ids = $wpdb->get_col( $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_author = %d", $reassign ) ); - array_map( 'clean_post_cache', $post_ids ); + if ( ! empty( $post_ids ) ) { + $wpdb->query( $wpdb->prepare( "UPDATE $wpdb->posts SET post_author = %d WHERE ID IN (" . implode( ',', $post_ids ) . ")", $reassign ) ); + array_walk( $post_ids, 'clean_post_cache' ); + } + + if ( ! empty( $link_ids ) ) { + $wpdb->query( $wpdb->prepare( "UPDATE $wpdb->links SET link_owner = %d WHERE ID IN (" . implode( ',', $link_ids ) . ")", $reassign ) ); + array_walk( $link_ids, 'clean_bookmark_cache' ); + } } restore_current_blog();