WordPress:访问wp-admin时如何强制404?

时间:2017-01-29 01:31:47

标签: php wordpress

我在自定义页面上有一个自定义登录表单,用于处理所有登录/注销。该表单根据需要发布到wp-login.php。

<form name="loginform-custom" id="loginform-custom" action="http://localhost/wp-login.php" method="post">

所有无效的登录尝试都由functions.php文件中的以下脚本处理:

/**
 * Redirect user on invalid log-in attempts
 */
function login_failed() {
    wp_redirect( home_url('/access-denied') );
    exit;
}
add_action( 'wp_login_failed', 'login_failed' );

function verify_username_password( $user, $username, $password ) {
    if( $username == "" || $password == "" ) {
        wp_redirect( home_url('/access-denied') );
        exit;
    }
}

我在functions.php文件中使用以下脚本将所有非管理员从wp-admin重定向到404页面。

function restrict_admin_with_redirect() {
    if ( ! current_user_can( 'manage_options' ) && ( ! wp_doing_ajax() ) ) {
        wp_redirect( site_url('/404') );
        exit;
    }
}
add_action( 'admin_init', 'restrict_admin_with_redirect', 1 );

然而,这是我的问题。当非用户(随机访问者)尝试访问wp-admin时,尽管重定向脚本为404,但他们将被带到拒绝访问页面。出于某种原因,每当有人试图访问wp-admin时,服务器将其视为日志 - 尝试,当他们(当然)被拒绝登录时,他们被重定向到访问被拒绝页面。

当用户访问wp-admin时,有什么方法可以强制使用404吗?此外,我喜欢真正的404而不是重定向到404页面(这不是真正的404)。

思想?

有没有办法在尝试访问wp-admin时强迫任何人(用户和非用户)加入404?在上面的操作脚本中,即使我将非管理员重定向到404.php页面,非用户仍然会被发送到标准访问权限

1 个答案:

答案 0 :(得分:0)

考虑来自Ragu.cz的这个解决方案。

https://wordpress.org/support/topic/make-wp-admin-throw-a-404-page-or-something/#post-8565864

add_action( 'init', 'force_404', 1 );

function force_404() {
    $requested_uri = $_SERVER["REQUEST_URI"];
    do_action('debugger_var_dump', $requested_uri, '$requested_uri', 0, 0);
    do_action('debugger_var_dump', strpos( $requested_uri, '/wp-login.php'), 'FOUND?', 0, 0);

    if (  strpos( $requested_uri, '/wp-login.php') !== false ) {

        do_action('debugger_var_dump', 'REDIRECT', 'REDIRECT', 0, 0);
        // The redirect codebase
        status_header( 404 );
        nocache_headers();
        include( get_query_template( '404' ) );
        die();
    }

    if (  strpos( $requested_uri, '/wp-login.php') !== false || strpos( $requested_uri, '/wp-register.php') !== false ) {

        do_action('debugger_var_dump', 'REDIRECT', 'REDIRECT', 0, 0);
        // The redirect codebase
        status_header( 404 );
        nocache_headers();
        include( get_query_template( '404' ) );
        die();
    }

    if (  strpos( $requested_uri, '/wp-admin') !== false && !is_super_admin() ) {

        do_action('debugger_var_dump', 'REDIRECT', 'REDIRECT', 0, 0);
        // The redirect codebase
        status_header( 404 );
        nocache_headers();
        include( get_query_template( '404' ) );
        die();
    }

    do_action('debugger_var_dump', 'END', 'END', 0, 0);
}