0

i did prevent all user are not admin from wp-admin with this code

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();
}
}

and i created frontend login form with wp_signon(); the problem is when i submit form in admin account it's successfully logged in but when trying access wp-admin it always return to home page url so what's wrong and how can i fix this problem my form

<?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>
4

2 回答 2

0

当用户无法登录时,此快速代码段将强制 WordPress 重定向到您在 wp_redirect() 中指定的 URL。我们还附加了一个 $_GET 变量 login,并将其设置为 failed,我们可以在主题中使用它来仅在用户登录失败时显示特殊内容。

 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;
    }
}
于 2017-08-22T07:55:38.370 回答
0

这可能是以下问题的结果:

  1. 重定向到 wp-login.php 中主页的代码片段:在问题中发布您的登录页面的代码。
  2. Cookie 问题:清除浏览器 cookie 和缓存,重新启动浏览器并尝试登录
  3. 插件:您是否激活了登录插件?或者它可能是另一个导致问题的插件。停用所有插件,看看是否成功。
  4. 主题问题:您的主题可能有问题。更改为默认主题并重新安装您想要的主题。将您的访问限制代码挂接到 functions.php

我建议您使用预构建的插件来限制非管理员用户对 WordPress 仪表板的访问,如果不创建自己的插件的话。不建议更改 functions.php 中的代码,请参见此处

于 2017-08-22T07:06:51.217 回答