Intereting Posts
Проверьте, существует ли страница Slug, затем отобразите заголовок страницы Отложенные комментарии Ошибки / ошибки в галерее oqey Создание пользовательского типа персонализации изображений? WordPress продолжает изменять код для вставки Как сделать сообщение выше? Петля в функции для добавления правила перезаписи Как запрашивать сообщения без post_format Показать первые сообщения с пользовательским полем не пустым и заказать все по названию плагин генерировал 751 символ неожиданного выхода во время активации Массовое удаление CSS с 1700 сообщений Извлеките изображение из содержимого и установите его как изображение Форма контакта 7 выберите поле с другим значением текста, затем текст контента в опции Есть ли способ создания почтовых тегов (или пользовательских тегов типа сообщения) всплывающих подсказок, как на сайтах StackExchange? Как получить сообщения, упорядоченные по их категориям?

Добавить роль, которая ограничивает пользователя отправкой в ​​определенной категории

Я пытаюсь создать роль, которая ограничивает возможность публикации в определенной категории, скрывая другую из флажка.

Я не хочу использовать плагины. Я ищу фрагмент для ввода функций. Php. Я проверил все вопросы / сообщения в блоге об этом, и никакие решения не работали.

Я думаю, что это отправная точка.

<?php $result = add_role( 'category_restricted', 'Restricted to specific cat', array( 'read' => true, 'edit_posts' => true, 'delete_posts' => false, )); 

Вы можете мне помочь?

Solutions Collecting From Web of "Добавить роль, которая ограничивает пользователя отправкой в ​​определенной категории"

Вы можете использовать крюк get_terms для поиска всех категорий и ограничения доступа к ним по ID или slug, если текущий пользователь не является администратором или в этом конкретном случае, если у пользователя нет назначенной вами роли.

 add_filter('get_terms', 'restrict_categories'); function restrict_categories($categories) { $onPostPage = (strpos($_SERVER['PHP_SELF'], 'post.php') || strpos($_SERVER['PHP_SELF'], 'post-new.php')); // check if we are in the new/edit post page // if (is_admin() && $onPostPage && !current_user_can('level_10')) { // check for user capabilities - level_10 is admin if (is_admin() && $onPostPage && themename_check_user_role( 'category_restricted' )) { // check for user role $size = count($categories); for ($i = 0; $i < $size; $i++) { // if ($categories[$i]->slug != 'category_slug') if ($categories[$i]->term_id != '1') // then restrict the categories by ID unset($categories[$i]); } } return $categories; } не add_filter('get_terms', 'restrict_categories'); function restrict_categories($categories) { $onPostPage = (strpos($_SERVER['PHP_SELF'], 'post.php') || strpos($_SERVER['PHP_SELF'], 'post-new.php')); // check if we are in the new/edit post page // if (is_admin() && $onPostPage && !current_user_can('level_10')) { // check for user capabilities - level_10 is admin if (is_admin() && $onPostPage && themename_check_user_role( 'category_restricted' )) { // check for user role $size = count($categories); for ($i = 0; $i < $size; $i++) { // if ($categories[$i]->slug != 'category_slug') if ($categories[$i]->term_id != '1') // then restrict the categories by ID unset($categories[$i]); } } return $categories; } 

Кредиты для кода: wptricks . Я только что вспомнил, что недавно прочитал об этом.

Позднее редактирование:

Вы можете попытаться передать роль функции current_user_can() но она не будет гарантированно работать правильно, вместо этого вы можете использовать функцию ниже, чтобы проверить роли пользователя.

 /** * Checks if a particular user has a role. * Returns true if a match was found. * * @param string $role Role name. * @param int $user_id (Optional) The ID of a user. Defaults to the current user. * @return bool */ function themename_check_user_role( $role, $user_id = null ) { if ( is_numeric( $user_id ) ) $user = get_userdata( $user_id ); else $user = wp_get_current_user(); if ( empty( $user ) ) return false; return in_array( $role, (array) $user->roles ); } // example use for the current user if ( themename_check_user_role( 'customer' ) _e( "You've got access!", 'themename' ); else _e( "Sorry, you don't have access!", 'themename' ); 

И в качестве примечания, это хорошая идея включить вашу функцию add_role активации темы / плагина.

Создайте файл шаблона с именем not_allowed_user.php, затем добавьте ниже код в function.php

 add_filter('template_include', 'restrict_by_category'); function check_user() { $user = wp_get_current_user(); if ( ! $user->ID || in_array('subscriber', $user->roles) ) { // user is not logged or is a subscriber return false; } return true; } function restrict_by_category( $template ) { if ( ! is_main_query() ) return $template; // only affect main query. $allow = true; $private_categories = array('cat_1', 'cat_2', 'cat_3'); // categories subscribers cannot see if ( is_single() ) { $cats = wp_get_object_terms( get_queried_object()->ID, 'category', array('fields' => 'slugs') ); // get the categories associated to the required post if ( array_intersect( $private_categories, $cats ) ) { // post has a reserved category, let's check user $allow = check_user(); } } elseif ( is_tax('category', $private_categories) ) { // the archive for one of private categories is required, let's check user $allow = check_user(); } // if allowed include the required template, otherwise include the 'not-allowed' one return $allow ? $template : get_template_directory() . '/not_allowed_user.php'; } 

Я знаю, что вы не хотите использовать плагин, но если вы хотите использовать плагин, тогда это лучший плагин: Ограничить категории