>我的 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">×</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">×</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 -->
简要说明正在发生的事情:
- 用户填写并提交表单
- 当帖子提交给自己时,将填充 3 个变量 - 用户名、密码和记住我
- 我们使用用户登录数据构建一个快速数组,并将其发送到函数wp_signon
- 如果一切正常,用户将被重定向到个人资料页面,登录
- 如果出现错误,变量$UserError将被填充,并且用户不会重定向
- 我们添加了一个条件来检查$UserError里面是否有东西,如果有,它会显示消息
代码可以更好,但可以达到目的。