WordPress中的多个update_user_Meta

rqdpfwrv  于 11个月前  发布在  WordPress
关注(0)|答案(3)|浏览(166)

嘿,伙计们,我在一个项目上有这个积分系统,一切都很好,除了我不能给多个用户添加Meta_values。
我正在使用<?php update_user_meta( $user_id, $meta_key, $meta_value, $prev_value ) ?>,但这似乎不适用于多个用户。
你知道吗?

thtygnil

thtygnil1#

你只是简单地传递一个带有user_ids的数组给update_user_meta吗?那么它实际上不会工作。
在所有user_id上使用循环,它应该可以工作:

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

字符串
想想生成的SQL,同时记住WordPress的数据库设计。它有一个表wp_usermeta,列user_idmeta_keymeta_value。这意味着每个Meta值在这个表中都有一行,每个用户。你可以使用一些代码,

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语句,而这在批处理中是做不到的。

jum4pzuy

jum4pzuy2#

你可以尝试类似的东西;

$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]);
        }

字符串

iaqfqrcu

iaqfqrcu3#

这是我做的东西:

/*
 * Optimized way to add multiple usermeta keys and values
 * @author Ivijan-Stefan Stipic
 */
if( !function_exists('bulk_update_user_meta') ) : function bulk_update_user_meta(int $user_id, array $meta_data) {
    global $wpdb;

    $transactions = 0;

    foreach ($meta_data as $meta_key => $meta_value) {
        $meta_data[$meta_key] = [
            'exists' => $wpdb->get_var($wpdb->prepare(
                "SELECT COUNT(*) FROM `{$wpdb->usermeta}` WHERE `user_id` = %d AND `meta_key` = %s",
                $user_id,
                $meta_key
            )) > 0,
            'value' => maybe_serialize($meta_value)
        ];
    }

    $wpdb->query('START TRANSACTION');

    foreach ($meta_data as $meta_key => $meta_object) {

        $meta_value = $meta_object['value'];

        if ( $meta_object['exists'] ) {
            if( $wpdb->query($wpdb->prepare(
                "UPDATE `{$wpdb->usermeta}` SET `meta_value` = %s WHERE `user_id` = %d AND `meta_key` = %s",
                $meta_value,
                $user_id,
                $meta_key
            )) !== false ) $transactions++;
        } else {
            if( $wpdb->query($wpdb->prepare(
                "INSERT INTO `{$wpdb->usermeta}` (`user_id`, `meta_key`, `meta_value`) VALUES (%d, %s, %s)",
                $user_id,
                $meta_key,
                $meta_value
            )) !== false ) $transactions++;
        }
    }

    $wpdb->query('COMMIT');

    clean_user_cache($user_id);

    return $transactions === count($meta_data);
} endif;

字符串
用途:

bulk_update_user_meta( $user_id, [
    'ivi_test__1' => mt_rand( 1, 100 ),
    'ivi_test__2' => mt_rand( 1, 100 ),
    'ivi_test__3' => mt_rand( 1, 100 ),
    'ivi_test__4' => mt_rand( 1, 100 ),
    'ivi_test__5' => mt_rand( 1, 100 ),
    'ivi_test__6' => mt_rand( 1, 100 ),
    'ivi_test__7' => mt_rand( 1, 100 ),
    'ivi_test__8' => mt_rand( 1, 100 ),
    'ivi_test__9' => mt_rand( 1, 100 ),
    'ivi_test__10' => mt_rand( 1, 100 ),
    'ivi_test__11' => mt_rand( 1, 100 ),
    'ivi_test__12' => mt_rand( 1, 100 ),
] );

相关问题