向特定用户角色显示特定类别的帖子

时间:2019-02-02 作者:sahiba25

我在一个学校的网站上工作,老师们都想把他们学生的作业发布到网上,但这只是为了让每个学生都能看到他们老师发布的自己班级的作业。

我想做的基本上是:

获取用户角色,如果用户角色=角色1,按类别1显示帖子,隐藏所有其他帖子,如果用户角色=角色2,按类别2显示帖子,隐藏所有其他帖子,等等,对于22个不同的用户角色,所有这些用户角色都是订阅者级别,我只是用这种方式将它们分解,因为这是将它们划分为类别的最简单方法。

理想情况下,我希望有一个博客页面,其中显示站点所有帖子的提要,并且您只能在该提要中看到适合您的内容。其他一切都隐藏起来了。

我还想限制每个作者只使用我分配给他们的类别,而不是从所有可用类别中进行选择。

有什么想法吗?非常感谢您提供代码片段或插件建议。

2 个回复
SO网友:Bram

这个问题包括三个部分:获取当前用户数据、将其链接到类别以及检索和显示帖子。您可以在自定义页面模板中包含这些代码段,并将其分配给“我的家庭作业”页面。

在这三个子答案下面,我分享了一些关于如何使这更方便用户/用户可管理的其他建议。

获取用户数据使用wp_get_current_user. 这将产生WordPress User object, 您可以使用从中检索角色$current_user->roles (假设您已设置$current_user = wp_get_current_user();). 这将生成一个数组。我假设用户只有一个角色,因此该数组中的第一个元素就是我们要检查的元素。

将用户链接到类别可以使用if-elseif-声明如下。

$roles = $current_user->roles;

if ($roles[0] == \'role\'){
    $category_name = \'category-name\';
}elseif ($roles[0] == \'other-role\'){
    $category_name = \'other-category-name\';
}
您可以通过添加其他elseif-条款。代替role (和other-role) 由角色的鼻涕虫,以及category-nameother-category-name 按类别划分。

使用检索和显示帖子$category_name 在a的参数中WP_Query 将查询检索的结果限制为类别。

$qrt_args = array(
    \'category_name\' => $category_name
);

$posts = new WP_Query( $qry_args ); 
您现在可以使用$posts 以常规方式loop 并显示结果。

其他想法

虽然上面的代码应该可以运行(尚未测试),但它需要您编辑代码以进行调整。这可能不太方便,例如,如果您在某个时间点无法进行这些更改。

另一种选择是为每个学生创建帖子,然后将相关类别(或多个类别)分配给该帖子,并将作者设置为学生。这样,您可以在Wordpress仪表板中匹配学生和类别。此外,这还提供了更多的灵活性和稳健性,例如,将多个类别分配给同一个学生。(上面发布的代码假设只有一个类别。)当然,这也会显示你用来在有家庭作业问题的页面上设置匹配的帖子,但你可以利用它为你带来好处(“嘿,约翰,请在下面找到你的家庭作业问题”)。然而,也可以使用额外的类别或标记来防止这种情况发生。

另一个更好但更难实现的选项是创建一个新的usermeta字段,在其中保存用户应该能够看到的帖子类别。

请注意,这(尚未)为您的这部分问题提供解决方案:

我还想限制每个作者只使用我分配给他们的类别,而不是从所有可用类别中进行选择。

SO网友:Md. Ehsanul Haque Kanan

您可以尝试使用WP Private Content Plus 插件。它允许您将内容限制为特定用户角色或选定用户组。您只需要使用短代码。

对于多个用户角色,必须使用以下短代码:

[wppcp_private_content allowed_roles="subscriber,editor" ]
Private Content for Users with
Subscriber or Editor User Role
[/wppcp_private_content]

相关推荐

echo a tax term in loop

对于列表中的每个项目,我需要在之后在此循环中回显CPT的一个术语。感谢您的指导或帮助。原始代码来自Stackoverflow。com,因为它起作用了。 <?php $da_place = get_field(\'smart_place\'); //acf field $args = array( \'post_type\' => \'to_do_items\', \'tax_query\' => array