Несколько update_user_meta в Wordpress - PullRequest
0 голосов
/ 28 декабря 2010

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

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

Есть идеи?

Ответы [ 2 ]

5 голосов
/ 28 декабря 2010

Вы просто передаете массив с 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, который вы не можете сделать в пакете.

2 голосов
/ 29 марта 2012

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

$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]);
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...