Ticket #16267: post_meta.patch

File post_meta.patch, 3.6 KB (added by moskjis, 2 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/**