多亏了Chris的建议,我在飞行中分配了一个功能,我才能够让一些东西工作起来,可能会帮助其他人。也许有更好的方法,但这个方法对我的情况很有效。
因为我正在使用自定义的帖子类型listing
我需要分配映射的功能publish_listings
提交给用户,但仅在他们获得批准后。我能想到的最好的方法是在自定义帖子屏幕上包含一个只有管理员才能看到的“管理员专用”元框。这是在WPAlchemy
而且是output_filter
.
对于现在只有管理员才能看到的元盒,我添加了一个简单的复选框。选中此选项并更新帖子后,会添加publish_listings
当前帖子作者的能力。作为一种目录网站,在我的情况下,我只允许每个作者发表一篇文章,所以这很有效。如果未选中并更新,则会删除该功能。因此,用例如下所示:
用户提交帖子供审批,管理员审核帖子,勾选复选框,并首次发布帖子,用户现在可以随意更新帖子,包括将其制作成草稿并再次发布正如我所提到的,我正在使用WPAlchemy来提升代谢酶,所以我能够利用save_filter
更新帖子时添加功能。
function save_admin_only( $meta, $post_id ) {
global $post;
//get the author ID of the post we\'re on
$author_id = $post->post_author;
$id = get_the_author_meta( \'ID\' , $author_id );
$user = new WP_User( $id ); //retrieves the user, based on their ID specified above for user with WP_User class
if($meta[\'_can_publish\'] == \'yes\') {
$user->add_cap( \'publish_listings\' ); //assign capability to this user if checkbox is ticked
}
else { $user->remove_cap( \'publish_listings\' ); } //otherwise remove the capability so they can not publish
return $meta;
}
如果需要检查自定义帖子类型(假设您有多个帖子类型),可以使用以下内容将其包装:
if ( \'other_post_type\' == get_post_type() ) {
...
}
这看起来对其他不想创建全新角色的场景非常有用,只是为了给用户一些功能。如果有人能在以上方面有所改进,那么请这样做。