将登录用户保持在管理面板之外

时间:2012-02-21 作者:Howdy_McGee

所以我正在创建用户注册。就这么简单<?php wp_register(); ?> 但是它给了他们一个到管理面板的链接,在我的情况下,他们真的不需要这个链接。如果订阅者试图访问管理面板,如何删除“站点管理”链接并重定向订阅者?我猜一旦他们登录,我也需要将他们重定向到某个页面。

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

因此,我找到了答案,并认为它可能对以后的观众有用。添加下面的代码会将所有非管理员用户重定向到主页。

function prevent_admin_access() {
    if (strpos(strtolower($_SERVER[\'REQUEST_URI\']), \'/wp-admin\') !== false && !current_user_can(\'administrator\')) {
        wp_redirect(get_option(\'siteurl\'));
    }
}

add_action(\'init\', \'prevent_admin_access\', 0);
此代码的唯一问题是需要更改注册,以便用户可以选择自己的密码。

SO网友:chrisguitarguy

您可以删除read 订阅者提供的功能,使他们能够访问仪表板。这最好通过插件上的激活挂钩来完成——只需完成一次。

<?php
register_activation_hook( __FILE__, \'wpse43054_activation\' );
function wpse43054_activation() 
{
    $role = get_role( \'subscriber\' );
    if( $role ) $role->remove_cap( \'read\' );
}
当然,您可能希望在插件停用时恢复该功能。

<?php
register_deactivation_hook( __FILE__, \'wpse43054_deactivation\' );
function wpse43054_deactivation() 
{
    $role = get_role( \'subscriber\' );
    if( $role ) $role->add_cap( \'read\' );
}
最后,你可以init 如果用户已登录,请重定向他们,尝试访问管理区域,但不具备读取功能。

<?php
add_action( \'init\', \'wpse43054_maybe_redirect\' );
function wpse43054_maybe_redirect() 
{
    if( is_admin() && ! current_user_can( \'read\' ) )
    {
        wp_redirect( home_url(), 302 );
        exit();
    }
}
您可能还想为具有read 能力。你可以通过get_user_metadata 并劫持用户元值的检查show_admin_bar_front.

<?php
add_filter( \'get_user_metadata\', \'wpse43054_hijack_admin_bar\', 10, 3 );
function wpse43054_hijack_admin_bar( $null, $user_id, $key )
{
    if( \'show_admin_bar_front\' != $key ) return null;
    if( ! current_user_can( \'read\' ) ) return 0;
    return null;
}
所有这些as a plugin.

结束

相关推荐

通过PHPMyAdmin将带有自定义元数据的WordPress帖子导入为CSV文件

我一直在通过CSV导入器插件将带有自定义元数据的数据记录作为帖子直接导入Wordpress。它工作正常,但也有一些问题。问题:1) 导入大量的记录需要无数个小时(我花了几十个小时导入了大约5000条记录,还有大约150000条记录要去)。2) 该插件不再受支持,所以我不知道它的稳定性。我希望能找到一种方法,将这些csv格式的记录直接导入phpmyadmin。以下是帖子包含的内容。。。Post titlePost contentplus大约8个自定义字段(我通过一些脚本使其可见,这些脚本添加到我的主题的si