用户限制仅显示分配给当前用户的帖子

时间:2016-08-10 作者:Dionoh

我必须建立一个网站,我必须分配职位给用户。

希望我已经做到了:

1: 仅启用“读取”的新用户角色

但我似乎不知道如何将某个帖子分配给特定的用户/用户角色。因此,当他们登录时,他们将只看到分配给他们的帖子,而不是看到所有帖子,当他们单击它时,他们会收到这样的消息:“对不起,你必须是用户***才能看到这篇帖子。”

有人知道怎么做吗?

2 个回复
SO网友:Jean-philippe Emond

你搜索的肯定是Members plugin.

它允许您创建一个自定义角色,如果您需要,您可以将您的站点及其提要完全私有,或者只发布一篇或两篇帖子。就像你想要的一样。

或者手动添加新角色:

function add_role() {
    add_role( \'private_user\', "private user",array(
        \'is_able_to_read_private_page\'=> true,
        \'read\'=> true
    ) );
}
add_action(\'init\',\'add_role\');
并创建一个自定义页面,并使用如下内容:(这是一个示例)

 <?php /*Template Name: Private page Template*/
 get_header();
 if(current_user_can( "is_able_to_read_private_page")):
    if( have_posts() ):
       while( have_posts() ):
           the_post();
        endwhile;
    endif;
 else:
     echo "Access Denied";
 endif;
 get_footer();?>

SO网友:bynicolas

我曾经做过类似的事情。

我需要为特定客户附加一个或多个CPT。

我制作了一个可搜索的选择框,其中包含CPT编辑屏幕中的所有用户,仅对管理员可用。

管理员将创建帖子,保存它,然后将帖子的作者更改为所需的客户用户名。

我之所以选择走这条路是因为cannot 分配给用户,除非该用户是author. 您还可以尝试向您的帖子类型添加一个元框,该元框将包含您的帖子要按元键过滤的授权用户。但是通过使用此方法,您可以轻松地使用主查询进行筛选。这只是一个改变你帖子所有权的问题。我想这一切都取决于你项目的性质。

然后我有了一个脚本,可以过滤类似这样的帖子。

请注意,此代码是一个总体概念。根据我的记忆写作。

add_action( \'pre_get_posts\', \'wpse_show_user_posts\');
function wpse_show_user_posts( $query ){

  // Don\'t filter if user is an administrator
  if ( current_user_can( \'list_users\' ) )
    return;

  // Get all posts which our current user is an author for
  if( is_user_logged_in() && $query->is_main_query() ){

    $current_user = wp_get_current_user();

    $query->set( \'author\', $current_user->ID );

  }

  // Hide all posts otherwise
  if( $query->is_main_query() ) {

    $query->set( \'category__not_in\', \'1\' ); // Use the id of the retricted category

  }

  return $query;

}
当然,您可能希望使用具有适当功能的自定义角色,以便更好地控制用户的操作。要知道,任何用户都可以是帖子作者,但帖子编辑屏幕上的默认作者元框选择字段将只返回至少contributor 角色(还具有delete\\u posts功能)。因此,我创建了一个自定义选择框,从自定义角色返回用户。

您也可能只将受限内容返回给登录用户。

add_filter( \'the_content\', \'logged_in_only\' );
function logged_in_only( $content ){
  $categories = get_the_category();
  $cat_not_in = \'some-cat\';
  $include_post =  true;

  foreach( $categories as $category ){
    if( $category->slug == $cat_not_in )
      $include_post = false;
  }

  if( is_user_logged_in() || $include_post ) {
    return $content;
  }

  return \'You need to log in <a href="\' . home_url( \'wp-login.php\') . \'">Here</a>\';
}
您需要创建restricted 分类并将您希望控制的帖子分配给该类别,以便将这些帖子正确筛选给未登录的用户。

相关推荐