Вопрос или проблема
В настоящее время я использую редактор ролей пользователей, чтобы изменить разрешения для роли пользователя. Я хочу иметь возможность ограничить эту роль в публикации поста. Они могут сохранить черновик, но не должны иметь возможность публиковать. Есть ли лучший способ сделать это?
Дайте пользователю возможность edit_posts
, но не возможность publish_posts
.
Используйте фильтр wp_insert_post_data
. Затем проверьте роль пользователя. Если у пользователя есть определенная роль, установите статус поста. (Я не тестировал приведенный ниже скрипт)
add_filter( 'wp_insert_post_data', 'filter_handler', '99');
function filter_handler( $data ) {
$user = wp_get_current_user();
$userRole = $user->roles ? $user->roles[0] : false;
if ( $userRole === 'author') {
$data['post_status'] = 'pending';
}
return $data;
}
.
Ответ или решение
Для решения задачи ограничения прав пользователя на публикацию записей в WordPress, когда он может создавать черновики, мы можем использовать возможности плагина User Role Editor, а также написание пользовательского фильтра.
Шаг 1: Настройка прав доступа
Используя плагин User Role Editor, вы можете назначить необходимые права пользователям. Для конкретного роли (например, «Автор» или «Редактор»), убедитесь, что у них есть следующие возможности:
edit_posts
— для редактирования публикаций.- Без
publish_posts
— для ограничения возможности публиковать записи.
- Откройте User Role Editor в админке WordPress.
- Выберите роль пользователя, для которой хотите изменить права.
- Убедитесь, что отмечена возможность
edit_posts
. - Уберите отметку с
publish_posts
, чтобы запретить публикацию.
Шаг 2: Использование фильтра wp_insert_post_data
Для дальнейшей настройки можно использовать фильтр wp_insert_post_data
, чтобы программно установить статус публикации в «ожидание» (pending
) или «черновик» (draft
) в зависимости от роли пользователя.
Вот пример кода, который выполнит эту задачу:
add_filter('wp_insert_post_data', 'filter_handler', 99);
function filter_handler($data) {
$user = wp_get_current_user();
$userRole = $user->roles ? $user->roles[0] : false;
// Проверяем, если роль пользователя 'author' (или другая, которую вы настроили)
if ($userRole === 'author') {
// Устанавливаем статус поста на "ожидание"
$data['post_status'] = 'pending';
}
return $data;
}
Подробности реализации
- Добавление кода: Вставьте данный код в файл
functions.php
вашей темы или создайте отдельный плагин. - Тестирование: После выполнения этих шагов, пользователи с ролью «Автор» (или другой, которая указана в условии) смогут создавать черновики и сохранять их, но при попытке публикации их посты будут автоматически установлены в статус «ожидание».
- Безопасность: Убедитесь, что кастомный код безопасен, и протестируйте его в тестовом окружении перед внедрением на основной сайт.
Заключение
Используя комбинацию плагина User Role Editor и фильтра wp_insert_post_data
, вы можете эффективно управлять правами пользователей в WordPress, ограничивая возможность публикации записей. Это не только повысит безопасность вашего сайта, но и упростит процесс управления контентом для вашего контент-менеджмента.
Обратите внимание на необходимость регулярного обновления ролей и прав доступа, чтобы соответствовать изменениям в сфере управления контентом и требованиям вашего бизнеса.