позволить пользователю создать черновик поста, но не публиковать в WordPress

Вопрос или проблема

В настоящее время я использую редактор ролей пользователей, чтобы изменить разрешения для роли пользователя. Я хочу иметь возможность ограничить эту роль в публикации поста. Они могут сохранить черновик, но не должны иметь возможность публиковать. Есть ли лучший способ сделать это?

Дайте пользователю возможность 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 — для ограничения возможности публиковать записи.
  1. Откройте User Role Editor в админке WordPress.
  2. Выберите роль пользователя, для которой хотите изменить права.
  3. Убедитесь, что отмечена возможность edit_posts.
  4. Уберите отметку с 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;
}

Подробности реализации

  1. Добавление кода: Вставьте данный код в файл functions.php вашей темы или создайте отдельный плагин.
  2. Тестирование: После выполнения этих шагов, пользователи с ролью «Автор» (или другой, которая указана в условии) смогут создавать черновики и сохранять их, но при попытке публикации их посты будут автоматически установлены в статус «ожидание».
  3. Безопасность: Убедитесь, что кастомный код безопасен, и протестируйте его в тестовом окружении перед внедрением на основной сайт.

Заключение

Используя комбинацию плагина User Role Editor и фильтра wp_insert_post_data, вы можете эффективно управлять правами пользователей в WordPress, ограничивая возможность публикации записей. Это не только повысит безопасность вашего сайта, но и упростит процесс управления контентом для вашего контент-менеджмента.

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

Оцените материал
Добавить комментарий

Капча загружается...