当我使用此功能时,为什么wp-登录会重定向到主页?

时间:2012-05-10 作者:Michelle

我很困惑;我看不出这个代码哪里出了问题。如果用户试图访问/wp admin中的任何内容,它应该将其重定向回站点主页,但如果用户试图转到/wp登录,则不会重定向。php:

// REDIRECT ALL \'SUBSCRIBER\' USERS TO SITE HOME PAGE IF THEY TRY TO ACCESS WP-ADMIN
add_action( \'init\', \'blockusers_init\' );
function blockusers_init() {
    if ( !current_user_can( \'edit\' ) && is_admin() ) {
        wp_redirect( home_url() );
        exit;
    }
}
我试着用角色代替能力(\'subscriber\' 而不是\'edit\'), 当我在单站点安装WordPress时,这一点很有效,但这个主题现在被用于多站点/子文件夹安装,由于某种原因,这个角色不起作用。使用上面的代码,只要订阅者转到/wp admin或/wp login。php他们被重定向到主页。

有什么想法吗?谢谢你的帮助!

1 个回复
SO网友:chrisguitarguy

首先,如果你想阻止访问wp-admin, 为什么要挂接在每次加载页面时都会触发的东西上?钩入admin_init 相反

而且,正如@MattSmath所提到的,编辑不是一种能力。edit_posts 是而且admin_init 仅在管理页面上激发,因此您可以删除is_admin() 从你的支票中。

修改后的功能:

<?php
add_action(\'admin_init\', \'wpse51831_init\');
function wpse51831_init()
{
    if(!current_user_can(\'edit_posts\')) 
    {
        wp_redirect(home_url());
        exit();
    }
}
奖励:你可能不想展示你的subscriber 将用户级别设置为WordPress管理栏(将其链接回wp-admin). 这将隐藏它:

<?php
add_filter(\'show_admin_bar\', \'wpse51831_hide_admin_bar\');
/*
 * hide the admin bar for `subscribers`
 *
 * @uses current_user_can
 * @return boolean
 */
function wpse51831_hide_admin_bar($bool)
{
    if(!current_user_can(\'edit_posts\'))
    {
        $bool = false;
    }
    return $bool;
}

结束

相关推荐

PHP致命错误:无法为wp-includes/capabilities.php中的非对象调用重载函数

我在apache日志中遇到了太多以下错误。PHP Fatal error: Cannot call overloaded function for non-object in wp-includes/capabilities.php on line 1187这是函数current\\u user\\u can($capability)的内部,第1187行如下所示:$current_user = wp_get_current_user(); 我不知道问题出在哪里?