Ticket #11683: 11683.2.diff
File 11683.2.diff, 4.7 KB (added by , 10 years ago) |
---|
-
src/wp-includes/meta.php
diff --git src/wp-includes/meta.php src/wp-includes/meta.php index e9f7811..d942b30 100644
function update_metadata($meta_type, $object_id, $meta_key, $meta_value, $prev_v 194 194 } 195 195 } 196 196 197 if ( ! $meta_id = $wpdb->get_var( $wpdb->prepare( "SELECT $id_column FROM $table WHERE meta_key = %s AND $column = %d", $meta_key, $object_id ) ) ) 197 $meta_ids = $wpdb->get_col( $wpdb->prepare( "SELECT $id_column FROM $table WHERE meta_key = %s AND $column = %d", $meta_key, $object_id ) ); 198 if ( empty( $meta_ids ) ) { 198 199 return add_metadata($meta_type, $object_id, $meta_key, $passed_value); 200 } 199 201 200 202 $_meta_value = $meta_value; 201 203 $meta_value = maybe_serialize( $meta_value ); … … function update_metadata($meta_type, $object_id, $meta_key, $meta_value, $prev_v 221 223 * @param string $meta_key Meta key. 222 224 * @param mixed $meta_value Meta value. 223 225 */ 224 do_action( "update_{$meta_type}_meta", $meta_id, $object_id, $meta_key, $_meta_value ); 226 foreach ( $meta_ids as $meta_id ) { 227 do_action( "update_{$meta_type}_meta", $meta_id, $object_id, $meta_key, $_meta_value ); 228 } 225 229 226 if ( 'post' == $meta_type ) 230 if ( 'post' == $meta_type ) { 227 231 /** 228 232 * Fires immediately before updating a post's metadata. 229 233 * … … function update_metadata($meta_type, $object_id, $meta_key, $meta_value, $prev_v 234 238 * @param string $meta_key Meta key. 235 239 * @param mixed $meta_value Meta value. 236 240 */ 237 do_action( 'update_postmeta', $meta_id, $object_id, $meta_key, $meta_value ); 241 foreach ( $meta_ids as $meta_id ) { 242 do_action( 'update_postmeta', $meta_id, $object_id, $meta_key, $meta_value ); 243 } 244 } 238 245 239 246 $result = $wpdb->update( $table, $data, $where ); 240 247 if ( ! $result ) … … function update_metadata($meta_type, $object_id, $meta_key, $meta_value, $prev_v 255 262 * @param string $meta_key Meta key. 256 263 * @param mixed $meta_value Meta value. 257 264 */ 258 do_action( "updated_{$meta_type}_meta", $meta_id, $object_id, $meta_key, $_meta_value ); 265 foreach ( $meta_ids as $meta_id ) { 266 do_action( "updated_{$meta_type}_meta", $meta_id, $object_id, $meta_key, $_meta_value ); 267 } 259 268 260 269 if ( 'post' == $meta_type ) { 261 270 /** … … function update_metadata($meta_type, $object_id, $meta_key, $meta_value, $prev_v 268 277 * @param string $meta_key Meta key. 269 278 * @param mixed $meta_value Meta value. 270 279 */ 271 do_action( 'updated_postmeta', $meta_id, $object_id, $meta_key, $meta_value ); 280 foreach ( $meta_ids as $meta_id ) { 281 do_action( 'updated_postmeta', $meta_id, $object_id, $meta_key, $meta_value ); 282 } 272 283 } 273 284 274 285 return true; -
tests/phpunit/tests/meta.php
diff --git tests/phpunit/tests/meta.php tests/phpunit/tests/meta.php index abf3ba5..4bb1264 100644
4 4 * @group meta 5 5 */ 6 6 class Tests_Meta extends WP_UnitTestCase { 7 protected $updated_mids = array(); 8 7 9 function setUp() { 8 10 parent::setUp(); 9 11 $this->author = new WP_User( $this->factory->user->create( array( 'role' => 'author' ) ) ); … … class Tests_Meta extends WP_UnitTestCase { 76 78 $this->assertFalse( $first === $second ); 77 79 } 78 80 81 /** 82 * @ticket 11683 83 */ 84 public function test_update_metadata_hooks_for_multiple_updated_rows() { 85 add_metadata( 'post', 1, 'test_key', 'value_1' ); 86 add_metadata( 'post', 1, 'test_key', 'value_2' ); 87 add_action( 'update_post_meta', array( $this, 'updated_meta' ) ); 88 add_action( 'update_postmeta', array( $this, 'updated_meta' ) ); 89 add_action( 'updated_post_meta', array( $this, 'updated_meta' ) ); 90 add_action( 'updated_postmeta', array( $this, 'updated_meta' ) ); 91 92 update_metadata( 'post', 1, 'test_key', 'value_3' ); 93 94 remove_action( 'update_post_meta', array( $this, 'updated_meta' ) ); 95 remove_action( 'update_postmeta', array( $this, 'updated_meta' ) ); 96 remove_action( 'updated_post_meta', array( $this, 'updated_meta' ) ); 97 remove_action( 'updated_postmeta', array( $this, 'updated_meta' ) ); 98 99 $found = $this->updated_mids; 100 $this->updated_mids = array(); 101 102 foreach ( $found as $action => $mids ) { 103 $this->assertSame( 2, count( $mids ) ); 104 } 105 } 106 79 107 function test_metadata_exists() { 80 108 $this->assertFalse( metadata_exists( 'user', $this->author->ID, 'foobarbaz' ) ); 81 109 $this->assertTrue( metadata_exists( 'user', $this->author->ID, 'meta_key' ) ); … … class Tests_Meta extends WP_UnitTestCase { 263 291 $this->assertFalse( update_metadata_by_mid( 'user', array( 1 ), 'meta_new_value' ) ); 264 292 $this->assertFalse( delete_metadata_by_mid( 'user', array( 1 ) ) ); 265 293 } 294 295 /** Helpers **********************************************************/ 296 297 public function updated_meta( $meta_id ) { 298 $this->updated_mids[ current_action() ][] = $meta_id; 299 } 266 300 }