阻止作者查看彼此的帖子

时间:2011-04-08 作者:Chuck

我正在建立一个站点,其中将有多个用户作为作者,所有者不希望作者能够查看彼此的帖子,因为有些元字段包含他不希望在作者之间共享的信息。

有没有办法取消查看其他作者帖子的功能?

谢谢Chuck

要澄清一点,这是针对管理方面的,在帖子的顶部下方,有我的、所有的和发布的链接。我只想让作者看到“我的”。

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

如果要阻止具有“作者”角色的用户在概览屏幕中查看其他用户的帖子(他们无论如何都无法查看详细信息),可以在作者上添加额外的筛选器:

add_action( \'load-edit.php\', \'wpse14230_load_edit\' );
function wpse14230_load_edit()
{
    add_action( \'request\', \'wpse14230_request\' );
}

function wpse14230_request( $query_vars )
{
    if ( ! current_user_can( $GLOBALS[\'post_type_object\']->cap->edit_others_posts ) ) {
        $query_vars[\'author\'] = get_current_user_id();
    }
    return $query_vars;
}
post表上方的小链接(“我的”、“所有”、“草稿”)现在不太有用,您也可以删除它们:

add_filter( \'views_edit-post\', \'wpse14230_views_edit_post\' );
function wpse14230_views_edit_post( $views )
{
    return array();
}

SO网友:Wyck

这正是默认的“作者”角色所做的。http://codex.wordpress.org/Roles_and_Capabilities

SO网友:kaiser

只需检查功能(请参阅@Wyck的链接)(&;将作者ID放入模板中,并将您不希望其他人看到的内容放入if/else检查中:

// Get the author of this post:
$post_author = get_query_var(\'author_name\') ? get_user_by( \'slug\', get_query_var(\'author_name\') ) : get_userdata( get_query_var(\'author\') );

// Get data from current user:
global $current_user;
get_currentuserinfo();
// Get the display_name from current user - maybe you have to exchange it with $current_user->user_login
$current_author = $current_user->display_name;

// Check the capability and if the currently logged in user is the the post author
if ( current_user_can(\'some_capability\') && $post_author == $current_author )
{
    // Post Meta
    $post_meta = get_post_meta( $GLOBALS[\'post\']->ID );
    // DO OR DISPLAY STUFF HERE
}

SO网友:Armando Duran

我今天不得不做这样的事情,这就是我找到这篇文章的原因。我发现对我有用的是这篇题为:How to Limit Authors to their Own Posts in WordPress Admin“WP初学者

下面是可以粘贴到函数上的代码。php:

function posts_for_current_author($query) {
    global $pagenow;

    if( \'edit.php\' != $pagenow || !$query->is_admin )
        return $query;

    if( !current_user_can( \'edit_others_posts\' ) ) {
        global $user_ID;
        $query->set(\'author\', $user_ID );
    }
    return $query;
}
add_filter(\'pre_get_posts\', \'posts_for_current_author\');

SO网友:Paul

查看此处以获得更完整的解决方案(还可以修复过滤器栏上的post计数):Help to condense/optimize some working code

结束