Ограничение пользовательского типа записей только для роли администратора сайта

12 июн. 2012 г., 14:00:51
Просмотры: 15.7K
Голосов: 20

Как я могу убрать этот пользовательский тип записей из админки для всех пользователей, кроме администраторов?

/* Добавляем пользовательский тип записи "Websites" */
add_action( 'init', 'create_website_type' );
function create_website_type() {

    register_post_type( 'website',
        array(
            'labels' => array(
                'name' => __( 'Сайты' ),
                'singular_name' => __( 'Сайт' ),
                'add_new' => __( 'Добавить новый сайт' ),
                'add_new_item' => __( 'Добавить новый сайт' ),
                'edit' => __( 'Редактировать сайт' ),             
                'edit_item' => __( 'Редактировать сайт' ),                
                'new_item' => __( 'Добавить новый сайт' ),              
                'view' => __( 'Просмотреть сайт' ),         
                'view_item' => __( 'Просмотреть сайт' ),                    
                'search_items' => __( 'Искать сайты' ),  
                'not_found' => __( 'Сайты не найдены' ),
                'not_found_in_trash' => __( 'В корзине нет сайтов' ),                                         
            ),
            'description' => __('Сайты для отображения в разделе Ресурсы.'),
            'public' => true,
            'show_ui' => true,
            'publicly_queryable' => true,
            'exclude_from_search' => false,
            'menu_position' => 20,
            'supports' => array('title', 'editor'),
            'can_export' => true,
            'capability_type' => 'post',
            'capabilities' => array(
                'edit_post' => 'manage_options',
                'read_post' => 'manage_options',
                'delete_post' => 'manage_options',
                'edit_posts' => 'manage_options',
                'edit_others_posts' => 'manage_options',
                'publish_posts' => 'manage_options',
                'read_private_posts' => 'manage_options'
            ),
            'map_meta_cap' => true
        )
    ); 
    remove_post_type_support('website','editor'); 
}
0
Все ответы на вопрос 2
7
21

Функция register_post_type() принимает параметр capabilities в своих аргументах. Смотрите get_post_type_capabilities() для возможных значений. Из комментариев:

По умолчанию массив capabilities принимает семь ключей:

  • edit_post, read_post и delete_post — это мета-возможности, которые обычно преобразуются в соответствующие базовые возможности в зависимости от контекста (редактируемый/читаемый/удаляемый пост и проверяемый пользователь или роль). Таким образом, эти возможности обычно не предоставляются напрямую пользователям или ролям.

  • edit_posts — Определяет, можно ли редактировать записи этого типа.

  • edit_others_posts — Определяет, можно ли редактировать записи этого типа, принадлежащие другим пользователям. Если тип записи не поддерживает автора, это поведение будет аналогично edit_posts.
  • publish_posts — Определяет возможность публикации записей этого типа.
  • read_private_posts — Определяет, можно ли читать приватные записи.

Эти четыре базовые возможности проверяются в ядре в различных местах. Также есть семь других базовых возможностей, которые не используются напрямую в ядре, за исключением функции map_meta_cap(), которая преобразует три упомянутые мета-возможности в одну или несколько базовых возможностей, которые затем проверяются в зависимости от контекста.

  • read — Определяет, можно ли читать записи этого типа.
  • delete_posts — Определяет, можно ли удалять записи этого типа.
  • delete_private_posts — Определяет, можно ли удалять приватные записи.
  • delete_published_posts — Определяет, можно ли удалять опубликованные записи.
  • delete_others_posts — Определяет, можно ли удалять записи, принадлежащие другим пользователям. Если тип записи не поддерживает автора, это поведение будет аналогично delete_posts.
  • edit_private_posts — Определяет, можно ли редактировать приватные записи.
  • edit_published_posts — Определяет, можно ли редактировать опубликованные записи.

Эти дополнительные возможности используются только в map_meta_cap(). Таким образом, они назначаются по умолчанию только в том случае, если тип записи зарегистрирован с аргументом 'map_meta_cap', установленным в true (по умолчанию false).

