最合适的回答,由SO网友:Paul G. 整理而成
这里有一种方法可以实现这一点。如果你有大量的用户,这是有问题的,但可以及时调整。
do {
// 1. generate your unique random number
$result = rand();
// 2. check it is really unique
$is_unique = count( get_users( array(
\'meta_key\' => \'user_reference_id\',
\'meta_value\' => $result,
) ) ) === 0;
} while ( !$is_unique );
// 3. Store user meta $result
update_user_meta( $user_id, \'user_reference_id\', $result );
假设:
我用过rand()
但坦率地说,您应该使用UUID之类的东西,这样您就不需要这样的循环来检查您的数字是否唯一。但我提供了这种方法,因为它可能会以您当前设计的方式解决您的问题这里没有WPM或其他此类MOD的处理编辑:
您原来的问题一直在更改,因此我将此编辑保留为最后一次更改。
根据您的评论,我将提供代码,以便您每次使用UUID时都可以创建一个唯一的ID。UUID确保代码在设计上是唯一的,而不是通过循环来确保自定义随机代码是唯一的。
简单地说:
// 1. Generate the random ID
$rndnr = wp_generate_uuid4();
// 2. Store the ID
update_user_meta( $user_id, \'user_reference_id\', $rndnr );
// 3. Get the user meta key in the future, simply:
get_user_meta( $user_id, \'user_reference_id\' );
假设:
WordPress至少是4.7版。在您原来的问题中,您没有说明您使用的是8位代码。不知道为什么选择8,但如果您更新系统以使用UUID,则可以解决唯一性问题。
我也在使用update_user_meta
和get_user_meta
- 现在还不清楚,当这些助手函数可用时,为什么要使用MySQL select语句。