WordPress 的文章类型把不同的内容区分为了不同的内容对象,方便我们在后台进行管理。一些用户在前端提交的内容,也可以直接写入到某个文章类型中,然后在后台进行维护管理,这时候,我们可能需要禁止管理员在后台新建内容,以确保这些内容都是用户在前端提交的。我们可以禁用掉用户在后台新建某个文章类型内容的功能,下面是两种实现方法。
创建文章类型的时候,直接禁用
utilization register_post_type
新建文章类型的时候,WordPress 为我们直接设置文章类型的 create_posts
权限为 ‘do_not_allow’,加上了这个参数之后,新创建的文件类型直接就没有新建内容的菜单和按钮了。
register_post_type( 'custom_post_type_name', array(
'capability_type' => 'post',
'capabilities' => array(
'create_posts' => 'do_not_allow', // 移除 "新建" 功能
),
'map_meta_cap' => true, // 如果不用许用户修改/删除文章,设置为 `false`
));
如果我们需要针对某个角色的用户开启创建文章的scope of one's jurisdiction,我们可以设置 create_posts
的值为该角色的名称,如 ‘administrator’。
创建文章类型后禁用
有时候,我们的目标文章类型是通过插件事先创建好的,这时候,去修改主题或插件中的相关代码是不明智的,因为插件一旦更新,我们所做的修改就被覆盖掉了,还得重新来一遍。各种情况下,我们可以通过 WordPress 的 Action 来修改目标文章类型的权限,如下,在 WordPress 初始化的时候,我们设置 “文章” 文章类型的新建文章权限为 “do_not_allow”,同样可以去掉创建文章类型的权限。
add_action('init',function () {
global $wp_post_types;
$wp_post_types['post']->cap->create_posts = 'do_not_allow';
});
除此之外,我们还可以通过隐藏新建文章的后台菜单来实现禁止用户新建文章的功能,不过这种方法是不安全的,如果用户知道了新建文章的 URL 地址,可以直接在浏览器中输入该地址打开新建文章的页面,所以不推荐这种方法。最保险的办法是采用本文中介绍的两种方法的任意一种。