WordPress.org

Make WordPress Core

Ticket #7540: user.php.diff

File user.php.diff, 3.3 KB (added by sojweb, 5 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