2017-05-07 11 views
2

当外部用户或非管理员尝试访问时http://www.urlVisibleToUsers.com/wp-admin被重定向到错误页面,但仍然是home_url(其中WP安装居住)被暴露并且可见。我希望能够将所有最终用户或任何不是管理员的角色重定向到http://www.urlVisibleToUsers.com/,并防止打破adjax呼叫。我有下面的代码在我functions.php,但还是外部用户会看到导航栏上的home_url地址(虽然会显示错误页面):如何在重新引导非管理员和最终用户到家时遇到wp-admin

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重定向规则吗?

回答

1

将代码作为插件使用,主题函数对于某种动作/过滤器挂钩运行得非常晚。

更妙的是,只需将其添加为MU-插件,无需安装,不可能通过管理面板禁用: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(); 
     } 
}); 
1
到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'); 

相关问题