Wordpress中有多个update_user_meta

时间:2010-12-28 14:30:03

标签: php wordpress

嘿伙计们,我在项目上有这个积分系统,一切正常,除了我不能将meta_values添加到多个用户。

我正在使用<?php update_user_meta( $user_id, $meta_key, $meta_value, $prev_value ) ?>,但这似乎不适用于多个用户。

有什么想法吗?

2 个答案:

答案 0 :(得分:5)

您是否只是将带有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_idmeta_keymeta_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语句,您无法批量执行该操作。

答案 1 :(得分: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]);
        }