您没有说明如何保存编辑器->贡献者关联,我假设您将其存储在带有键的用户元字段中\'assigned_contrib\'
其中保存参与者用户id的数组。
首先,使用pre_get_posts
挂钩:
add_action(\'pre_get_posts\', \'hide_posts_to_editors\');
function hide_posts_to_editors( $query ) {
if ( is_admin() && ! current_user_can(\'administrator\') ) {
$self = wp_get_current_user();
$assigned_contributors = (array) get_user_meta($self->ID, \'assigned_contrib\', true);
$authors = array_merge($self->ID, $assigned_contributors);
$query->set( \'author\', implode(\',\', $authors) );
}
}
这样,编辑只能在自己写的管理帖子和指定编辑写的帖子中看到。
但这并不能阻止知道帖子id的编辑通过在地址栏中手动插入id来编辑帖子。。。您可以使用load_{$page}
action hook 对于范围,在这种情况下(\'load-post.php\'
)
add_action(\'load-post.php\', \'no_editors_edit\', 1);
function no_editors_edit() {
if ( current_user_can(\'administrator\') ) return;
$post = isset($_GET[\'post\']) && ! empty($_GET[\'post\']) ? $_GET[\'post\'] : false;
if ( ! $post ) return;
$author = get_post_field(\'post_author\', $post);
$self = wp_get_current_user();
$assigned_contributors = (array) get_user_meta($self->ID, \'assigned_contrib\', true);
if ( ( $author != $self->ID ) && ! in_array($author, $assigned_contributors) ) {
wp_redirect( add_query_arg( array(\'edit_not_allowed\'=>1), admin_url() ) );
exit();
}
}
如果发生这种情况,请添加通知。。。
add_action(\'admin_notices\', \'no_editors_edit_notice\');
no_editors_edit_notice() {
if ( isset($_GET[\'edit_not_allowed\'] && $_GET[\'edit_not_allowed\'] == 1) ) {
printf(\'<div class="error"><p>%s</p></div>\', __(\'You are allowed to edit only your posts and the ones by contributors assigned to you.\', \'your_text_domain\'));
}
}