Php 如何向默认WordPress注册添加密码字段?

Php 如何向默认WordPress注册添加密码字段?,php,wordpress,passwords,registration,Php,Wordpress,Passwords,Registration,我想让用户选择自己的密码,但保留一封验证电子邮件(不重置密码链接) 我正在为wp登录中的密码添加一个输入字段: <input type="password" name="user_password" value="" placeholder="Password" id="user_password" class="input" /> 出于某种原因,我不断收到验证电子邮件,要求用户设置密码。 有没有办法解决这个问题 <form name="registerform" id="r

我想让用户选择自己的密码,但保留一封验证电子邮件(不重置密码链接)

我正在为wp登录中的密码添加一个输入字段:

<input type="password" name="user_password" value="" placeholder="Password" id="user_password" class="input" />
出于某种原因,我不断收到验证电子邮件,要求用户设置密码。 有没有办法解决这个问题

<form name="registerform" id="registerform" action="<?php echo esc_url( site_url( 'wp-login.php?action=register', 'login_post' ) ); ?>" method="post" novalidate="novalidate">
<p>
    <label for="user_login"><?php _e('*First Name') ?><br />
    <input type="text" name="user_login" id="user_login" class="input" value="<?php echo esc_attr(wp_unslash($user_login)); ?>" size="25" /></label>
</p>
<p>
    <label for="user_login"><?php _e('*Last Name') ?><br />
    <input type="text" name="user_login" id="user_login" class="input" value="<?php echo esc_attr(wp_unslash($user_login)); ?>" size="25" /></label>
</p>


<p>

    <label for="user_login"><?php _e('*Username') ?><br />
    <input type="text" name="user_login" id="user_login" class="input" value="<?php echo esc_attr(wp_unslash($user_login)); ?>" size="25" /></label>
</p>
<p>
    <label for="user_email"><?php _e('*Email address') ?><br />
    <input type="email" name="user_email" id="user_email" class="input" value="<?php echo esc_attr( wp_unslash( $user_email ) ); ?>" size="25" /></label>
</p>

<p>
    <label for="user_login"><?php _e('*Choose a password') ?><br />
    <input type="text" name="user_password" id="user_password" class="input" value="<?php echo esc_attr(wp_unslash($user_login)); ?>" size="25" /></label>
</p>
<p>
    <label for="user_login"><?php _e('*Confirm password') ?><br />
    <input type="text" name="user_password" id="user_password" class="input" value="<?php echo esc_attr(wp_unslash($user_login)); ?>" size="25" /></label>
</p>
<p>
    <input type="checkbox" name="vehicle" value="Bike" onclick="return false" checked >I agree to the terms and conditions<br>
</p>
我的意思是,在用户注册时,应该执行插件的功能。换句话说,应该设置密码。我不确定这是否正确。

试试这段代码

  function frontend_register(){     

    $gfemail        = $_POST['user_email'];
    $firstname      = $_POST['user_firstname'];
    $lastname       = $_POST['user_lastname'];
    $password       = $_POST['user_password'];      


    if (email_exists( $gfemail ) === false) {

      $password             =   esc_attr( $password );
      $email                =   sanitize_email( $gfemail );
      $first_name               =   sanitize_text_field( $firstname );
      $last_name                =   sanitize_text_field( $lastname );

      $userdata = array(
          'user_login'    =>        $email,
          'user_email'    =>    $email,
          'user_pass'     =>    $password,
          'role'                =>   'subscriber',
          'first_name'    =>    $first_name,
          'last_name'     =>    $last_name,
          );
      $new_user = wp_insert_user ( $userdata );       

      if(!is_wp_error($new_user)){          

        $headers = 'Content-type: text/html;charset=utf-8' . "\r\n";
        $headers .= 'From: Your SiteName <test@test.com>' . "\r\n";

        $verifyCode = sha1($new_user.$email);

        update_user_meta( $new_user, 'email_confirmation_done', 'No');
        update_user_meta( $new_user, 'email_confirmation_code', $verifyCode);

        $subject = 'Please verify your account' . "\r\n";       

        $mkUrl = sprintf('<a href="%s?verifycode=%s&user_login=%s">click here</a>', $wpgsloginpage, $verifyCode, $email);
        $message = sprintf('<p>Dear %s,</p><br> ', $first_name);
        $message .= sprintf('<hr>');
        $message .= sprintf('<p><strong>Please verify your account by clicking on this link %s </strong></p>', $mkUrl);
        $message .= sprintf('<hr>');            
        $message .= sprintf('<br><p style="font-size:12.8px">Thank you for registering<br><br>');
        wp_mail($email, $subject, $message, $headers);  
        die("success");
      }
    }else{
        die("failure");
    }       

}


