如何在 WordPress 中创建唯一用户 ID

Posted

技术标签:

【中文标题】如何在 WordPress 中创建唯一用户 ID【英文标题】:How to create Unique User ID in WordPress 【发布时间】:2021-06-20 06:34:35 【问题描述】:

我需要从 WordPress 后端添加用户。所以,我想为他们生成唯一的用户 ID。但我可以实现它。有人可以帮我解决这个问题吗?

这是到目前为止我拍摄的内容。如果我可以将 WordPress 默认生成的唯一用户 ID 附加到我的字段末尾会更好。

// Customize the user fields
function custom_user_profile_fields($user) 

    $rand = randomGen(1000,5000,1);
    $auth_Token = '2021-ABCD-'.$rand[0];

  ?>
    <h3>Profile Information</h3>
    <table class="form-table">
        <tr>
            <th><label for="srn">Student Registration Number</label></th>
            <td>
                <input type="text" class="regular-text" name="srn" value="<?php echo (get_option('srn') ? esc_attr( get_the_author_meta( 'srn', $user->ID ) ) : $auth_Token); ?>" id="srn" readonly /><br />
            </td>
        </tr>
    </table>
  <?php

add_action( 'show_user_profile', 'custom_user_profile_fields' );
add_action( 'edit_user_profile', 'custom_user_profile_fields' );
add_action( "user_new_form", "custom_user_profile_fields" );

function save_custom_user_profile_fields($user_id) 
    # again do this only if you can
    if(!current_user_can('manage_options'))
        return false;

    # save my custom field
    update_usermeta($user_id, 'srn', $_POST['srn']);

add_action('user_register', 'save_custom_user_profile_fields');
add_action('profile_update', 'save_custom_user_profile_fields');

当用户添加时,我无法将之前保存的索引号添加到该字段。它正在生成另一个并再次显示。由于我不是这方面的专家,有人可以帮我解决这个问题吗?

提前致谢

【问题讨论】:

【参考方案1】:

你在解决问题的道路上是正确的,但你犯了一些错误。

您可以使用下面的工作代码:

创建字段

add_action( 'user_new_form', 'bks_add_student_reg_number_field' );
add_action( 'edit_user_profile', 'bks_add_student_reg_number_field' );
add_action( 'show_user_profile', 'bks_add_student_reg_number_field' );


function bks_add_student_reg_number_field( $user ) 
    ?>
    <h3><?php _e("Extra profile information", "blank"); ?></h3>
    <table class="form-table">
        <tr>
            <th><label for="student_reg_number"><?php _e("Student Registration Number"); ?></label></th>
            <td>
                <?php if (is_object($user))  ?>
                    <input type="text" name="student_reg_number" id="student_reg_number" value="<?php echo esc_attr( get_the_author_meta( 'student_reg_number', $user->ID )); ?>" class="regular-text" readonly disabled="disabled"/><br />
                <?php  else  ?>
                    <input type="text" name="student_reg_number" id="student_reg_number" class="regular-text" /><br />
                    <span class="description"><?php _e("Please enter Student registration number."); ?></span>
                <?php  ?>
            </td>
        </tr>
    </table>
<?php 

这会在新用户生成和编辑表单中创建一个字段选项。

该字段仅在创建新用户时启用。如果注册用户已经有一个值,则该值将显示为无权更改。

保存字段值

add_action( 'user_register', 'bks_student_reg_number_field' );

function bks_student_reg_number_field($user_id) 
    // You can maybe add checks here whch would determine if the users role is customer
    // or not or maybe validate the number.

    if(!current_user_can('manage_options'))
        return false;

    $reg_value = get_user_meta($user_id, 'student_reg_number', true);
    if (isset( $_POST['student_reg_number']) &&  $_POST['student_reg_number'] !== $reg_value) 
        update_user_meta($user_id, 'student_reg_number', $_POST['student_reg_number'].'-'.$user_id);
    

只有user_register 挂钩用于防止更新配置文件。

您可以在字段中看到在其前面附加了- 的 user_id,并且该字段是只读且禁用的。

如果您希望用户在注册后也能够编辑 id。执行以下操作。

添加profile_update 挂钩。 add_action( 'profile_update', 'bks_student_reg_number_field' ); 也可以在您更新用户时运行代码。 从表单中删除 readonlydisabled 属性。

代码已经过测试并且有效

【讨论】:

感谢您的回答。我用我现有的代码替换了它。但这给了我一个错误。 Notice: Trying to get property 'ID' of non-object in.... @WPLearner,我已经用全新安装的 wordpress 测试了代码,它仍然有效。你能粘贴完整的错误吗?以便我检查。 @WPLearner,我已经修复了代码。请检查一次。 非常感谢您的支持。但不幸的是,这段代码不起作用。随后的步骤,将两个 sn-ps 添加到 functions.php 文件中。然后尝试使用Users-&gt;Add New。它给了我一个空白的文本字段。管理面板:ibb.co/Fh8vJdm。 functions.php文件ibb.co/ZLzNHqC 你想在那个文本字段中做什么?你必须自己填写一些东西。 @WPLearner

以上是关于如何在 WordPress 中创建唯一用户 ID的主要内容,如果未能解决你的问题,请参考以下文章

在 JavaScript 中创建全局唯一 ID [重复]

如何为 pandas 数据框中的不同组分配唯一 ID?

如何以编程方式在 WordPress 中创建帖子 [关闭]

如何在 spark 数据框中创建唯一的自动生成的 Id 列

饿了么面试官问我如何在分布式系统中创建唯一ID,我这么说怼翻他

饿了么面试官问我如何在分布式系统中创建唯一ID,我这么说怼翻他