【问题标题】:Automatically generate username based on user ID in WooCommerce在 WooCommerce 中根据用户 ID 自动生成用户名
【发布时间】:2021-03-22 09:28:14
【问题描述】:

我正在开发一个 WooCommerce 项目,其中每个用户都有一个 ID 号。我想为此用户 ID 使用默认的 WooCommerce 用户名字段。

创建帐户时,我可以根据客户的用户 ID 自动为其生成帐户用户名吗?

示例: 用户 ID = 101, 自动生成的用户名 = 101

有可能吗?

任何帮助将不胜感激。谢谢!

【问题讨论】:

    标签: php wordpress woocommerce registration membership


    【解决方案1】:

    首先,确保通过 WooCommerce 设置检查以下选项


    通常情况下,您可以使用woocommerce_new_customer_username 过滤器挂钩来更改生成的用户名。

    复制自includes/wc-user-functions.php

    /**
     * Filter new customer username.
     *
     * @since 3.7.0
     * @param string $username      Customer username.
     * @param string $email         New customer email address.
     * @param array  $new_user_args Array of new user args, maybe including first and last names.
     * @param string $suffix        Append string to username to make it unique.
     */
    return apply_filters( 'woocommerce_new_customer_username', $username, $email, $new_user_args, $suffix );
    

    但是,您想根据$user_id 确定$username, 但是$user_id是在通过​​wp_insert_user()添加用户名、电子邮件地址等数据后确定的


    因此解决方案是在用户注册后立即基于$user_id 更新$username,这可以通过以下方式完成:

    复制自wp-includes/user.php (WordPress)

    /**
     * Fires immediately after a new user is registered.
     *
     * @since 1.5.0
     *
     * @param int $user_id User ID.
     */
    do_action( 'user_register', $user_id );
    


    所以你得到:

    function action_user_register( $user_id ) {
        global $wpdb;
        
        // Set new name + nickname
        $new_name = 'something_' . $user_id;
        
        // Update user user_login
        $wpdb -> update( $wpdb -> users, 
            array( 'user_login' => $new_name, 'user_nicename' => $new_name, 'display_name' => $new_name ), 
            array( 'ID' => $user_id )
        );
        
        // Update user meta
        update_user_meta( $user_id, 'first_name', $new_name );
        update_user_meta( $user_id, 'nickname', $new_name );
    } 
    add_action( 'user_register', 'action_user_register', 10, 1 );
    

    注意:知道客户/用户可以通过他的个人资料(我的帐户)更改其中一些调整,如果您不希望这样做,则必须进行其他调整。

    【讨论】:

    • 非常感谢@7uc1f3r。当我使用此代码时,我在注册期间输入的名字和姓氏不会出现在管理面板中。
    • 如果你看我的回答你会看到有5个值正在调整。 (用户登录、用户昵称 2x、显示名称和名字)。因此,这是根据您确切想要调整的内容添加或删除这些值的问题。
    • 现在一切运行良好。谢谢!
    【解决方案2】:

    选项 1

    您可以编辑创建用户和更改参数的wp_insert_user 函数。此函数需要一个用户数据数组(或对象)来创建用户,因此您只需将您想要的任何内容添加到user_login。所有参数和例子here.

    选项 2

    如果您无法编辑 wp_insert_user 函数,您可以随时调用自定义 SQL 查询来更新 user_login

    $wpdb->update($wpdb->users, array('user_login' => $new_user_login), array('ID' => $user_id));
    

    最好在用户注册后立即使用钩子/动作。

    【讨论】:

      猜你喜欢
      • 2014-01-04
      • 1970-01-01
      • 1970-01-01
      • 2018-01-19
      • 1970-01-01
      • 1970-01-01
      • 2016-09-26
      • 2011-10-26
      • 1970-01-01
      相关资源
      最近更新 更多