2017-08-24 111 views
1

我已經創建了自定義帖子類型和用戶角色。功能爲新用戶角色分配功能。當我轉到edit.php?post_type = cv頁面(用admin用戶)時,我看到其他用戶的cv帖子,但我無法編輯它們。我已經分配了'edit_others_cvs'功能......所以我不明白爲什麼我不能編輯用戶帖子。你可以幫我嗎 ?管理員無法編輯其他用戶自定義帖子類型

function cv_custom_posttype() { 

$labels = array(
    'not_found'   => 'cv not found' 
); 

$args = array(
    'labels'    => $labels, 
    'public'    => true, 
    'publicly_queryable' => true, 
    'query_var'    => true, 
    'show_ui'    => true, 
    'show_in_menu'   => true, 
    'hierarchical'   => false, 
    'menu_position'   => 5, 
    'register_meta_box_cb' => 'add_cv_metaboxes', 
    'supports'    => false, 
    'has_archive'   => false, 
    'capability_type'  => array("cv", "cvs"), 
    'map_meta_cap'   => true 
); 
register_post_type('cv', $args); 

function add_cv_user_role() { 
add_role('cv_member', 
      'cv member', 
      array(
       'read' => true, 
       'edit_posts' => false, 
       'delete_posts' => false, 
       'publish_posts' => false 
      ) 
     ); 
} 
register_activation_hook(__FILE__, 'add_cv_user_role'); 

function cv_add_role_caps() { 

     // Add the roles you'd like to administer the custom post types 
     $roles = array('administrator', 'cv_member'); 

     // Loop through each role and assign capabilities 
     foreach($roles as $the_role) { 

      $role = get_role($the_role); 

       $role->add_cap('read'); 
       $role->add_cap('read_cv'); 
       $role->add_cap('edit_cv'); 
       $role->add_cap('edit_cvs'); 
       $role->add_cap('edit_published_cvs'); 
       $role->add_cap('publish_cvs'); 
       $role->add_cap('delete_published_cvs'); 

       if($role == 'administrator') { 
        $role->add_cap('read_private_cvs'); 
        $role->add_cap('edit_others_cvs'); 
        $role->add_cap('delete_others_cvs'); 
        $role->add_cap('delete_private_cvs'); 
       } 

     } 
    } 
add_action('admin_init','cv_add_role_caps'); 

回答

0

get_role()函數返回一個WP_Role對象,所以你需要的是來比較對象,而不是對象本身的name財產。否則,$role == 'administrator'條件永遠不會成立。

function cv_add_role_caps() { 
    // Add the roles you'd like to administer the custom post types. 
    $roles = array('administrator', 'cv_member'); 

    // Loop through each role and assign capabilities. 
    foreach ($roles as $the_role) { 
     $role = get_role($the_role); 

     $role->add_cap('read'); 
     $role->add_cap('read_cv'); 
     $role->add_cap('edit_cv'); 
     $role->add_cap('edit_cvs'); 
     $role->add_cap('edit_published_cvs'); 
     $role->add_cap('publish_cvs'); 
     $role->add_cap('delete_published_cvs'); 

     if ('administrator' === $role->name) { // Accessing to the object's 'name' property. 
      $role->add_cap('read_private_cvs'); 
      $role->add_cap('edit_others_cvs'); 
      $role->add_cap('delete_others_cvs'); 
      $role->add_cap('delete_private_cvs'); 
     } 
    } 
} 
相關問題