WordPress.org

Make WordPress Core

Ticket #16267: post_meta.patch

File post_meta.patch, 3.6 KB (added by moskjis, 10 years ago)
  • meta.php

     
    9393 * @param string $meta_value Metadata value
    9494 * @param string $prev_value Optional.  If specified, only update existing metadata entries with
    9595 *              the specified value.  Otherwise, update all entries.
     96 * @param int $metaId ID of the metadata, Optional.  If specified, only update existing metadata entry with
     97 *              the specified value.  Otherwise, update all entities or entities where $prev_value is specified.
    9698 * @return bool True on successful update, false on failure.
    9799 */
    98 function update_metadata($meta_type, $object_id, $meta_key, $meta_value, $prev_value = '') {
     100function update_metadata($meta_type, $object_id, $meta_key, $meta_value, $prev_value = '', $metaId = '') {
    99101        if ( !$meta_type || !$meta_key )
    100102                return false;
    101103
     
    141143                $where['meta_value'] = $prev_value;
    142144        }
    143145
    144         do_action( "update_{$meta_type}_meta", $meta_id, $object_id, $meta_key, $_meta_value );
     146        if ( !empty( $metaId ) ) {
     147                $metaId = intval($metaId);
     148                $where['meta_id'] = $metaId;
     149        }
    145150
     151        do_action( "update_{$meta_type}_meta", $meta_id, $object_id, $meta_key, $_meta_value, $metaId );
     152
    146153        $wpdb->update( $table, $data, $where );
    147154        wp_cache_delete($object_id, $meta_type . '_meta');
    148155        // users cache stores usermeta that must be cleared.
    149156        if ( 'user' == $meta_type )
    150157                clean_user_cache($object_id);
    151158
    152         do_action( "updated_{$meta_type}_meta", $meta_id, $object_id, $meta_key, $_meta_value );
     159        do_action( "updated_{$meta_type}_meta", $meta_id, $object_id, $meta_key, $_meta_value, $metaId );
    153160
    154161        return true;
    155162}
     
    323330
    324331        // Get meta info
    325332        $id_list = join(',', $ids);
    326         $meta_list = $wpdb->get_results( $wpdb->prepare("SELECT $column, meta_key, meta_value FROM $table WHERE $column IN ($id_list)",
     333        $meta_list = $wpdb->get_results( $wpdb->prepare("SELECT $column, meta_key, meta_value, meta_id FROM $table WHERE $column IN ($id_list)",
    327334                $meta_type), ARRAY_A );
    328335
    329336        if ( !empty($meta_list) ) {
     
    331338                        $mpid = intval($metarow[$column]);
    332339                        $mkey = $metarow['meta_key'];
    333340                        $mval = $metarow['meta_value'];
     341                        $mid = intval($metarow['meta_id']);
    334342
    335343                        // Force subkeys to be array type:
    336344                        if ( !isset($cache[$mpid]) || !is_array($cache[$mpid]) )
     
    338346                        if ( !isset($cache[$mpid][$mkey]) || !is_array($cache[$mpid][$mkey]) )
    339347                                $cache[$mpid][$mkey] = array();
    340348
    341                         // Add a value to the current pid/key:
    342                         $cache[$mpid][$mkey][] = $mval;
     349                        // Add a meta id and value to the current pid/key:
     350                        $cache[$mpid][$mkey][] = array('id' => $mid, 'value' => $mval);
    343351                }
    344352        }
    345353
  • post.php

     
    14411441 * @param string $meta_key Metadata key.
    14421442 * @param mixed $meta_value Metadata value.
    14431443 * @param mixed $prev_value Optional. Previous value to check before removing.
     1444 * @param mixed $meta_id Optional. Meta ID value to check before changing.
    14441445 * @return bool False on failure, true if success.
    14451446 */
    1446 function update_post_meta($post_id, $meta_key, $meta_value, $prev_value = '') {
     1447function update_post_meta($post_id, $meta_key, $meta_value, $prev_value = '', $meta_id = '') {
    14471448        // make sure meta is added to the post, not a revision
    14481449        if ( $the_post = wp_is_post_revision($post_id) )
    14491450                $post_id = $the_post;
    14501451
    1451         return update_metadata('post', $post_id, $meta_key, $meta_value, $prev_value);
     1452        return update_metadata('post', $post_id, $meta_key, $meta_value, $prev_value, $meta_id);
    14521453}
    14531454
    14541455/**