如果试图查看mysite.com/wp-admin/,如何将非管理员重定向到主页?

时间:2013-03-12 作者:user27309

我希望我的所有用户(贡献者和作者也是),但如果管理员试图查看mysite,他们会被重定向到主页。com/wp admin/。投稿人和作者必须能够像往常一样添加和编辑帖子,以及其他他们不得不被重定向的帖子。。。我已经删除了指向仪表板的链接。。。我也尝试过一些插件,但其中一个更接近(删除仪表板访问)的插件会重定向到主页,但会阻止贡献者和作者添加、编辑和删除帖子。谢谢

5 个回复
最合适的回答,由SO网友:user27309 整理而成

不幸的是,上述代码都不适用于我,因为他们只是将非管理员重定向到主页,即使我希望作者和贡献者能够添加/编辑和删除他们的帖子。。。我已经结束了移除仪表板中的框的工作,并且解决了(部分)我的问题。

我在函数中添加了这个。php

function disable_default_dashboard_widgets() {

    remove_meta_box(\'dashboard_right_now\', \'dashboard\', \'core\');
    remove_meta_box(\'dashboard_recent_comments\', \'dashboard\', \'core\');
    remove_meta_box(\'dashboard_incoming_links\', \'dashboard\', \'core\');
    remove_meta_box(\'dashboard_plugins\', \'dashboard\', \'core\');

    remove_meta_box(\'dashboard_quick_press\', \'dashboard\', \'core\');
    remove_meta_box(\'dashboard_recent_drafts\', \'dashboard\', \'core\');
    remove_meta_box(\'dashboard_primary\', \'dashboard\', \'core\');
    remove_meta_box(\'dashboard_secondary\', \'dashboard\', \'core\');
}
add_action(\'admin_menu\', \'disable_default_dashboard_widgets\');

SO网友:Miguel

我已经使用这段代码有一段时间了,我认为它最初是在一个名为wp block admin的插件上使用的,但这很管用。您只需更改所需的兼容性,即可满足您的需要this

$required_capability = \'edit_others_posts\';
$redirect_to = \'\';
function no_admin_init() {      
    // We need the config vars inside the function
    global $required_capability, $redirect_to;      
    // Is this the admin interface?
    if (
        // Look for the presence of /wp-admin/ in the url
        stripos($_SERVER[\'REQUEST_URI\'],\'/wp-admin/\') !== false
        &&
        // Allow calls to async-upload.php
        stripos($_SERVER[\'REQUEST_URI\'],\'async-upload.php\') == false
        &&
        // Allow calls to admin-ajax.php
        stripos($_SERVER[\'REQUEST_URI\'],\'admin-ajax.php\') == false
    ) {         
        // Does the current user fail the required capability level?
        if (!current_user_can($required_capability)) {              
            if ($redirect_to == \'\') { $redirect_to = get_option(\'home\'); }              
            // Send a temporary redirect
            wp_redirect($redirect_to,302);              
        }           
    }       
}
// Add the action with maximum priority
add_action(\'init\',\'no_admin_init\',0);

SO网友:Aous

一个补充:始终检查是否有登录用户,否则您将阻止安全项目显示在登录屏幕上:

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\' );
非常感谢您提供此解决方案:-)

SO网友:kaiser

您只需要检查两件事:

如果用户在管理界面中,只要我们使用template_redirect 钩子我们不必检查登录/注册/密码页面,因为重定向对用户来说是不可见的。

这是一个小插件的想法。

<?php
/**
 * Plugin Name: (#90535) Redirect Non-Admin users to the "Home"-page.
 * Description: Checks if we\'re in the admin UI and if the user has the admin only \'manage_options\' capability
 * Version:     2013.03.12
 * Author:      Franz Josef Kaiser
 */
add_action( \'template_redirect\', \'wpse90535_admin_denied\' );
function wpse90535_admin_denied()
{
    is_admin()
    && ! current_user_can( \'manage_options\' )
        and exit( wp_redirect( home_url(), 302 ) );
}

SO网友:Rocker Maruf

我知道这还是个老问题,但你可以看看。

function redirect_non_admin_user(){
    if ( !defined( \'DOING_AJAX\' ) && !current_user_can(\'administrator\') ){
        wp_redirect( site_url() );  exit;
    } 
}


add_action( \'admin_init\', \'redirect_non_admin_user\' );
在前端使用admin AJAX调用时,此检查非常重要“!defined(\'DOING\\u AJAX”)”。

结束

相关推荐

Remove Widgets in Dashboard

另一个noob问题。。。当作者登录并访问其仪表板时,他们会看到各种小部件,例如Internet Explorer警告、WordPress动态新闻。是否要为所有用户(现在和将来)删除所有这些内容,以便他们只看到“快速按”&;\'现在的小部件?谢谢