Intereting Posts
Показать последнее сообщение о таксономии Детская тема functions.php Я использую теги open и close php? Форум Open Source для WordPress, аналогичный stackexchange или stackoverflow Как получить «персонализированный тип сообщения» -архив с постоянной работой с ним? Добавить стили с помощью wp_add_inline_style, только если существуют модификации wp_add_inline_style Как добавить новую вкладку в список сообщений администратора и обработать список результатов Тип персонализированного плагина – Внутренняя ошибка сервера Как получить пул текущей страницы? Отображает только определенное количество сообщений, в зависимости от количества сообщений, доступных в запросе Как wordpress добавляет атрибут style для элемента <a> SHOPP Custom Post Type, условные теги Как получить сообщения из подкатегории категории по имени? Не удается сохранить данные MetaBox в пользовательском типе сообщения Запретить поиск менее 4 символов (WooCommerce) Конфликт с шаблоном – Невозможно загрузить способы оплаты

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

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

Я не хочу использовать плагины. Я ищу фрагмент для ввода функций. 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'; } 

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