我确实阻止所有用户都不是来自wp-admin的管理员使用此代码
add_action( 'init', 'blockusers_init' );
function blockusers_init() {
if ( is_admin() && ! current_user_can( 'administrator' ) &&
! ( defined( 'DOING_AJAX' ) && DOING_AJAX ) ) {
wp_redirect( home_url() );
exit();
}
}
我用wp_signon();
创建了前端登录表单问题是当我在管理员帐户中提交表单时它已成功登录但在尝试访问wp-admin时它总是返回主页url
那有什么不对,我该如何解决这个问题呢
我的表格
<?php
if($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['logingo']) && $_POST['logingo']=='logingo'){
global $user;
$creds = array();
$username = (isset($_POST['login_name'])) ? $_POST['login_name'] : '';
$password = (isset($_POST['login_password'])) ? $_POST['login_password'] : '';
$creds['user_login'] = $username;
$creds['user_password'] = $password;
$creds['remember'] = true;
$userid = wp_signon($creds,false);
if(is_wp_error($user)){
$proccess = '<div class="error_msg">'.$user->get_error_message().'</div>';
$_SESSION['logged_errors'] = $proccess;
}
if(!is_wp_error($userid)){
$_SESSION['logged_success'] = 'success message';
wp_redirect(get_author_posts_url($userid->ID));
exit();
}
}
?>
<form action="" method="post">
<label class="login_name">
<input type="text" value="" name="login_name" required />
</label>
<label class="user_password">
<input type="password" name="login_password" required />
</label>
<button type="submit" name="logingo" value="logingo">go</button>
</form>
答案 0 :(得分:0)
这可能是以下问题的结果:
我建议您使用pre-built plugin限制非管理员用户访问WordPress信息中心,如果没有创建自己的插件。不建议更改functions.php中的代码,请参阅here
答案 1 :(得分:0)
当用户登录失败时,此快速代码段将强制WordPress重定向到您在wp_redirect()中指定的URL。我们还附加一个$ _GET变量,登录,并将其设置为失败,我们可以在主题中使用它来仅在用户登录失败时显示特殊内容。
add_action( 'wp_login_failed', 'pippin_login_fail' ); // hook failed login
function pippin_login_fail( $username ) {
$referrer = $_SERVER['HTTP_REFERER']; // where did the post submission come from?
// if there's a valid referrer, and it's not the default log-in screen
if ( !empty($referrer) && !strstr($referrer,'wp-login') && !strstr($referrer,'wp-admin') ) {
wp_redirect(home_url() . '/?login=failed' ); // let's append some information (login=failed) to the URL for the theme to use
exit;
}
}