我试图实现的功能是一个用户角色,允许用户提交编辑草稿,但不发布编辑。他们的编辑必须由编辑或更高角色的用户发布。
我已经在这个堆栈交换中搜索了一些,但没有找到任何满足我需要的解决方案。我宁愿避免使用插件,并将此功能直接构建到我的函数中。php文件。
我在一个非实时的沙盒环境中工作,所以在测试不同的解决方案时,我不担心破坏任何东西。到目前为止,我的情况是:
$role_object = get_role( \'contributor\' );
$role_object->add_cap( \'edit_pages\' );
$role_object->add_cap( \'edit_others_pages\' );
$role_object->add_cap( \'edit_published_pages\' );
$role_object->add_cap( \'upload_files\' );
$role_object->remove_cap( \'publish_posts\' );
$role_object->remove_cap( \'publish_pages\' );
add_filter(\'wp_insert_post_data\',\'re_aprove\');
function re_aprove($data , $postarr){
global $current_user;
get_currentuserinfo();
//check if current user is not admin
if (!current_user_can(\'manage_options\')){
if ($data[\'post_status\'] == "publish"){
$data[\'post_status\'] = "pending";
}
}
return $data;
}
第二个函数是在这里找到的,但我怀疑它可能是一个弃用的解决方案,因为它似乎对我来说工作不正常,我在2010年找到了一篇包含它的帖子。
这一解决方案不起作用的方式让我挠头。作为一个贡献者,我可以进入任何页面的编辑页面,但是我会看到一个“更新”按钮,而不是一个“提交以供审阅”按钮。按下“更新”按钮后,编辑页面将刷新并显示“提交以供审阅”按钮,页面仪表板页面将更新页面显示为“待定”到目前为止,大部分情况都很好。问题是页面现在的前端是404。”更新“它作为一个贡献者”已经取消了页面的发布,这不是我想要的。
非常感谢您的任何想法、建议或解决方案。我认为这个功能对很多人来说都是非常理想的。
谢谢你的时间。
SO网友:WebElaine
这实际上取决于您是否要将这些新角色限制为特定的职位类型。如果您搜索“工作流插件”,您可以找到几个现成的解决方案。有些只允许新角色编辑页面,有些允许他们编辑任何帖子类型。
我建立了一个网站,需要的用户只能影响特定的CPT。例如,我们有CPT1的“编辑”,他们只能“提交审查”,然后是CPT1的“批准人”,他们可以编辑和发布。我们还有CPT2的“编辑”和CPT2的“批准人”,等等,所以人们只能对分配的CPT进行更改。
第一步是使用map_meta_cap
注册CPT时,会为每个CPT创建一组全新的权限。第二步更复杂,有点粗糙。首先,我在admin中添加了一个noscript标记,这样关闭了JS的任何人都无法四处走动,编辑或发布内容。我删除了快速编辑,并禁用了自动保存,所以更新CPT的唯一方法是在启用JS的情况下进入完整的编辑器屏幕。
从那里,我迷上了admin_footer-post.php
并检查权限。如果当前用户无法发布或编辑他们当前正在编辑的特定CPT,我使用jQuery将“发布”按钮更改为“保存更改”,并将表单操作更改为我自己的插件URL。该插件获取所有帖子数据,并以编程方式插入一篇具有自定义状态的新帖子,然后向该CPT的“审批者”发送一封电子邮件,其中包含如何审查的说明-它会将他们带到版本比较屏幕。
我不喜欢它依赖于JS,也不喜欢覆盖核心发布功能,但到目前为止,除了另一个插件基本上做同样的事情之外,这是我发现的处理多个自定义工作流的唯一方法。