Try:
<?php
$user_id = 1234;
$metas = array(
'nickname' => $userFirstName,
'first_name' => $userFirstName,
'last_name' => $userLastName ,
'city' => $userCityID ,
'gender' => $userGenderID
);
foreach($metas as $key => $value) {
update_user_meta( $user_id, $key, $value );
}
So instead of passing your array to update_user_meta
which only accepts string arguments for $meta_key
, loop over the array and call update_user_meta
for each key/value pair in the array.
EDIT:
WordPress doesn't give a built in way to update multiple metas at once. Part of the reason for using their built in function is because filters and hooks can be registered to operate on the meta information. These won't be called if you update them directly.
That said, you can try something like this (code untested):
$columns = implode(" = '%s', ", array_keys($metas)) . " = '%s'";
$values = array_values($metas);
$values[] = $user_id;
$table = _get_meta_table('user');
$sql = "UPDATE $table SET $columns WHERE user_id = %d";
$wpdb->query(
$wpdb->prepare($sql, $values)
);