Я пытаюсь ограничить функциональность «добавления нового» для моего пользовательского типа («резиденты») для любого пользователя ниже, чем редактор.Однако я бы хотел, чтобы моя пользовательская роль (так же называемая «резидент») могла редактировать существующие (и будущие) CPT
. Я отказался от этого предложения: https://stackoverflow.com/a/3248103/3239470, и оно делаетдействительно работает, но он стирает «добавление нового» для всех, включая администраторов / редакторов, которые мне все еще нужны.
Я попытался добавить возможность create_posts / create_residents для администраторов / редакторов, но этопохоже, не принимает или не отменяет возможности, установленные в зарегистрированном CPT.
Я также делаю это в рамках настройки мультисайта, если это будет полезно знать.
Я бы предпочел не удалять его через CSS, но на самом деле отключить прямую ссылку, должен ли кто-то печатать URL, но я начинаю думать, что это мой единственный вариант?Любое направление или совет приветствуется.
/* Register 'Resident' role */
function add_resident_role() {
add_role('resident',
'Resident',
array(
'read' => true,
'edit_posts' => false,
'delete_posts' => false,
'publish_posts' => false,
'upload_files' => false,
)
);
}
register_activation_hook( __FILE__, 'add_resident_role' );
function residents_post_type() {
// Labels
$labels = array(
'name' => _x('Residents', 'post type general name'),
'singular_name' => _x('Resident', 'post type singular name'),
'menu_name' => 'Residents',
'add_new' => _x('Add New', 'residents item'),
'add_new_item' => __('Add New Resident'),
'edit_item' => __('Edit Resident'),
'new_item' => __('New Resident'),
'view_item' => __('View Resident'),
'search_items' => __('Search Residents'),
'not_found' => __('No Residents Found'),
'not_found_in_trash' => __('No Residents Found in Trash'),
'parent_item_colon' => ''
);
// Register post type
register_post_type('residents' , array(
'labels' => $labels,
'public' => true,
'has_archive' => true,
'show_in_nav_menus' => true,
'menu_icon' => 'dashicons-id-alt',
'supports' => array('title', 'thumbnail', 'author'),
'show_in_rest' => true,
'exclude_from_search' => true,
'publicly_queryable' => false,
'capability_type' => array('resident','residents'),
'map_meta_cap' => true,
) );
}
add_action( 'init', 'residents_post_type', 0 );
/* Assign Capabilities back to editor and admin parties */
add_action('admin_init','add_regular_role_caps',999);
function add_regular_role_caps() {
// Add the roles you'd like to administer the custom post types
$roles = array('editor','administrator');
// 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_residents');
$role->add_cap( 'read_private_residents' );
$role->add_cap( 'edit_resident' );
$role->add_cap( 'edit_residents' );
$role->add_cap( 'edit_others_residents' );
$role->add_cap( 'edit_published_residents' );
$role->add_cap( 'publish_residents' );
$role->add_cap( 'delete_others_residents' );
$role->add_cap( 'delete_private_residents' );
$role->add_cap( 'delete_published_residents' );
}
}
/* Assign Capabilities to resident */
add_action('admin_init','add_resident_role_caps',999);
function add_resident_role_caps() {
// Add the roles you'd like to administer the custom post types
$roles = array('resident');
// 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_residents');
$role->add_cap( 'read_resident' );
$role->add_cap( 'edit_resident' );
$role->add_cap( 'edit_residents' );
$role->add_cap( 'publish_residents' );
$role->remove_cap( 'create_residents' );
}
}