繁体   English   中英

首次登录后自动分配新的 user_email 并限制更新

[英]Automatically assign new user_email and restrict update after first login

如何自动将新的 email 分配给 WordPress 中的用户并限制首次登录后的任何进一步更新?

例如,将 email 设置为以下结构:

{user_id}@example.com

我已经尝试了一些东西,但无法弄清楚,感谢任何帮助。

I wrote this code, but only users whose email has been registered, their email has been edited, other people who have not registered email, no email has been registered for them. 我该如何解决这个问题? 我的代码:

 add_action ('admin_head','set_auto_mail');
    function set_auto_mail() {
        $users = get_users(array('fields'=>'all'));
        foreach($users as $user){ 
            $user = get_userdata($user->ID);
        if ( in_array( 'subscriber', (array) $user->roles ) ) {    
            $mail = ($user->ID)."@example.com";
            if($mail!=' ') wp_update_user( array ('ID' => $user->ID, 'user_email' => $mail) );
                else wp_update_user( array ('ID' => $user->ID, 'user_email' => $user->user_email) );
            if($user->user_email == '') 
                wp_update_user( array ('ID' => $user->ID, 'user_email' => $user->user_email) );
          }   
       }
    }   

这应该完全符合您的要求。

  • 我们设置了一个名为is_new_user的新用户元数据,稍后我们将使用它来检测这是否是特定用户的第一次登录。
  • 我们设置了一个钩子以在第一次登录时更新user_email ,我们更新is_new_user以指定这不再是新用户。 像这样,我们阻止了登录时的永久更新。
  • 然后我们启动必要的功能来禁用 email 更新。 所有非新用户的视觉和后端。

我将first_namelas_nameID用于 email 结构。 Output:

$first_name.$last_name$ID@bogus.com

<?php

/**
 * Adds meta data is_new_user to a user, which let us detect new users on first login.
 * 
 * Fires immediately after a new user is registered.
 * 
 * @link https://developer.wordpress.org/reference/hooks/wp_login/
 */
add_action( 'user_register', 'wpso66983605_add_user_meta_is_new_user' );

function wpso66983605_add_user_meta_is_new_user( $user_id ) {

    add_user_meta( $user_id, 'is_new_user', 1, true );

};

/**
 * Update user email on first login.
 *
 * Fires after the user has successfully logged in.
 * 
 * @link https://developer.wordpress.org/reference/hooks/wp_login/
 */
add_action( 'wp_login', 'wpso66983605_set_user_email_on_first_login', 10, 2 );

function wpso66983605_set_user_email_on_first_login( $user_login, $user ) {

    if ( ! get_user_meta( $user->ID, 'is_new_user', true ) ) {

        return;

    };

    if ( get_user_meta( $user->ID, 'is_new_user', true ) ) {

        update_user_meta( $user->ID, 'is_new_user', 0, 1 );

        $userdata = array (
            'ID' => $user->ID, 
            'user_email' => sanitize_email( sanitize_title_with_dashes( $user->first_name . '.' . $user->last_name . $user->ID) . '@bogus.com' ),
        );
    
        wp_update_user( $userdata );

    };

};

/**
 * Prevent users from changing their email address
 * 
 * Modified to ONLY fire when a user is considered as non-new user (user has already made at least 1 login).
 * 
 * @link https://wordpress.stackexchange.com/a/363376/190376
 */
if ( ! class_exists( 'DisableMailChange' ) ) {

    class DisableMailChange {

        public function __construct() {
            add_action( 'personal_options_update', array( $this, 'disable_mail_change_BACKEND' ), 5 );
            add_action( 'show_user_profile', array( $this, 'disable_mail_change_HTML' ) ); 
        }

        public function disable_mail_change_BACKEND( $user_id ) {

            if ( ! get_user_meta( get_current_user_id(), 'is_new_user', true ) ) {

                if ( ! current_user_can( 'manage_options' ) ) { 

                    $user = get_user_by( 'id', $user_id );
                    
                    $_POST['email'] = $user->user_email; 
        
                };

            };

        }

        public function disable_mail_change_HTML( $user ) {

            if ( ! get_user_meta( get_current_user_id(), 'is_new_user', true ) ) {

                if ( ! current_user_can( 'manage_options' ) ) {

                    echo '<script>document.getElementById("email").setAttribute("disabled","disabled");</script>';
        
                };

            };

        }
        
    };

    new DisableMailChange();

};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM