Вопрос или проблема
Не разрешайте пользователям создавать новые посты и страницы
Я определяю новую роль пользователя под названием Корректор
, и, как говорит имя, пользователи этой группы должны иметь возможность читать и редактировать посты и страницы. Но я не хочу, чтобы они создавали новые.
С помощью моих пользовательских типов записей я могу установить возможность create_post -> create_{cpt_name}
и установить её в значение false для этой группы пользователей. В бэкенде они теперь не видят кнопку добавления, но все еще могут редактировать посты. Это именно то, что я хочу. К сожалению, мне не удалось найти способ настроить эту возможность для предопределенных CPT WordPress (Записи и Страницы). Также плагин Members кажется неспособным ограничить роли пользователей в создании новых постов, позволяя им редактировать.
В ходе исследования я обнаружил, что это похоже на большую проблему WordPress, которая еще не решена. Это правда?
Если нет, я был бы очень благодарен, если кто-то мог бы помочь мне с этим… Это действительно стало бы решением большой проблемы моего сайта!
Используйте remove_cap для этого.
function remove_proofreader_create_posts(){
global $wp_roles;
$wp_roles->remove_cap( 'proof_reader', 'create_posts' );
$wp_roles->remove_cap( 'proof_reader', 'create_pages' );
}
ПРИМЕЧАНИЕ: Это не глобальная функция, а метод классов WP_Roles, WP_Role и WP_User. Его нужно вызывать с использованием экземпляра одного из этих классов, как показано в примерах.
ТАКЖЕ: Вам нужно вызвать функцию один раз, например, во время активации плагина, а не на постоянном хуке.
Ссылка: https://codex.wordpress.org/Function_Reference/remove_cap
Может быть, этот альтернативный подход к remove_cap() решит проблему
add_action( 'init', 'stackx_set_proof_reader_capabilities' );
function stackx_set_proof_reader_capabilities() {
// Получаем объект роли.
$role = get_role( 'proof_reader' );
// Список возможностей для удаления у редакторов.
$caps = array(
'create_posts',
'create_pages',
);
foreach ( $caps as $cap ) :
// Удаляем возможность.
$role->remove_cap( $cap );
endforeach;
}
Ответ или решение
Конечно! Чтобы создать новую роль пользователя в WordPress под названием "Корректор" (Proofreader), которая сможет читать и редактировать записи и страницы, но не сможет создавать новые, вам нужно будет использовать функцию remove_cap()
для удаления соответствующих возможностей от этой роли.
Шаги по настройке роли "Корректор"
-
Создание и назначение роли: Убедитесь, что вы создали роль "Корректор". Это можно сделать с помощью плагинов, таких как Members, или через собственный код.
- Удаление возможности создания записей и страниц: Для того чтобы удалить возможность создания записей и страниц, можно использовать следующий код:
add_action( 'init', 'stackx_set_proof_reader_capabilities' );
function stackx_set_proof_reader_capabilities() {
// Получаем объект роли.
$role = get_role( 'proof_reader' );
// Список возможностей для удаления у корректора.
$caps = array(
'create_posts',
'create_pages',
);
foreach ( $caps as $cap ) {
// Удаляем возможность.
$role->remove_cap( $cap );
}
}
- Активация функции: Рекомендуется вызвать данную функцию один раз, например, при активации вашего плагина, чтобы изменения вступили в силу.
Важные моменты
- Убедитесь, что вы вызываете эту функцию из файла функции вашего плагина или из файла
functions.php
вашей темы. - После выполнения этого кода пользователи с ролью "Корректор" не смогут видеть кнопки для создания новых записей и страниц, но при этом они смогут редактировать существующий контент.
Примечания
Необходимо иметь в виду, что функции WordPress могут меняться, и следует проверять новости и обновления платформы. Тем не менее, текущий метод исправляет ситуацию, которую вы описали, и обеспечивает пользовательский контроль за доступом.
Если у вас есть дополнительные вопросы или потребности, не стесняйтесь спрашивать!