В аргументах регистрации добавьте:

'capabilities' => array(
    'edit_post'          => 'update_core',
    'read_post'          => 'update_core',
    'delete_post'        => 'update_core',
    'edit_posts'         => 'update_core',
    'edit_others_posts'  => 'update_core',
    'delete_posts'       => 'update_core',
    'publish_posts'      => 'update_core',
    'read_private_posts' => 'update_core'
),
12 июн. 2012 г. 14:28:08
Комментарии

Как бы вы сделали то же самое, но разрешили доступ к пользовательскому типу записи администраторам и редакторам?

urok93 urok93
12 июл. 2013 г. 02:54:52

@drtanz Назначьте им обеим пользовательскую capability и используйте фильтр user_has_cap. Пример смотрите в этом ответе.

fuxia fuxia
12 июл. 2013 г. 02:58:00

Можно ли сделать так же, как вы предложили, но использовать manage_links capability (общую для администраторов и редакторов) вместо update_core?

urok93 urok93
12 июл. 2013 г. 03:00:05

@drtanz Да, но я бы использовал пользовательскую capability. Менеджер ссылок в конечном итоге будет удален, и вы не знаете, что произойдет с назначенными capabilities тогда.

fuxia fuxia
12 июл. 2013 г. 03:01:59

Я пробовал использовать manage_categories, но получал ошибки, пытался найти какие-то уникальные capabilities для редакторов и администраторов на http://codex.wordpress.org/Roles_and_Capabilities#Capability_vs._Role_Table

urok93 urok93
12 июл. 2013 г. 03:36:26

Если использовать пользовательскую capability, я знаю, как добавить capability, но не уверен, какая фильтрация нужна для скрытия пунктов меню, связанных с CPT.

urok93 urok93
12 июл. 2013 г. 03:39:40

Примечание о update_core; Только администраторы однопользовательских установок имеют эту возможность. В мультисайтах только Супер Администратор обладает этими правами.

numediaweb numediaweb
9 мар. 2014 г. 21:27:40
Показать остальные 2 комментариев
0
-1

Для администратора мультисайта можно использовать следующий код в файле functions.php:

/* Добавляем пользовательский тип записи "Вебсайты" */

function create_website_CustomPostType() {

    register_post_type( 'website',
        array(
            'labels' => array(
                'name' => __( 'Вебсайты' ),
                'singular_name' => __( 'Вебсайт' ),
                'add_new' => __( 'Добавить вебсайт' ),
                'add_new_item' => __( 'Добавить новый вебсайт' ),
                'edit' => __( 'Редактировать' ),             
                'edit_item' => __( 'Редактировать вебсайт' ),                
                'new_item' => __( 'Добавить вебсайт' ),              
                'view' => __( 'Просмотр' ),         
                'view_item' => __( 'Просмотреть вебсайт' ),                    
                'search_items' => __( 'Искать вебсайты' ),  
                'not_found' => __( 'Вебсайты не найдены' ),
                'not_found_in_trash' => __( 'В корзине вебсайтов не найдено' ),                                         
            ),
            'description' => __('Вебсайты для отображения в разделе Ресурсы.'),
            'public' => true,
            'show_ui' => true,
            'publicly_queryable' => true,
            'exclude_from_search' => false,
            'menu_position' => 20,
            'supports' => array('title', 'editor'),
            'can_export' => true        
        )
    ); 
}

 // если пользователь вошел как администратор - показываем тип записи, иначе - скрываем
add_action( 'init', function(){
     $WhatRoleUserLoginNow= wp_get_current_user()->caps;
     $StatusAdmin=$WhatRoleUserLoginNow['administrator'] ?? null;

     if( $StatusAdmin) {
          create_website_CustomPostType();
             }
 


} );

Данный код добавляет пользовательский тип записи для всех администраторов в режиме multisite и суперадминистраторов, скрывая и запрещая доступ для других ролей пользователей, таких как автор, редактор и т.д.

25 июл. 2023 г. 15:33:40