我一直在我的头撞在这一面墙上。
WordPress 4.4.1 | Divi 2.4.6.4(带儿童主题)|使用Members插件1.1.1
我尝试使用(Divi)主题更改自定义帖子类型的capabilities_type。我已将其更改为默认值,因此我可以继续拒绝用户编辑帖子,同时授予他们编辑自定义帖子类型的权限。
Members插件管理角色权限。在我添加任何代码之前,我允许用户访问自定义帖子类型的唯一方法是,我必须授予他们以下权限:帖子以及CPT,这太过分了。此时,在成员插件中,我的CPT(项目)没有标签。
在我添加初始代码(将作者添加到项目更改capability_type)后,"项目" tab出现在Members插件中。
我还通过Members插件添加了一些自定义功能,并授予了对admin的访问权限。
[我为成员插件添加了自定义功能(delete_others_submissions,delete_published_submissions,delete_submission,delete_submissions等)以及'提交' capabilities_type]
此时,作为管理员,我现在只具有CPT的查看和删除功能。
当我添加剩下的代码时,我可以编辑和查看,但不能删除CPT。我可以允许或拒绝其他用户访问,所以我现在大部分都在那里。但我无法删除任何帖子,即使是管理员。
我的代码是:
// Add Author to Projects change capability_type
add_filter( 'et_project_posttype_args', 'add_author_on_divi_projects' );
function add_author_on_divi_projects ($args) {
$args['supports'] = array( 'title', 'editor', 'thumbnail', 'excerpt', 'comments', 'revisions', 'custom-fields', 'author' );
$args['capability_type'] = array( 'submission', 'submissions' );
return $args;
}
// Customize Projects Custom Post Type
add_filter( 'et_project_posttype_args', 'qd_add_submission_caps', 1, 3);
function qd_add_submission_caps($data, $post_type) {
if($post_type == 'submission'){
$args = array(
'capabilities' => array(
'edit_post' => 'edit_submission',
'edit_posts' => 'edit_submissions',
'edit_others_posts' => 'edit_others_submissions',
'publish_posts' => 'publish_submissions',
'edit_published_posts' => 'edit_published_submissions'
),
'map_meta_cap' => true
);
$data = array_merge($data, $args);
}
return $data;
}
// Meta cap
add_filter( 'map_meta_cap', 'my_map_meta_cap', 10, 4 );
function my_map_meta_cap( $caps, $cap, $user_id, $args ) {
if ( 'edit_submission' == $cap || 'delete_submission' == $cap || 'read_submission' == $cap ) {
$post = get_post( $args[0] );
$post_type = get_post_type_object( $post->post_type );
$caps = array();
}
if ( 'edit_submission' == $cap ) {
if ( $user_id == $post->post_author )
$caps[] = $post_type->cap->edit_posts;
else
$caps[] = $post_type->cap->edit_others_posts;
}
elseif ( 'delete_submission' == $cap ) {
if ( $user_id == $post->post_author )
$caps[] = $post_type->cap->delete_posts;
else
$caps[] = $post_type->cap->delete_others_posts;
}
elseif ( 'read_submission' == $cap ) {
if ( 'private' != $post->post_status )
$caps[] = 'read';
elseif ( $user_id == $post->post_author )
$caps[] = 'read';
else
$caps[] = $post_type->cap->read_private_posts;
}
return $caps;
}
我希望我已经提供了足够的信息并且避免让它太混乱。我觉得我很亲密。