要在 WordPress 中强制作者(Author)角色发布的文章需要经过审核,你可以通过以下几种方式实现:
方法一:使用 wp_insert_post_data
过滤器
将以下代码添加到主题的 functions.php
文件或自定义插件中:
function force_author_posts_to_pending($data, $postarr) { if (current_user_can('author')) { $data['post_status'] = 'pending'; } return $data; } add_filter('wp_insert_post_data', 'force_author_posts_to_pending', 99, 2);
方法二:使用 user_has_cap
过滤器(更彻底)
这个方法会完全移除作者直接发布文章的能力:
function disable_author_publish_capability($allcaps, $caps, $args, $user) { // 检查是否是作者角色 if (in_array('author', $user->roles)) { // 移除发布权限 $allcaps['publish_posts'] = false; } return $allcaps; } add_filter('user_has_cap', 'disable_author_publish_capability', 10, 4);
方法三:结合两种方法(推荐)
// 移除作者的直接发布权限 function disable_author_publish_capability($allcaps, $caps, $args, $user) { if (in_array('author', $user->roles)) { $allcaps['publish_posts'] = false; } return $allcaps; } add_filter('user_has_cap', 'disable_author_publish_capability', 10, 4); // 确保编辑文章时也不会意外发布 function force_author_edits_to_pending($data, $postarr) { // 只对新文章和作者角色生效 if (current_user_can('author') && !$postarr['ID']) { $data['post_status'] = 'pending'; } return $data; } add_filter('wp_insert_post_data', 'force_author_edits_to_pending', 99, 2);
注意事项
- 这些代码应该添加到子主题的
functions.php
文件或自定义插件中,以避免主题更新时丢失 - 方法二和方法三的组合是最彻底的解决方案
- 如果你想对其他自定义角色应用相同规则,只需修改角色检查部分
- 这些修改不会影响管理员和编辑角色的权限
0 个评论