san_jorich
@san_jorich
Творческий кодер

Custom Taxonomy Capabilities. Как настроить правильно?

Здравствуйте! Пытаюсь для произвольной таксономии настроить права доступа.. Вроде все по "священным" писаниям делаю, но не работает связка таксономии и типа записи. Т.е на странице создания я не имею возможность выбора терма.
Если в права пользователя поставить manage_categories то все работает, но появляются лишние пункты\категории доступ к которым нужно закрыть..
. Как исправить?
Функция регистрации таксономии
function es_event_types_taxonomy() {

    $labels = array(
        'name'                       => 'Тип',
        'singular_name'              => 'Тип мероприятия',
        'menu_name'                  => 'Тип мероприятия',
        'all_items'                  => 'Все типы мероприятий',
        'parent_item'                => 'Главный тип мероприятия',
        'parent_item_colon'          => 'Parent Item:',
        'new_item_name'              => 'Название нового типа мероприятий',
        'add_new_item'               => 'Добавить тип мероприятия',
        'edit_item'                  => 'Редактировать тип',
        'update_item'                => 'Обновить тип',
        'view_item'                  => 'Смотреть тип',
        'separate_items_with_commas' => 'Добавление через запятую',
        'add_or_remove_items'        => 'Добавить или удалить тип мероприятий',
        'choose_from_most_used'      => 'Выбрать из наиболее популярных',
        'popular_items'              => 'Популярные типы',
        'search_items'               => 'Найти тип',
        'not_found'                  => 'Тип не найден',
        'no_terms'                   => 'Типов мероприятий нет.',
        'items_list'                 => 'Список типов меропрриятий',
        'items_list_navigation'      => 'Items list navigation',
    );

    $es_type_capabilities = array(
        'manage_terms' => 'manage_es_event_type',
        'edit_terms' => 'edit_es_event_type',
        'delete_terms' => 'delete_es_event_type',
        'assign_terms' => 'assign_es_event_type',
    );
    $args = array(
        'labels'                     => $labels,
        'hierarchical'               => false,
        'public'                     => true,
        'show_ui'                    => true,
        'show_admin_column'          => true,
        'show_in_nav_menus'          => true,
        'show_tagcloud'              => true,
        'show_in_quick_edit'         => true,
        'meta_box_cb'                => true,
        'capabilities'               => $es_type_capabilities,
        'rewrite' => array( 'slug' => 'es_event_type', 'with_front' => false, 'hierarchical' => true),
  
    );

    register_taxonomy( 'es_event_type', array( 'es_event' ), $args );

}
add_action( 'init', 'es_event_types_taxonomy', 0 );

Функция добавения роли
function add_se_roles() {

$es_admin_capabilities=array(

 	'activate_plugins'		=>	false,
 	'delete_others_pages'	=>	false,
 	'delete_others_posts'	=>	false,
 	'delete_pages'			=>	false,
 	'delete_posts'			=>	false,
 	'delete_private_pages'	=>	false,
 	'delete_private_posts'	=>	false,
 	'delete_published_pages'=>	false,
 	'delete_published_posts'=>	false,
 	'edit_dashboard'		=>	true,
 	'edit_others_pages'		=>	false,
 	'edit_others_posts'		=>	false,
	'edit_pages'			=>	false,
	'edit_posts'			=>	false,
	'edit_private_pages'	=>	false,
	'edit_private_posts'	=>	false,
	'edit_published_pages'  =>	false,
	'edit_published_posts'  =>	false,
	'edit_theme_options'	=>	false,
	'export'				=>	false,
	'import'				=>	false,
	'list_users'			=>	false,
	'manage_categories'		=>	false,
	'manage_links'			=>	false,
	'manage_options'		=>	false,
	'moderate_comments'		=>	false,
	'promote_users'			=>	false,
	'publish_pages'			=>	false,
	'publish_posts'			=>	false,
	'read_private_pages'	=>	false,
	'read_private_posts'	=>	false,
	'read'					=>	true,
	'level_0' 				=>  true,
	'remove_users'			=>	false,
	'switch_themes'			=>	false,
	'upload_files'			=>	false,
	'customize'				=>	false,
	'delete_site'			=>	false,
	'read_es_event'			=>	true,
	'edit_es_event'			=>	true,
	'edit_others_es_event'	=>	true,
	'publish_es_event'		=>	true,
	'read_private_es_event'	=>	true,
	'delete_es_event'		=>	true,
	'delete_private_es_event'=> true,
    'delete_published_es_event'=>true,
	'delete_others_es_event' => true,
	'edit_private_es_event'	=>	true,
	'edit_published_es_event'=> true,
	'manage_es_event_type'	=>	true,
    'edit_es_event_type'	=>	true,
    'delete_es_event_type'	=>	true,
    'assign_es_event_type'	=>	true,
 	);
 // $es_manager_capabilities=array();
 // $es_user_capabilities=array();
 // $es_subscriber_capabilities=array();
/* -=-=-=-=-=-=-=-=-=- */


	add_role('es_admin', 'Администратор Системы Расписания', $es_admin_capabilities);
}

  • Вопрос задан
  • 228 просмотров
Пригласить эксперта
Ответы на вопрос 1
san_jorich
@san_jorich Автор вопроса
Творческий кодер
Твою-ж папу...Тостер!
Бывает и такое: Спустя месяц с гаком вернулся к вопросу в другом проекте. Решил. В ходе поиска решения наткнулся на свой же вопрос по этой же теме. Сам задал - сам ответил. Нормально, че)))
Если кому пригодится - некогда объяснять, просто берите готовое рабочее решение. Решение выкладываю по приведенному примеру:
function add_se_roles() {

  $es_admin = add_role('es_admin','Администратор Системы Мероприятий',array( 'read'=>true,'level_7'=>true));
  if ( null !== $es_admin ) {
    $es_administrator = get_role('es_admin'); // Для CPT
    $es_administrator->add_cap('edit_es_event_content'); 
    $es_administrator->add_cap('edit_es_event_contents');
    $es_administrator->add_cap('read_es_event_content');
    $es_administrator->add_cap('read_private_es_event_content');
    $es_administrator->add_cap('delete_es_event_content');
    $es_administrator->add_cap('delete_es_event_contents');
    $es_administrator->add_cap('edit_published_es_event_contents');
    $es_administrator->add_cap('delete_published_es_event_contents');
    $es_administrator->add_cap('edit_other_es_event_content');

    $es_administrator->add_cap('manage_es_event_type'); // <-Права таксономии вопроса
    $es_administrator->add_cap('edit_es_event_type');
    $es_administrator->add_cap('delete_es_event_type');
    $es_administrator->add_cap('assign_es_event_type');

    $es_administrator->add_cap('manage_es_event_operation');
    $es_administrator->add_cap('edit_es_event_operation');
    $es_administrator->add_cap('delete_es_event_operation');
    $es_administrator->add_cap('assign_es_event_operation');

    $es_administrator->add_cap('manage_es_event_location');
    $es_administrator->add_cap('edit_es_event_location');
    $es_administrator->add_cap('delete_es_event_location');
    $es_administrator->add_cap('assign_es_event_location');

    $es_administrator->add_cap('manage_es_event_team');
    $es_administrator->add_cap('edit_es_event_team');
    $es_administrator->add_cap('delete_es_event_team');
    $es_administrator->add_cap('assign_es_event_team');
    $es_administrator->add_cap('manage_event_service');
  }  

}
// Легче создать относительно пустую, со стандартными возможностями роль и по итогам создания напичкать ее всем, чем нужно. 
// Все, что нужно прописывается в функциях создания таксономий и произвольного типа записи.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы