Вопрос или проблема
Я создал пользовательский тип записи ‘book’. Все записи этого типа общедоступны, поэтому я хочу удалить некоторые возможности, такие как ‘delete_private_books’, ‘read_private_books’ и т.д. Как я могу этого достичь, поскольку при активации плагина для участников он показывает все стандартные возможности, включая упомянутые выше, которые не имеют отношения к моему пользовательскому типу записи.
Я зарегистрировал свой тип записи book и добавил к нему возможности.
$labels = array(
'name' => _x( 'Books', 'post type general name' ),
'singular_name' => _x( 'Book', 'post type singular name' ),
'menu_name' => _x( 'Book', 'admin menu' ),
'name_admin_bar' => _x( 'Book', 'add new on admin bar' ),
'add_new' => _x( 'Add New', 'Book' ),
'add_new_item' => __( 'Add New Book' ),
'new_item' => __( 'New Books' ),
'edit_item' => __( 'Edit Books' ),
'view_item' => __( 'View Books' ),
'all_items' => __( 'Books' ),
'search_items' => __( 'Search Books' ),
'parent_item_colon' => __( 'Parent text:' ),
'not_found' => __( 'No Books found.' ),
'not_found_in_trash' => __( 'No Books found in Trash.' )
);
$capabilities = array(
'edit_post' => 'edit_books',
'read_post' => 'read_books',
'delete_post' => 'delete_books',
'edit_posts' => 'edit_books',
'edit_others_posts' => 'edit_others_books',
'publish_posts' => 'publish_books',
'read_private_posts' => 'read_private_books',
'create_posts' => 'edit_books',
'delete_posts' => 'delete_books',
'delete_private_posts' => 'delete_private_books',
'delete_published_posts' => 'delete_published_books',
'delete_others_posts' => 'delete_others_books',
'edit_private_posts' => 'edit_private_books',
'edit_published_posts' => 'edit_published_books',
);
$args = array(
'labels' => $labels,
'public' => true,
'publicly_queryable' => true,
'show_ui' => true,
'show_in_menu' => false,
'query_var' => true,
'rewrite' => array('slug' => 'books'),
'capability_type' => 'books',
'has_archive' => true,
'hierarchical' => false,
'menu_position' => '',
'supports' => false,
'map_meta_cap' => null,
'capabilities' => $capabilities,
);
register_post_type( 'wp-type-books', $args );
Зачем тогда вы настраиваете эти пользовательские возможности? Вы регистрируете свой CPT с пользовательскими возможностями, и первым делом я заметил, что вы все еще используете capability_type
'capability_type' => 'books',
если что, это следует исключить из массива или, по крайней мере, оставить пустую строку, если вы планируете использовать пользовательские возможности (это будет использоваться только как запасной вариант, если способности не установлены)
'capability_type' => '',
Что касается пользовательских возможностей… Убедитесь, что ваш плагин для участников правильно настроен. При использовании пользовательских возможностей вам нужно будет добавить их к определенным ролям пользователей, чтобы их поддерживать… так что если вы говорите, что плагин для участников автоматически это делает, это значит, что либо вы его неправильно настроили, либо не понимаете, как работают возможности и роли пользователей
Я настоятельно рекомендую вам прочитать, а затем перечитать документацию по пользовательским типам записей и возможностям:
https://codex.wordpress.org/Function_Reference/register_post_type#capabilities
Ответ или решение
Конечно, давайте разберёмся с вашим вопросом. Вы создали пользовательский тип записи "book" и хотите убрать некоторые возможности, такие как ‘delete_private_books’ и ‘read_private_books’, поскольку они не соответствуют задачам вашего проекта. Рассмотрим, как можно это реализовать, учитывая настройку вашего пользовательского типа записи и возможные конфликты с вашим плагином, предоставляющим управление ролями и возможностями пользователей.
Проблема
Проблема заключается в том, что ваш плагин для управления ролями автоматически добавляет дефолтные возможности к вашему пользовательскому типу записи. Это происходит из-за способа, которым эти возможности определены в вашем коде.
Решение
-
Изменение
capability_type
: Если вы хотите использовать настраиваемые возможности, вам следует убрать или очистить опцию ‘capability_type’. Это предотвратит использование стандартных возможностей, связанных с типами записей, и позволит вам полностью контролировать их через массивcapabilities
. -
Настройка массива
capabilities
:- Удалите все возможности, которые не нужны вашему проекту. Например, если вам не нужны возможности для работы с личными записями, удалите следующие строки из массива:
'read_private_posts' => 'read_private_books', 'delete_private_posts' => 'delete_private_books', 'edit_private_posts' => 'edit_private_books',
- Удалите все возможности, которые не нужны вашему проекту. Например, если вам не нужны возможности для работы с личными записями, удалите следующие строки из массива:
-
Настройка плагина для ролей и возможностей:
- Убедитесь, что ваш плагин настроен правильно, и удалите из него ненужные возможности для соответствующих ролей пользователей. Это можно сделать прямо в настройках плагина или посредством хуков в WordPress.
-
Проверка документации:
- Ознакомьтесь с документацией по кастомным типам записей и возможностям: ‘https://codex.wordpress.org/Function_Reference/register_post_type#capabilities’. Это поможет вам избежать распространённых ошибок и глубже понять, как работают пользовательские возможности.
Контекст и рекомендации
Данный подход позволит точно настроить функционал вашего пользовательского типа записи "book", убрав ненужные возможности и улучшив взаимодействие с вашим плагином для управления ролями. Внедрив эти изменения, вы создадите более гибкую и управляемую систему прав доступа.
Не забывайте, что управление возможностями требует внимания к деталям и понимания сути работы WordPress, особенно в вопросах взаимодействия различных плагинов и ваших пользовательских настроек.