Разрешить автору редактировать, но не обновлять опубликованный пост

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

У меня есть клиент, который хочет управлять процессом редактирования в пользовательском типе записи (CPT) под названием План этажа. Они хотят иметь возможность предварительного просмотра и одобрения или отклонения всех правок к Плану этажа. Я думал, что нашел решение, предоставив администратору возможность создать План этажа, а участнику — ввести необходимый контент, который в конечном итоге будет одобрен и опубликован администратором.

Проблема возникает, когда План этажа нужно обновить. После публикации участник больше не может редактировать запись. Если мы изменим пользователя на автора, то он сможет редактировать запись, но единственная опция в этом случае — это Обновить. Это обновит контент на опубликованной странице, а клиент по-прежнему хочет иметь возможность одобрять или отклонять правки.

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

Я экспериментировал с Edit Flow, но, похоже, это не решает эту конкретную проблему. Возможно, я просто не правильно его настраиваю.

Существует ли вообще способ сделать это? Все мои поиски не принесли результатов.

Существуют некоторые плагины для рабочих процессов – один из них https://wordpress.org/plugins/oasis-workflow/ – но многие из них имеют много накладных расходов и не совсем подходят под то, что вам нужно. Например, некоторые работают только с родными записями и страницами, а не с CPT.

Если ни один из плагинов для рабочих процессов не подошел, вы можете рассмотреть возможность создания пользовательских статусов и разработки собственного плагина. В основном, вы подключаетесь к изменениям статуса записи, и если статус — опубликовано, вы можете использовать jQuery, чтобы заменить кнопку изменений публикации на кнопку “отправить на обзор”. Затем вам нужно добавить кастомный PHP, который сохраняет это как пользовательский статус и отправляет роль Утверждающего/Публика в электронном письме, что изменения были отправлены на обзор. Вы можете отправить Утверждающему/Публику ссылку на экран Сравнить ревизии, чтобы они видели старую версию рядом с новой и могли внести дополнительные изменения или опубликовать как есть.

Если быть честным, рабочие процессы — это основная функция, которой, по моему мнению, не хватает в WordPress по сравнению со многими другими CMS.

Плагин https://wordpress.org/plugins/user-role-editor/ работал лучше всего для меня. Вы можете создать пользовательскую роль и предоставить ей необходимые разрешения.

Ответ или решение

Позвольте участнику редактировать, но не обновлять опубликованный пост

Ваша задача управлять процессом редактирования для пользовательского типа записи (CPT) «План этажа», и, судя по описанию, вам требуется создать такую систему, которая позволит участникам вносить изменения, не позволяя обновлять уже опубликованные материалы без предварительного одобрения.

Текущая ситуация

Вы уже рассмотрели разные подходы, включая настройку прав доступа через смену ролей пользователей (например, с «Автор» на «Участник») и использование плагинов для управления рабочим процессом, таких как Edit Flow и Oasis Workflow. Однако ни один из этих подходов не решает задачу полностью, поскольку участники все равно могут обновлять опубликованные посты, что противоречит требованиям вашего клиента.

Возможное решение

Для решения этой проблемы я рекомендую комбинировать создание пользовательских ролей и использование произвольных статусов для постов, что позволит вам контролировать процесс редактирования и публикации.

  1. Создание пользовательской роли:
    Используйте плагин User Role Editor для создания специальной роли (например, «Редактор плана этажа») с ограниченными правами. Эта роль должна иметь возможность редактирования черновиков (предварительных версий) постов, но не должна иметь права на их обновление.

  2. Настройка пользовательского статуса:
    Разработайте свой собственный статус для постов, который будет называется, например, «На утверждении». Для этого вам потребуется добавить следующий код в файл functions.php вашей темы или в плагин:

    function register_custom_post_status() {
       register_post_status('pending_review', array(
           'label'                     => _x('На утверждении', 'post'),
           'public'                    => true,
           'exclude_from_search'       => false,
           'show_in_admin_all_list'     => true,
           'show_in_admin_status_list'  => true,
           'label_count'               => _n_noop('На утверждении <span class="count">(%s)</span>', 'На утверждении <span class="count">(%s)</span>'),
       ));
    }
    add_action('init', 'register_custom_post_status');
  3. Изменение кнопки обновления:
    Вам нужно сделать так, чтобы на экране редактирования поста у участника вместо кнопки «Обновить» была кнопка «Отправить на утверждение». Для этого можно использовать JavaScript для изменения интерфейса:

    jQuery(document).ready(function($){
       $('#publish').val('Отправить на утверждение');
       $('#publish').click(function(e){
           e.preventDefault(); // предотвращаем переход на обновление
           $('#post_status').val('pending_review'); // ставим статус на утверждении
           $('#post').submit(); // отправляем форму
       });
    });
  4. Уведомление администратора:
    После того как участник отправит пост на утверждение, инициируйте уведомление администратора по электронной почте с информацией о том, что требуется одобрение, с возможностью перейти к сравнительному просмотру изменений.

  5. Проверка и публикация:
    Администратор получает уведомление, проверяет изменения и имеет возможность либо отклонить их, либо опубликовать пост. В случае принятия поста, статус меняется на «Опубликован», в противном случае возвращается к предыдущему состоянию или создается новый черновик.

Заключение

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

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

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