基于用户档案的可搜索半随机数生成器

时间:2019-02-02 作者:tdb2

我希望这样,当用户创建一个概要文件时,有一个自定义表单,该表单声明“ID号”,然后半随机生成。例如,如果Joe创建了一个帐户,他将被问到一系列自定义字段问题,然后自动生成一个字段,说明:

用户ID:LEF2309824,其中前3个字符是预设的,后面的数字在一组参数内。然后,该号码将绑定到用户帐户。

我还没有致力于用户系统,我也不确定从哪里开始解决这个问题。这方面的问题是,任何进入网站的用户都需要搜索随机生成的数字。

例如,Bill出现并想要检查Joe的ID。然后,他可以在搜索字段中键入LEF2309824,然后将调出Joe的个人资料。

我目前正在阅读关于get\\u用户的文章,也许这是搜索的一个可能解决方案,但我仍然不确定数字的生成。

1 个回复
SO网友:phatskat

看起来您想在这里做几件不同的事情:

当用户注册时,生成一个半随机数作为其标识符。允许搜索该标识符。到第一点,您可以连接到user_register 行动这是来自wp-includes/user.php:

1774         /**
1775          * Fires immediately after a new user is registered.
1776          *
1777          * @since 1.5.0
1778          *
1779          * @param int $user_id User ID.
1780          */
1781         do_action( \'user_register\', $user_id );
因此,我们可以添加如下函数:



  3 /**
  4  * Generates a random identifier for newly created users.
  5  *
  6  * @param int $user_id The WordPress ID of the created user.
  7  * @return void
  8  */
  9 function wp32325ae_random_user_identifier( $user_id ) {
 10     $identifier = strtoupper( uniqid( \'LEF\' ) );
 11  
 12     // If you need a certain length:
 13     $identifier = substr( $identifier, 0, 10 ); // Truncate to length of 10.
 14  
 15     // Verify this doesn\'t collide with another user.
 16     $collisions = new \\WP_User_Query( [
 17         \'meta_key\'   => \'wp_custom_user_id\',
 18         \'meta_value\' => $identifier,
 19     ] );
 20  
 21     // In the case of a collision, try again.
 22     if ( count( $collisions ) ) {
 23         return wp32325ae_random_user_identifier( $user_id );
 24     }
 25  
 26     $result = update_user_meta( $user_id, \'wp_custom_user_id\', $identifier );
 27  
 28     if ( false === $result ) {
 29         // Something went wrong! Hopefully, your code doesn\'t get here.
 30         wp_die( \':(\' );
 31     }
 32 }
 33  
 34 add_action( \'user_register\', \'wp32325ae_random_user_identifier\' );
一些注释:-行10 - 您可以使用任何您认为适合生成随机标识符的方法来替换它。-线13 - 我们将ID截断为总共10个字符,但您可以根据需要进行修改。-线23 将在发生冲突时尝试生成另一个ID。-线28 update_user_meta 返回int 如果创建了元值,但将返回false 如果更新失败,或者值没有更改。从理论上讲,这不应该发生在你身上。-行上使用的元键1726, 下面使用的是wp_custom_user_id. 您可以对这个字段名使用任何您想要的名称,只要确保它是您的代码所独有的,以避免与WordPress或其他插件发生冲突。这些值将存储在wp_usermeta 桌子

要稍后使用,可以执行以下操作:

// Assuming you already have $user available as an instance of \\WP_User
echo $user->wp_custom_user_id; // Get the ID using the magic __get from $user
echo get_user_meta( $user->ID, \'wds_custom_user_id\', true ); // Get the ID the "WordPress way"
至于搜索,让我们看看上面的碰撞检查。。。

 15     // Verify this doesn\'t collide with another user.
 16     $collisions = new \\WP_User_Query( [
 17         \'meta_key\'   => \'wp_custom_user_id\',
 18         \'meta_value\' => $identifier,
 19     ] );
此代码可用于获取\\WP_User 与搜索条件匹配的对象,因此假设您在$_GET 参数s:

$search = filter_input( INPUT_GET, \'s\', FILTER_SANITIZE_STRING );
$users  = new \\WP_User_Query( [
    \'meta_key\'   => \'wp_custom_user_id\',
    \'meta_value\' => $search,
] );
现在$users 将包含具有meta_key 属于wp_custom_user_id, 值为$search.