点击 wp-admin 时如何将非管理员和最终用户重定向到家

How do I re-direct non admin and end users to home when hitting wp-admin

当外部用户或非管理员尝试访问 http://www.urlVisibleToUsers.com/wp-admin 时,会被重定向到一个错误页面,但 home_url(WP 安装所在的位置)仍然是可见的。我希望能够将所有最终用户或任何非管理员的角色重定向到 http://www.urlVisibleToUsers.com/ 并防止 adjax 调用中断。我的 functions.php 中有以下代码,但外部用户仍然会在导航栏中看到 home_url 地址(尽管显示错误页面):

add_action( 'admin_init', 'admin_area_for_manage_options_only');
function admin_area_for_manage_options_only() {

      if( defined('DOING_AJAX') && DOING_AJAX ) {
            //Allow ajax calls in order to have ALM working
            return;
      }

      if( ! current_user_can( "manage_options" ) ) {
           //Redirect to main page if the user has no "manage_options" capability
           wp_redirect( get_site_url( ) );
           exit();
      }
 }

不确定为什么上面的代码不起作用,这是正确的方法吗?我是否应该在我的 .htaccess 中引入 Apache 重定向规则?

将代码用作插件,主题函数 运行 对于某种 action/filter 挂钩非常晚。

更好的是,只需将其添加为 mu-plugin,无需安装,无法通过管理面板禁用:https://codex.wordpress.org/Must_Use_Plugins

<?php
/**
 * Plugin Name: Admin only for admins
 */

add_action( 'admin_init', function(){
      if( defined('DOING_AJAX') && DOING_AJAX ) {
            return;
      }    
      if( ! current_user_can( "manage_options" ) ) {
           wp_redirect( get_site_url( ) );
           exit();
      }
 });

在您的 functions.php 中输入此代码

function redirect_non_admin_user(){
    if ( is_user_logged_in() ) {
        if ( !defined( 'DOING_AJAX' ) && !current_user_can('administrator') ){
            wp_redirect( site_url() );  exit;
        }
    }
}
add_action( 'admin_init', 'redirect_non_admin_user' );