WordPress.org

Make WordPress Core

Ticket #18195: update_metadata_by_mid3.2.patch

File update_metadata_by_mid3.2.patch, 2.2 KB (added by kovshenin, 3 years ago)

Updating to serialize meta value if needed.

  • wp-includes/meta.php

     
    322322} 
    323323 
    324324/** 
     325 * Update meta data by meta ID 
     326 * 
     327 * @since 3.3.0 
     328 * 
     329 * @uses update_metadata() Calls update_metadata() to actually update the meta value after 
     330 *              the meta_key, object_id and prev_value are fetched. 
     331 * @uses get_metadata_by_mid() Calls get_metadata_by_mid() to fetch the meta key, value 
     332 *              and object_id of the given meta_id. 
     333 * 
     334 * @param string $meta_type Type of object metadata is for (e.g., comment, post, or user) 
     335 * @param int $meta_id ID for a specific meta row 
     336 * @param string $meta_value Metadata value 
     337 * @param string $meta_key Optional, you can provide a meta key to update it 
     338 * @return bool True on successful update, false on failure. 
     339 */ 
     340function update_metadata_by_mid( $meta_type, $meta_id, $meta_value, $meta_key = false ) { 
     341        global $wpdb; 
     342         
     343        if ( ! $meta_type ) 
     344                return false; 
     345 
     346        if ( ! $meta_id = absint( $meta_id ) ) 
     347                return false; 
     348 
     349        if ( ! $table = _get_meta_table( $meta_type ) ) 
     350                return false; 
     351                 
     352        $column = esc_sql($meta_type . '_id'); 
     353        $id_column = 'user' == $meta_type ? 'umeta_id' : 'meta_id'; 
     354 
     355        // Fetch the meta and go on if it's found. 
     356        if ( $meta = get_metadata_by_mid( $meta_type, $meta_id ) ) { 
     357                $original_key = $meta->meta_key; 
     358                 
     359                // If a new meta_key (last parameter) was specified, change the meta key, 
     360                // otherwise use the original key in the update statement. 
     361                if ( false === $meta_key ) 
     362                        $meta_key = $original_key; 
     363                else 
     364                        $meta_key = stripslashes( $meta_key ); 
     365                         
     366                // Sanitize the meta 
     367                $meta_value = stripslashes_deep( $meta_value ); 
     368                $meta_value = sanitize_meta( $meta_key, $meta_value, $meta_type ); 
     369                $meta_value = maybe_serialize( $meta_value ); 
     370                 
     371                // Run the query. 
     372                return (bool) $wpdb->query( $wpdb->prepare( "UPDATE $table SET meta_key = %s, meta_value = %s WHERE $id_column = %d LIMIT 1;", $meta_key, $meta_value, $meta_id ) ); 
     373        } 
     374         
     375        // And if the meta was not found. 
     376        return false; 
     377} 
     378 
     379/** 
    325380 * Update the metadata cache for the specified objects. 
    326381 * 
    327382 * @since 2.9.0