add_cap () добавил возможность, но все еще не может выполнить действие - пользовательские возможности Wordpress - PullRequest
0 голосов
/ 08 января 2020

Я делаю пользовательский тип поста 'project'. Я добавил две роли пользователя «Сотрудник» и «Менеджер проекта». Я хочу, чтобы менеджер проекта создал любой проект и назначил его сотруднику. Я использовал WordPress личное сообщение для этой задачи. Я создал новый проект в личном кабинете менеджера проектов как личное сообщение. По умолчанию я не добавил возможность доступа к личному сообщению в роли сотрудника. В опции редактирования проекта у меня есть мета-поле, в которое я добавил имя пользователя сотрудника, который должен быть назначен. Проблема в том, что я могу добавить возможность в профиль сотрудника, но сотрудник все еще не может получить доступ к личным сообщениям. Пожалуйста помоги. Любой другой сценарий для решения этой проблемы также будет приемлемым.

Код для настройки Возможности сотрудника

$dasay=get_user_by('login',"dasay");
$user = new WP_User($dasay);
$user->add_cap( 'see_private_project' );
$user->add_cap( 'see_private_projects' );
$user->add_cap('edit_private_projects');
$user->add_cap( 'edit_private_project' );
$user->add_cap( 'edit_others_post' );
$user->add_cap( 'edit_others_posts' );

Код для установки пользовательских ролей


function acropolis_add_roles() {
    add_role( 'employee', 'Employee', array(
 ) );
    add_role( 'project_manager', 'Project Manager', array(
) );
}
register_activation_hook(__FILE__, 'acropolis_add_roles' );


Код для настройки проекта тип записи


function acropolis_project_post_type(){

    // define an array of labels
    $post_type_labels = array(
        'name'                  => __( 'Projects' ),
        'singular_name'         => __( 'Project' ),
        'add_new_item'          => __( 'Add New Project' ),
        'edit_item'             => __( 'Edit Project' ),
        'new_item'              => __( 'New Project' ),
        'view_item'             => __( 'View Project' ),
        'view_items'            => __( 'View Projects' ),
        'not_found'             => __( 'No Projects found' ),
        'not_found_in_trash'    => __( 'No Projects found in Thrash' ),
        'all_items'             => __( 'All Projects' ),
        'archives'              => __( 'Project Archives' ),
        'insert_into_item'      => __( 'Insert into Project' ),
        'uploaded_to_this_item' => __( 'Uploaded to this Project' )
        );

    // define an array of arguments
    $post_type_args = array(
        'labels' => $post_type_labels,
        'public' => true,
        'menu_position' => 5,
        'menu_icon' => 'dashicons-media-document',
                'capability_type' => array('project','projects'),
    'map_meta_cap' => true,
        'hierarchical' => false,
        'supports' => array( 'title', 'editor', 'author', 'excerpt', 'custom-fields', 'comments' ),
        'has_archive' => true,
        );

    register_post_type( 'project', $post_type_args );

}
add_action( 'init', 'acropolis_project_post_type' );


Код для добавления возможностей в роли

    $employee = get_role( 'employee' );


    $employee->add_cap( 'read_project' );
    $employee->add_cap( 'edit_project' );
    $employee->add_cap( 'edit_projects' );
...