WordPress.org

Make WordPress Core

Ticket #7540: user.php.diff

File user.php.diff, 3.3 KB (added by sojweb, 9 years ago)

Added add_usermeta function (similar to add_post_meta), and modified update_usermeta to accommodate multiple identical keys.

  • wp-includes/user.php

     
    367367}
    368368
    369369/**
     370 * Add meta data field to metadata of user
     371 *
     372 * @param int $user_id User ID
     373 * @param string $meta_key Metadata key.
     374 * @param mixed $meta_value Metadata value.
     375 * @param bool $unique Optional, default is false. Whether the same key should not be added.
     376 * @return bool True on successful update, false on failure.
     377 */
     378function add_usermeta( $user_id, $meta_key, $meta_value, $unique = false) {
     379        global $wpdb;
     380        if ( !is_numeric( $user_id ) )
     381                return false;
     382        $meta_key = preg_replace('|[^a-z0-9_]|i', '', $meta_key);
     383
     384        /** @todo Might need fix because usermeta data is assumed to be already escaped */
     385        if ( is_string($meta_value) )
     386                $meta_value = stripslashes($meta_value);
     387        $meta_value = maybe_serialize($meta_value);
     388
     389        if ( $unique && $wpdb->get_var( $wpdb->prepare( "SELECT meta_key FROM $wpdb->usermeta WHERE meta_key = %s AND user_id = %d", $meta_key, $user_id ) ) )
     390                return false;
     391
     392        $meta_value = maybe_serialize( stripslashes_deep($meta_value) );
     393
     394        $wpdb->insert($wpdb->usermeta, compact('user_id', 'meta_key', 'meta_value') );
     395
     396        wp_cache_delete($user_id, 'users');
     397
     398        return true;
     399}
     400
     401/**
    370402 * Update metadata of user.
    371403 *
    372404 * There is no need to serialize values, they will be serialized if it is
     
    381413 * @param int $user_id User ID
    382414 * @param string $meta_key Metadata key.
    383415 * @param mixed $meta_value Metadata value.
     416 * @param mixed $prev_value Optional. Previous value to check before removing.
    384417 * @return bool True on successful update, false on failure.
    385418 */
    386 function update_usermeta( $user_id, $meta_key, $meta_value ) {
     419function update_usermeta( $user_id, $meta_key, $meta_value, $prev_value = '' ) {
    387420        global $wpdb;
    388421        if ( !is_numeric( $user_id ) )
    389422                return false;
     
    398431                return delete_usermeta($user_id, $meta_key);
    399432        }
    400433
    401         $cur = $wpdb->get_row( $wpdb->prepare("SELECT * FROM $wpdb->usermeta WHERE user_id = %d AND meta_key = %s", $user_id, $meta_key) );
    402         if ( !$cur )
    403                 $wpdb->insert($wpdb->usermeta, compact('user_id', 'meta_key', 'meta_value') );
    404         else if ( $cur->meta_value != $meta_value )
    405                 $wpdb->update($wpdb->usermeta, compact('meta_value'), compact('user_id', 'meta_key') );
    406         else
    407                 return false;
     434        if ( !empty( $prev_value ) ) {
     435                $prev_value = maybe_serialize($prev_value);
     436                $cur = $wpdb->get_row( $wpdb->prepare("SELECT * FROM $wpdb->usermeta WHERE user_id = %d AND meta_key = %s AND meta_value = %s", $user_id, $meta_key, $prev_value ) );
     437                if ( !$cur )
     438                        return false;
     439                else if ( $cur->meta_value != $meta_value )
     440                        $wpdb->update($wpdb->usermeta, compact('meta_value'), array('user_id'=>$user_id, 'meta_key'=>$meta_key, 'meta_value'=>$prev_value) );
     441                else
     442                        return false;
     443        } else {
     444                $cur = $wpdb->get_row( $wpdb->prepare("SELECT * FROM $wpdb->usermeta WHERE user_id = %d AND meta_key = %s", $user_id, $meta_key) );
     445                if ( !$cur )
     446                        $wpdb->insert($wpdb->usermeta, compact('user_id', 'meta_key', 'meta_value') );
     447                else if ( $cur->meta_value != $meta_value )
     448                        $wpdb->update($wpdb->usermeta, compact('meta_value'), compact('user_id', 'meta_key') );
     449                else
     450                        return false;
     451        }
    408452
    409453        wp_cache_delete($user_id, 'users');
    410454