| 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 | */ |
| 378 | function 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 | /** |
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 | } |