Php WP用户注册-也可以立即选择其密码

Php WP用户注册-也可以立即选择其密码,php,wordpress,registration,Php,Wordpress,Registration,这里有一个非常简短的前端注册指南,但我对密码有一个小问题 我禁用了在用户注册时发送的带有密码生成的电子邮件: //Don't Send Notification Email To Registered User if (!function_exists('wp_new_user_notification')) : function wp_new_user_notification( $user_id, $notify = '' ) { //Here's originally password

这里有一个非常简短的前端注册指南,但我对密码有一个小问题

我禁用了在用户注册时发送的带有密码生成的电子邮件:

//Don't Send Notification Email To Registered User
if (!function_exists('wp_new_user_notification')) :
function wp_new_user_notification( $user_id, $notify = '' ) {

//Here's originally password generation + sending email
//Add greeting email later

}
endif;
        <?php if( get_option('users_can_register') ) { ?>

                    <form name="registerform" id="registerform" action="<?php echo wp_registration_url(); ?>" method="post">

                        <div class="form-group">
                            <input type="text" name="user_login" id="user_login" class="form-control" placeholder="Username">
                        </div>

                        <div class="form-group">
                            <input type="text" name="user_email" id="user_email" class="form-control" placeholder="Email">
                        </div>

                        <div class="form-group">
                            <input type="password" name="user_pass" id="user_pass" class="form-control" placeholder="Password">
                        </div>  

                        <input type="hidden" name="redirect_to" value="<?php echo site_url(); ?>?user-register=registered">
                        <input type="submit" name="wp-submit-registration" id="wp-submit-registration" value="<?php _e( 'Register', 'tt' ); ?>">
                    </form>

        <?php } ?>
  • 用户注册时不会收到电子邮件
  • 是的,它是由plugin添加的,因为pluggable.php只能从plugin覆盖

我的前端注册表表(不介意“重复密码”丢失-仅用于测试):

//Don't Send Notification Email To Registered User
if (!function_exists('wp_new_user_notification')) :
function wp_new_user_notification( $user_id, $notify = '' ) {

//Here's originally password generation + sending email
//Add greeting email later

}
endif;
        <?php if( get_option('users_can_register') ) { ?>

                    <form name="registerform" id="registerform" action="<?php echo wp_registration_url(); ?>" method="post">

                        <div class="form-group">
                            <input type="text" name="user_login" id="user_login" class="form-control" placeholder="Username">
                        </div>

                        <div class="form-group">
                            <input type="text" name="user_email" id="user_email" class="form-control" placeholder="Email">
                        </div>

                        <div class="form-group">
                            <input type="password" name="user_pass" id="user_pass" class="form-control" placeholder="Password">
                        </div>  

                        <input type="hidden" name="redirect_to" value="<?php echo site_url(); ?>?user-register=registered">
                        <input type="submit" name="wp-submit-registration" id="wp-submit-registration" value="<?php _e( 'Register', 'tt' ); ?>">
                    </form>

        <?php } ?>


不管密码与否,您的代码都不应该工作。首先,返回默认注册表的url。对于自定义注册表单,您可以将表单提交到
admin post.php
,并将其作为自定义操作名称,如
register\u user

<form name="registerform" id="registerform" action="<?php echo admin_url('admin-post.php?action=register_user'); ?>" method="post">
然后在functions.php文件中,使用
admin\u post\u nopriv\u register\u user
钩住它

add_action('admin_post_nopriv_register_user', 'my_register_user');
function my_register_user() {
    // Check the form validity
    if (isset($_POST['user-front']) && wp_verify_nonce($_POST['user-front'], 'create-'.$_SERVER['REMOTE_ADDR'])) {

        // Check the required field
        if (!isset($_POST['user_login']) && !isset($_POST['user_email']) || !isset($_POST['user_pass']) || !isset($_POST['user_confirm_pass']) || !is_email($_POST['user_email'])
            ) {
            wp_redirect(home_url() . '?message=wrong-input');
            exit();
        }

        // Check if both password match
        if ($_POST['user_pass'] != $_POST['user_confirm_pass']) {
            wp_redirect(home_url() . '?message=pass-dif');
            exit();
        }

        // Check if user exists
        if (email_exists($_POST['user_email']) |- username_exists($_POST['user_login']) {
            wp_redirect(home_url() . '?message=already-registered');
            exit();
        }

        // Create the user
        $user_id = wp_create_user($_POST['user_login'], $_POST['user_pass'], $_POST['email_user']);
        $user = new WP_User($user_id);
        $user->set_role('subscriber');

        // Automatic loggin
        $creds = array();
        $creds['user_login'] = $_POST['user_login'];
        $creds['user_password'] = $_POST['user_pass'];
        $creds['remember'] = false;
        $user = wp_signon($creds, false);

        // Redirection
        wp_redirect(home_url('account'));
        exit();
    }
}

这是一个完整的注册过程示例,您可能需要根据自己的需要对此进行一些更改(特别是如何处理错误)。

您的问题是什么,如何加密密码以在WP中使用它?我的解决方案出于某种原因不保存密码。问题是:为什么会这样?是你!我的删除后定时器工作得很好,切换到服务器cron&做了一些其他更改,谢谢!现在这个问题。。我查看了数据库&问题似乎是它将“default\u password\u nag”设置为1(true)。我必须设法阻止它。很高兴它成功了:)对于你的注册问题,我不确定这是否有效。用户是否已添加到数据库中?默认的wordpress注册表单没有任何密码字段,因此需要创建自定义表单和操作。我正在写一个答案来分享我以前使用过的一些代码。我会看看我能做些什么来集成你的解决方案和我的解决方案。请注意,我不想丢失jQuery验证——它非常容易使用&让我可以轻松地在将来添加AJAX用户名/电子邮件检查。同时你能再看看我的问题吗?我为您添加了一些东西。@好吧,您可以完全保留JS验证层,但也保留PHP验证-因此,如果用户禁用javascript,您仍然可以检查他的表单输入。我认为您无法绕过需要使用自定义函数来插入新用户的问题,因为默认情况下Wordpress不希望发送密码。使用自定义注册函数的另一个好处是,如果以后需要在表单中添加一些其他输入(如firstname、lastname等),可以通过添加自定义usermeta轻松处理。如果你碰到什么事,请告诉我。是的。。除了管理员(404)之外,我已经限制了每个人对wp-admin的访问&用秘密URL替换了wp-login。不幸的是,这个解决方案使用wp-admin。不要问我为什么,但我的旧登录/注册与wp login/wp admin没有冲突。我想知道是否有解决办法。我目前正在寻找一种方法来对此操作进行验证,但仍然有一个问题:它是否像“原始”注册表一样安全。。如果我也选择使用此方法登录,那么是否登录?只要您使用令牌(“nonce”)检查表单有效性,它是安全的-它仍然使用常规WP函数创建用户。只是不要忘记nonce和检查PHP中用户输入的有效性,即使您正在进行JS验证。关于您的
wp admin
限制,您可能可以为
admin post.php
设置一个例外(如果您通过htaccess执行此操作,您可以执行
RewriteCond
)。