2010-12-28 2 views
0

Эй, ребята, у меня есть эта система очков в проекте, все работает отлично, за исключением того, что я не могу добавить meta_values ​​для нескольких пользователей.Несколько update_user_meta в Wordpress

Я использую <?php update_user_meta($user_id, $meta_key, $meta_value, $prev_value) ?>, но это, похоже, не работает с несколькими пользователями.

Любая идея?

ответ

4

Вы просто передаете массив с user_ids до update_user_meta? Тогда это не сработает.

Используя цикл по всем user_ids он должен работать:

foreach($user_ids as $user_id){ 
    update_user_meta($user_id, $key, $value); 
} 

Подумайте о SQL генерируется, имея при этом в виду дизайн базы данных WordPress. Он имеет таблицу wp_usermeta, с колонками user_id, meta_key и meta_value. Это означает, что каждое метазначение имеет строку в этой таблице для каждого пользователя. Вы можете использовать код, как

global $wpdb; 

$ids = implode("', '", $user_ids); 
$wpdb->query($wpdb->prepare("UPDATE {$wpdb->usermeta} SET meta_value = %s WHERE user_id IN ('{$ids}') AND meta_key = %s"), $value, $key); 

Однако это не будет работать, если meta_key для определенного пользователя еще не существует. Тогда вам понадобится инструкция INSERT, которую вы не можете сделать в партии.

+0

Нет, не работает. Обновляется только один пользователь. :( –

+0

Пожалуйста, добавьте еще какой-нибудь код или попробуйте отладить его самостоятельно. – Joost

2

Вы можете попробовать что-то вроде:

$user_meta_fields = array ('first_name', 'last_name', 'account_type', 'vd_sub_name', 'description', 'vd_adress', 'vd_cp', 'vd_ville', 'vd_department', 'vd_region', 'vd_country', 'vd_tel', 'vd_gsm', 'vd_fax', 'url'); 
     foreach($user_meta_fields as $user_meta_field){ 
      //echo "update_user_meta(".$user_id.", ".$user_meta_field.", ".$posted[$user_meta_field].");"; 
      update_user_meta($user_id, $user_meta_field, $posted[$user_meta_field]); 
     } 
Смежные вопросы