在帖子摘要页面中设置特定于角色的屏幕选项

时间:2015-04-17 作者:Janith Chinthana

我需要设置不同的屏幕选项(标题、作者、类别…)在非管理员用户的帖子摘要页面中(编辑、作者…)用户不能自行更改。

示例:enter image description here

这是管理员视图,我需要隐藏View Count &;SEO 非管理员用户的列。

有没有人有什么想法,如何做到这一点?

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

我想,你需要像编辑看不到分类列之类的东西。

此代码段可能会帮助您:

/** Remove "Options"-Panel, when User is not admin **/
add_filter( \'manage_posts_columns\', \'change_columns_for_user\', 10, 2 );
function change_columns_for_user( $columns, $post_type ){
    if( \'post\' != $post_type )
        return $columns;

    if( current_user_can( \'manage_options\' ) )
        return $columns;
    else{
        //Remove Categories
        unset( $columns[\'categories\'] );
        //Remove Tags
        unset( $columns[\'tags\'] );
        //Remove Comments
        unset( $columns[\'comments\'] );
        return $columns;
    }

}
在这段代码中,如果用户无法管理选项,我们将取消设置一些列。您知道顶部的选项面板:在这种情况下,它们甚至不再显示在此面板中。

但它应该不能从特定的用户登录更改。

如果仍要为某些用户禁用“选项”面板,请查看以下代码段:

/** Remove "Options"-Panel, when User is not admin **/
add_filter( \'screen_options_show_screen\', \'remove_screen_settings\', 10, 2 );
function remove_screen_settings( $show_screen, $class ){
    if( \'edit-post\' != $class->id )
        return $show_screen;

    if( ! current_user_can( \'manage_options\' ) )
        return false;
    else
        return true;
}

SO网友:TheDeadMedic

您可以使用capabilities API 要有条件地设置屏幕选项,请执行以下操作:

if ( current_user_can( \'manage_options\' ) ) {
    // Administrator, add some options
} else {
    // Other roles, do something different
}

SO网友:Janith Chinthana

根据我的问题,我已经接受了@websupporter的答案。

然而,我想为我之前遇到的具体问题添加一些代码。

我需要删除Yoast SEO 插入非管理员用户的额外列。在这种情况下Yoast SEO 提供挂钩以禁用列。所以我使用它如下。

/** Remove SEO columns when User is not admin**/
function remove_page_analysis_for_non_admin(){
    if( current_user_can( \'manage_options\' ) )
        return true;
    else{
        return false;
    }
}
add_filter( \'wpseo_use_page_analysis\', \'remove_page_analysis_for_non_admin\', 10, 2 );
如果有人想为所有用户删除它,请使用以下代码

add_filter( \'wpseo_use_page_analysis\', \'__return_false\' );

结束