Opened 3 years ago

Last modified 10 days ago

#11683 new defect (bug)

update_metadata() passes only the first meta_id

Reported by: scribu Owned by:
Priority: normal Milestone: Future Release
Component: General Version: 2.9
Severity: normal Keywords: has-patch
Cc:

Description

Code to reproduce:

function update_metadata_action_test($meta_id) {
	var_dump($meta_id);
}
add_action('update_post_meta', 'update_metadata_action_test');

add_metadata('post', 1, 'mykey', 'value1');
add_metadata('post', 1, 'mykey', 'value2');

update_metadata('post', 1, 'mykey', 'new value');

Expected result:

Array ( [0] => 101 [1] => 102 )

Actual result:

string(3) "101"

Attachments (2)

update-meta-ids.diff (1.6 KB) - added by wonderboymusic 9 months ago.
11683.diff (1.9 KB) - added by wonderboymusic 4 months ago.

Download all attachments as: .zip

Change History (11)

Two solutions:

  1. update_usermeta() only updates the first value that it finds
  1. update_usermeta() uses $wpdb->get_col() instead of $wpdb->get_var()

The first would create more severe backward compatibility issues than the second.

Related: #10905

Come to think of it, I have no ideea why $meta_id is passed at all (and as the first parameter at that). It's not accesible from anywhere else in the API.

  • Milestone changed from 3.0 to 3.1

Needs to be handled with #10905 I'd think.

  • Milestone changed from Awaiting Triage to Future Release
  • Keywords has-patch added

Added patch to get all meta_ids and call actions on all meta_ids individually, rather than breaking current behavior by passing arrays.

I've never really noticed that update_metadata() can update more than one row at a time.

  • Milestone changed from Future Release to 3.6

Patch refreshed against trunk like whoa

Version 0, edited 4 months ago by wonderboymusic (next)

comment:9   ryan10 days ago

  • Milestone changed from 3.6 to Future Release
Note: See TracTickets for help on using tickets.