if ( ! function_exists( 'wp_new_user_notification' ) ) :
function wp_new_user_notification( $user_id, $deprecated = null, $notify = '' ) {
    return;
}
endif;
函数前端_寄存器(){
$gfemail=$\u POST['user\u email'];
$firstname=$\u POST['user\u firstname'];
$lastname=$\u POST['user\u lastname'];
$password=$\u POST['user\u password'];
如果(email_存在($gfemail)==false){
$password=esc_attr($password);
$email=sanitize_email($gfemail);
$first\U name=清理文本\U字段($firstname);
$last\u name=sanitize\u text\u字段($lastname);
$userdata=array(
“用户登录”=>$email,
“用户电子邮件”=>$email,
“用户密码”=>$password,
'角色'=>'订户',
“first\u name”=>$first\u name,
“姓氏”=>$last\u name,
);
$new_user=wp_insert_user($userdata);
如果(!is_wp_error($new_user)){
$headers='内容类型:text/html;charset=utf-8'。“\r\n”;
$headers.='发件人:您的站点名称'。“\r\n”;
$verifyCode=sha1($new_user.$email);
更新用户元($new用户,'email确认,'done','No');
更新用户元($new用户,$email确认码,$verifyCode);
$subject='请验证您的帐户'。“\r\n”;
$mkUrl=sprintf(“”,$wpgsloginpage,$verifyCode,$email);
$message=sprintf(“亲爱的%s,


”,$first\u name); $message.=sprintf(“
”); $message.=sprintf(“请单击此链接%s

”、$mkUrl来验证您的帐户); $message.=sprintf(“
”); $message.=sprintf('

感谢您的注册

); wp_邮件($email、$subject、$message、$headers); 死亡(“成功”); } }否则{ 死亡(“失败”); } } 如果(!function_存在('wp_new_user_notification')): 函数wp_new_user_notification($user_id,$deprecated=null,$notify=''){ 返回; } endif;


此插件支持该功能。也许你可以深入研究代码并找出答案,或者只是使用插件?你在wp login或registration中为密码添加了输入字段?根据我所知,每当你想更改注册时,你都在wp login中进行。你能发布你的完整代码吗?我刚刚在我的Web服务器上检查过。它起作用了。一旦用户注册,就可以使用密码直接登录。现在的问题是如何创建验证电子邮件。用户现在收到要求他设置密码的电子邮件(即使密码已经定义)。相反,我希望用户接收验证电子邮件(在单击电子邮件中的链接之前,他无法登录),另一件事是“重复密码”字段。为什么我们需要重复密码?您必须检查
email\u confirmation\u done
=是,而loginI在wp login中使用代码,我将email\u confirmation更改为是。但我仍然收到带有“设置密码”的电子邮件,并且仍然收到我的用户自动生成密码的消息。此外,我希望发送验证。比如说“在这里激活你的帐户”,但我还是觉得我做错了什么。我是否需要将代码添加到wp登录,或者我应该将其放在插件上,并在执行注册操作时添加它?当我将代码添加到wp登录时,我仍然会收到一条消息,说明用户已自动生成密码,并且用户收到一封带有设置密码的电子邮件。您在默认wordpress注册表中使用的密码是什么?默认情况下,我的代码不起作用。您必须为register创建一个模板,并将ajax中的值发布到my函数中。
function myplugin_set_pass( $user_id ) 
{if ( isset( $_POST['user_password'] ) )
wp_set_password( $_POST['user_password'], $user_id );}
add_action('user_register','myplugin_set_pass')
  function frontend_register(){     

    $gfemail        = $_POST['user_email'];
    $firstname      = $_POST['user_firstname'];
    $lastname       = $_POST['user_lastname'];
    $password       = $_POST['user_password'];      


    if (email_exists( $gfemail ) === false) {

      $password             =   esc_attr( $password );
      $email                =   sanitize_email( $gfemail );
      $first_name               =   sanitize_text_field( $firstname );
      $last_name                =   sanitize_text_field( $lastname );

      $userdata = array(
          'user_login'    =>        $email,
          'user_email'    =>    $email,
          'user_pass'     =>    $password,
          'role'                =>   'subscriber',
          'first_name'    =>    $first_name,
          'last_name'     =>    $last_name,
          );
      $new_user = wp_insert_user ( $userdata );       

      if(!is_wp_error($new_user)){          

        $headers = 'Content-type: text/html;charset=utf-8' . "\r\n";
        $headers .= 'From: Your SiteName <test@test.com>' . "\r\n";

        $verifyCode = sha1($new_user.$email);

        update_user_meta( $new_user, 'email_confirmation_done', 'No');
        update_user_meta( $new_user, 'email_confirmation_code', $verifyCode);

        $subject = 'Please verify your account' . "\r\n";       

        $mkUrl = sprintf('<a href="%s?verifycode=%s&user_login=%s">click here</a>', $wpgsloginpage, $verifyCode, $email);
        $message = sprintf('<p>Dear %s,</p><br> ', $first_name);
        $message .= sprintf('<hr>');
        $message .= sprintf('<p><strong>Please verify your account by clicking on this link %s </strong></p>', $mkUrl);
        $message .= sprintf('<hr>');            
        $message .= sprintf('<br><p style="font-size:12.8px">Thank you for registering<br><br>');
        wp_mail($email, $subject, $message, $headers);  
        die("success");
      }
    }else{
        die("failure");
    }       

}


if ( ! function_exists( 'wp_new_user_notification' ) ) :
function wp_new_user_notification( $user_id, $deprecated = null, $notify = '' ) {
    return;
}
endif;