管理员无法删除自定义帖子类型

时间:2016-02-02 03:50:25

标签: php wordpress

我一直在我的头撞在这一面墙上。

WordPress 4.4.1 | Divi 2.4.6.4(带儿童主题)|使用Members插件1.1.1

我尝试使用(Divi)主题更改自定义帖子类型的capabilities_type。我已将其更改为默认值,因此我可以继续拒绝用户编辑帖子,同时授予他们编辑自定义帖子类型的权限。

Members插件管理角色权限。在我添加任何代码之前,我允许用户访问自定义帖子类型的唯一方法是,我必须授予他们以下权限:帖子以及CPT,这太过分了。此时,在成员插件中,我的CPT(项目)没有标签。

Members plugin before first block of code

在我添加初始代码(将作者添加到项目更改capability_type)后,"项目" tab出现在Members插件中。

Members plugin after first block of code

我还通过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;
}

我希望我已经提供了足够的信息并且避免让它太混乱。我觉得我很亲密。

0 个答案:

没有答案