dydikson
@dydikson
Выношу свой мозг всякой вполне очевидной фигней

Как в WordPress для пользователей роли «Автор» дать возможность публиковать только определенный тип записей?

К сожалению большой вопрос у меня получаетя. Так что всю суть я постараюсь вместить здесь.
Как в WordPress для пользователей роли "Автор" дать возможность публиковать только определенный тип записей например "refbek", и что бы после публикации записи их мог читать только автор, и только после входа на сайт?
  • Вопрос задан
  • 232 просмотра
Решения вопроса 1
@weart
На примере роли Редактор

1. При регистрации типа записи задаете capabilities
2. При создании роли или для существующей прописываете доступ с помощью add_cap
3. На самом сайте проверяете перед выводом постов залогинен ли юзер и его роль

Чуть подробнее:

Шаг 1, регистрация типа записи:

function register_works() {
	$labels = array(
		'menu_name' => __( 'Работы подписчиков', 'ay' ),
		'name' => __( 'Работы подписчиков', 'ay' ),
		'add_new' => __('Добавить работу', 'ay'),
		'add_new_item' => __('Добавить', 'ay'),
		'edit_item' => __('Редактировать', 'ay'),
		'search_items' => __('Искать', 'ay'),
	);

	$args = array(
		'labels' => $labels,
		'supports' => array( 'title', 'editor', 'author', 'thumbnail', 'comments' ),
		'menu_icon' => 'dashicons-groups',
		'menu_position' => 13,
		'rewrite' => array('slug' => 'works'),
		'public' => true,
		'has_archive' => false,
		'capabilities' => array(
			'edit_post' => 'edit_works_content',
			'edit_posts' => 'edit_works_contents',
			'edit_published_posts' => 'edit_published_works_contents',
			'edit_others_posts' => 'edit_other_works_content',
			'publish_posts' => 'publish_works_content',
			'read_post' => 'read_works_content',
			'read_private_posts' => 'read_private_works_content',
			'delete_post' => 'delete_works_content',
			'delete_posts' => 'delete_works_contents',
			'delete_published_posts' => 'delete_published_works_contents'
		),
		'map_meta_cap' => true
	);
	register_post_type( 'works', $args );
}
add_action( 'init', 'register_works' );


Шаг 2, раздача доступа:

function add_studio_caps() {
	$editor     = get_role('editor');
	$editor->add_cap('edit_works_content');
	$editor->add_cap('edit_works_contents');
	$editor->add_cap('read_works_content');
	$editor->add_cap('read_private_works_content');	// закомментить
	$editor->add_cap('delete_works_content');
	$editor->add_cap('delete_works_contents');
	$editor->add_cap('edit_published_works_contents');
	$editor->add_cap('delete_published_works_contents');
	$editor->add_cap('edit_other_works_content'); // закомментить
}
add_action( 'admin_init', 'add_studio_caps');


Шаг 3, на фронте:

if ( is_user_logged_in() ) {		

		global $current_user;		
						
		if ( in_array( 'editor', $current_user->roles ) {
                        
		  // выводим посты
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы