引导模态 wordpress 登录.当用户名为空时添加 PHP 条件


Bootstrap Modal Wordpress Login. Add PHP Condition when Username Empty

>我的 WordPress 主题中有这个 bootstrab 模态登录,但我希望当用户名或密码为空时,以模态形式显示错误消息,并且没有将我重定向到wp-login.php页面错误我想在单击登录按钮并且用户名或密码字段为空时添加 PHP 代码 显示错误消息you don't entered the username or password但我想在模态体内而不是模态外显示错误消息这是代码

<?php
            global $user_ID, $user_identity; get_currentuserinfo(); 
    if (!$user_ID) {
?>
<div id="login-signup">
    <div class="modal fade" id="login" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
        <div class="modal-dialog modal-sm">
            <div class="modal-content">
                <div class="modal-header">
                    <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">&times;</span><span class="sr-only"><?php _e('Close'); ?></span></button>
                    <h4 class="modal-title"><?php _e('Log In'); ?></h4>
                </div>
                <div class="modal-body">
                    <form name="loginform" id="loginform" class="form-horizontal" role="form" method="POST" action="<?php bloginfo('url') ?>/wp-login.php">
                        <div class="form-group">
                            <div class="input-group">
                                <span class="input-group-addon"><span class="glyphicon glyphicon-user"></span></span>
                                <input type="text" name="log" id="user_login" class="form-control" value="<?php echo esc_attr(stripslashes($user_login)); ?>" size="20" placeholder="Enter email">
                            </div>
                        </div>
                        <div class="form-group">
                            <div class="input-group">
                                <span class="input-group-addon"><span class="glyphicon glyphicon-lock"></span></span>
                                <input type="password" name="pwd" id="user_pass" class="form-control" value="" size="20" placeholder="Password">
                            </div>
                        </div>
                        <div class="form-group">
                            <div class="checkbox">
                                <label for="rememberme">
                                    <input type="checkbox" name="rememberme" id="rememberme" value="forever" checked="checked" /> <?php esc_attr_e('Remember Me'); ?> 
                                    <a class="pull-right" data-toggle="modal" data-target="#reset-password"><?php _e('Forget Password?'); ?></a>
                                </label>
                            </div>
                        </div>
                        <?php do_action('login_form'); ?>
                        <div class="form-group">
                            <input type="submit" name="wp-login" id="wp-login" value="<?php esc_attr_e('Log In'); ?>" class="btn btn-default" />
                            <input type="hidden" name="redirect_to" value="<?php echo $_SERVER['REQUEST_URI']; ?>" />
                            <input type="hidden" name="user-cookie" value="1" />
                        </div>
                    </form>
                </div>
            </div><!-- /.modal-content -->
        </div><!-- /.modal-dialog -->
    </div><!-- /.modal -->
<?php } else { some other codes}?>

有几种方法可以解决此问题:

1.简单的一个:

"必需"添加到输入字段,这样用户将被迫输入必填字段,而您不必显示错误代码,如下所示:

                            <input type="text" name="log" id="user_login" class="form-control" value="<?php echo esc_attr(stripslashes($user_login)); ?>" size="20" placeholder="Enter email" required="required">

可能与旧版浏览器(例如旧版 IE 和某些 Safaris)存在兼容性问题。

2. 使用外部验证器:引导验证器

对我来说,这是最复杂的,但同时也是最漂亮的。使用 Javascript 来验证表单,其工作原理如下:

  • 包括文件;
  • 在表单后添加 JS 代码以验证字段。

__

3. 发布到自我并清理数据:

另一个好方法,基本上你改变动作形式:

action="<?php bloginfo('url') ?>/wp-login.php">

自:

action=<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>

然后通过 POST 接收数据,验证数据是否为空并显示错误或使用wp_signon登录用户

编辑:改进的代码

 <?php
//We shall SQL escape all inputs
        $username = esc_sql(isset($_REQUEST['log']) ? $_REQUEST['username'] : '');
        $password = esc_sql(isset($_REQUEST['password']) ? $_REQUEST['password'] : '');
        $remember = esc_sql(isset($_REQUEST['rememberme']) ? $_REQUEST['rememberme'] : '');
    if($remember) $remember = "true";
    else $remember = "false";
    $login_data = array();
    $login_data['log'] = $username;
    $login_data['user_password'] = $password;
    $login_data['remember'] = $remember;
    $user_verify = wp_signon( $login_data, false ); 
    //wp_signon is a wordpress function which authenticates a user. It accepts user info parameters as an array.
    if($_POST){
        if ( is_wp_error($user_verify) ) {
            $UserError = "Username or password don't match, please check again.";
        } else {
            $profile = "http://www.example.com/user-profile-page";
            wp_redirect( $profile ); exit;
        }
    } ?>
<div id="login-signup">
    <div class="modal fade" id="login" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
        <div class="modal-dialog modal-sm">
            <div class="modal-content">
                <div class="modal-header">
                    <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">&times;</span><span class="sr-only"><?php _e('Close'); ?></span></button>
                    <h4 class="modal-title"><?php _e('Log In'); ?></h4>
                </div>
                <div class="modal-body">
        <?php // SHOW THE ERROR, IF $UserError HAS SOMETHING
if(!empty($UserError)) { ?>
                            <span class='error' style='color: #d20000; margin-bottom: 20px; font-size: 18px; font-weight: bold; float: left;'><?php echo $UserError; ?></span><div class='clearfix'></div>
        <?php } ?>
                    <form name="loginform" id="loginform" class="form-horizontal" role="form" method="POST" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>">
                        <div class="form-group">
                            <div class="input-group">
                                <span class="input-group-addon"><span class="glyphicon glyphicon-user"></span></span>
                                <input type="text" name="log" id="user_login" class="form-control" value="<?php echo esc_attr(stripslashes($user_login)); ?>" size="20" placeholder="Enter email">
                            </div>
                        </div>
                        <div class="form-group">
                            <div class="input-group">
                                <span class="input-group-addon"><span class="glyphicon glyphicon-lock"></span></span>
                                <input type="password" name="pwd" id="user_pass" class="form-control" value="" size="20" placeholder="Password">
                            </div>
                        </div>
                        <div class="form-group">
                            <div class="checkbox">
                                <label for="rememberme">
                                    <input type="checkbox" name="rememberme" id="rememberme" value="forever" checked="checked" /> <?php esc_attr_e('Remember Me'); ?> 
                                    <a class="pull-right" data-toggle="modal" data-target="#reset-password"><?php _e('Forget Password?'); ?></a>
                                </label>
                            </div>
                        </div>
                        <?php do_action('login_form'); ?>
                        <div class="form-group">
                            <input type="submit" name="wp-login" id="wp-login" value="<?php esc_attr_e('Log In'); ?>" class="btn btn-default" />
                            <input type="hidden" name="redirect_to" value="<?php echo $_SERVER['REQUEST_URI']; ?>" />
                            <input type="hidden" name="user-cookie" value="1" />
                        </div>
                    </form>
                </div>
            </div><!-- /.modal-content -->
        </div><!-- /.modal-dialog -->
    </div><!-- /.modal -->

简要说明正在发生的事情:

  1. 用户填写并提交表单
  2. 当帖子提交给自己时,将填充 3 个变量 - 用户名、密码和记住我
  3. 我们使用用户登录数据构建一个快速数组,并将其发送到函数wp_signon
  4. 如果一切正常,用户将被重定向到个人资料页面,登录
  5. 如果出现错误,变量$UserError将被填充,并且用户不会重定向
  6. 我们添加了一个条件来检查$UserError里面是否有东西,如果有,它会显示消息

代码可以更好,但可以达到目的。