在Wordpress仪表板中,如何仅在特定帖子类别中进行特定用户角色的发布?

时间:2018-10-22 07:14:59

标签: php wordpress

我创建了一个自定义帖子类型和自定义分类法,为简单起见,将其称为cpt-category。我为此cpt提供了3种cpt类别。

现在,我在仪表板上有一些自定义用户角色-但我不需要,我可以使用“用户角色编辑器”为订户角色创建自定义功能。

但是我需要确保订户只能在三个以下的一个特定的 cpt类别中创建新的cpt。这样,如果订户创建新的cpt,则会自动设置cpt类别。

另一方面,管理员应该能够从所有三个cpt类别中进行选择。

有wp功能吗?

预先感谢您:)

1 个答案:

答案 0 :(得分:1)

默认情况下,订阅者角色无法编辑或创建帖子。就是说,没有办法限制具有edit_posts功能的人可以访问的类别。

解决此问题的最简单方法是在前端创建一个表单,该表单使用admin-post.php钩子发送回admin_post(对于已登录的用户),然后执行该钩子函数内的逻辑。

一些基本的东西可能看起来像这样:

function create_cpt_post_subscriber() {
    if (!current_user_can('edit_post')) {
        return false;
    }

    /* do stuff */
}
add_action('admin_post_action_name', 'create_cpt_post_subscriber');

然后,您将在该函数中使用wp_insert_post,使用发送到$_POST的{​​{1}}参数来创建新帖子。在该挂钩中,您还可以完全访问$ _POST。

使用AJAX将阻止您的订阅者直接发送到“ admin-post.php”页面,因此,我建议使用AJAX提交表单。

使用admin_post,您可以编程要使用的确切类别ID。但是,如果该类别ID发生了更改,则除非您使用wp_insert_post通过Slug(建议)检索它,否则您还必须在代码中对其进行更新。

您可以了解有关get_term in the WordPress Codex的更多信息,并且有一个使用SitePoint上的wp_insert_post钩子的表单教程。