Вопрос или проблема
У меня есть несколько пользовательских ролей для корректоров, которые не имеют возможности создавать записи моих пользовательских типов записей.
К сожалению, я не могу выяснить, как удалить эту возможность для встроенного типа записи post
.
Плагин Members не показывает аргумент create_post
, поэтому я не могу установить его на отказ (false).
Спасибо за вашу помощь.
Встроенной возможности create_post
не существует.
Обновление: Существует возможность create_posts
, но она не хорошо освещена и также вызывает некоторые проблемы, к которым, боюсь, у меня сейчас нет времени приступить.
Уже есть ответы, которые могут помочь:
https://stackoverflow.com/a/3248103
https://wordpress.stackexchange.com/a/178059/94267
Оригинальный ответ:
Существует publish_posts
. Вам нужно отключить это для этих пользователей. Удаление этой возможности не предотвращает пользователя или роль от написания черновой записи, но запрещает им ее публикацию, так что она не будет видна вне админ-панели.
В настоящее время (WP 4.6) у записей есть следующие возможности:
edit_posts
edit_others_posts
publish_posts
read_private_posts
delete_posts
delete_private_posts
delete_published_posts
delete_others_posts
edit_private_posts
edit_published_posts
Вероятно, вы также захотите запретить возможности *_private_*
для всех, кроме администраторов.
Ответ или решение
Чтобы отключить возможность создания записей для встроенного типа записей «post» у пользователей с определенной ролью (например, корректоров), вы можете воспользоваться функциями WordPress для управления возможностями (capabilities) пользователей. Поскольку вы упомянули, что используете плагин Members, в нем нет возможности явно отключить create_post
, однако это можно сделать через publish_posts
.
Следующий код поможет вам убрать возможность публикации записей для определенной пользовательской роли. Добавьте этот код в файл вашей темы functions.php или в ваш собственный плагин:
function modify_editor_capabilities() {
$role = get_role('proofreader'); // Замените 'proofreader' на вашу роль
if ($role) {
// Удаляем возможность публикации записей
$role->remove_cap('publish_posts');
// Удаляем возможность создания записей
$role->remove_cap('edit_posts');
// Если хотите, можете добавить дополнительные ограничения
// Например, удалить возможность редактировать другие записи
$role->remove_cap('edit_others_posts');
}
}
add_action('admin_init', 'modify_editor_capabilities');
Что делает данный код:
-
Получение роли: Мы получаем объект роли «proofreader». Вы можете заменить ‘proofreader’ на ту роль, которую хотите редактировать.
-
Удаление возможностей: С помощью методов
remove_cap
мы убираем следующие возможности:publish_posts
: запрещает пользователю публиковать записи.edit_posts
: запрещает пользователю создавать черновики записей.edit_others_posts
: запрещает пользователю редактировать записи других пользователей. Это можно также настроить, если это необходимо.
-
Событие: Мы используем хук
admin_init
, чтобы выполнить наши изменения, когда загружается админка.
Дополнительные рекомендации:
Если вам нужно добавить дополнительные ограничения, такие как возможность редактировать черновики или доступ к частным записям, вы можете использовать аналогичные вызовы remove_cap
для других возможностей:
edit_private_posts
delete_posts
delete_published_posts
Применив этот код, вы сможете эффективно контролировать доступ к созданию и публикации записей для отдельных ролей пользователей. Убедитесь, что вы протестировали функциональность после внесения изменений, чтобы гарантировать, что все работает так, как задумано.