Есть ли способ создать черновик редакции опубликованной страницы или записи? Какие обходные пути вы использовали?
Допустим, я уже опубликовал страницу или запись. Теперь я хочу внести изменения, но хочу, чтобы коллега проверил их перед публикацией. Есть ли способ сделать это?
Редактирование: Я понимаю, что в настоящее время это невозможно как таковое, и меня интересуют креативные обходные пути.
На сайте, над которым я сейчас работаю, у меня также есть отдельный защищенный паролем 'staging' сайт для создания черновиков крупных изменений/дополнений контента, и после одобрения я копирую и вставляю их на действующий сайт. Интересно, использовал ли кто-нибудь подобный метод, но, возможно, автоматизировал 'перенос' на действующий сайт?
Я знаю об этом вопросе: Синхронизация базы данных между dev/staging и production, но он больше касается полной синхронизации всех баз данных, а не отдельных страниц или записей.
Сейчас предлагаю вознаграждение, чтобы попытаться найти дополнительные идеи для обходных путей.

Должна быть возможность добавить кнопку Сохранить как изменённую копию в блоке публикации. Для этого нужно подключиться к хуку content_save_pre
, затем скопировать содержимое и все метаданные в новую запись со статусом черновика. После проверки записи необходимо объединить обратно.
Я ещё не реализовал это, но такая функциональность действительно необходима.

Мне нравится эта простая идея. API нужна только функция Copy Post Revision
, которая сможет скопировать полную ревизию, включая метаданные, в новый (еще не созданный) или существующий пост. После этого черновик копии поста можно будет позже скопировать в оригинальный пост.

http://wordpress.org/extend/plugins/revisionary/
Этот плагин сделает то, что вам нужно. Он создает роль Рецензента (Revisor), которая находится где-то между Ролью Участника (Contributor) и Редактора (Editor). Пользовательский интерфейс можно улучшить, а внутренний код вынужден обходить множество недостающих функций WordPress, но да, он решает вашу проблему: он позволит вам сохранять черновик (фактически 'ожидающую' 'ревизию').
Обновление 2018: Revisionary, похоже, прекратил разработку около 3 лет назад. Однако, ознакомьтесь с ответом Тессы о Revisionize (https://wordpress.org/plugins/revisionize). Revisionize выглядит как лучшее решение.
Обновление 2019: Revisionary теперь принадлежит и активно разрабатывается PublishPress. Оригинальный автор также сотрудничает с ними для его поддержки.

Я только что протестировал этот плагин на только что обновленной версии 3.1.2. Процесс применения ожидающей ревизии кажется сломанным. Учитывая скудность документации, неясно, сломано ли это в 3.1.2, или предполагаемый UX заключается в том, что утверждающая сторона должна вручную копировать-вставлять ревизию в опубликованную запись. В любом случае, я не буду выпускать это для своих пользователей.

Интерфейс довольно странный, но это потому, что нет реального способа правильно интегрировать его в WP, насколько я могу судить. В WP просто не хватает хуков для этого. Когда я тестировал, он все же работал... где-то есть кнопка или ссылка, которая 'восстанавливает' ревизию. Вам не должно быть необходимости что-то копировать-вставлять. С тех пор я перешел на то, чтобы пользователь просто отправлял редактору запрос на ревизию по электронной почте, именно потому что мне не нравится интерфейс.

Согласен, этот плагин часто не работает у меня и ужасно неудобен в использовании.

Я не использовал это 3,5 года; не думаю, что это всё ещё работает. Должен быть новый/лучший способ сделать это, так как ядро WordPress значительно улучшилось с момента публикации.

Привет @e100;
Если тебя интересует индивидуальное решение в виде плагина, я могу предложить несколько вариантов.
Процесс, похожий на то, что @toscho назвал "Сохранить как изменённую копию", но с некоторыми отличиями. Плагин может блокировать редактирование опубликованных записей, но позволять создавать производные записи с новым статусом, например "Черновик обновления", которые будут связаны с оригинальной записью через произвольное поле. Эти производные записи можно редактировать, проверять и т.д., но вместо возможности публикации будет вариант заменить оригинальную запись обновлённой версией.
Другой вариант — использовать встроенную систему ревизий, хотя мне нужно будет разобраться, как отображать в браузере версию, которая не является последней; возможно, сохранять содержимое в произвольном поле и позволять продолжать работу над ним.
Третий вариант — настроить второй сайт на WordPress в качестве песочницы для редактирования, использовать веб-сервисы для получения записей, позволять редактировать их удалённо, а затем, когда они будут готовы, отправлять обратно на основной сайт.
Похожий на третий вариант — настроить песочницу для редактирования с помощью мультисайта WordPress и создать непубличные блоги для каждого автора в качестве их личной песочницы.
Повторюсь, все эти варианты потребуют разработки кастомного плагина.
Если ты ищешь готовые плагины, можешь взглянуть на эти, хотя у меня пока нет конкретного опыта с ними, так что я не знаю, подойдут ли они под твои нужды:
Assignment Desk — инструмент для редакторов новостных организаций, использующих WordPress в качестве CMS. Цель плагина — упростить и сделать более эффективным взаимодействие с сообществом в процессе создания новостей.
Edit Flow — предлагает набор функций для переопределения редакционного рабочего процесса в WordPress.
Peter's Post Notes — добавляет заметки в боковой панели экранов редактирования записей и страниц в WordPress 2.8 и выше. При использовании с Peter's Collaboration E-mails 1.2 и выше заметки отправляются вместе с письмами в рабочем процессе. Также есть система общих и приватных заметок на дашборде.

твое первое предложение звучит как очень крутое решение! О, и с Днем Благодарения, Майк, учитывая, что ты ВСЕГДА тот, кто дает отличные советы/решения всем нам!

Это довольно старый вопрос, и при просмотре некоторых упомянутых здесь плагинов я заметил, что многие из них больше не поддерживаются или не совсем то, что я искал.
В итоге я нашел плагин под названием Revisionize, который мне понравился. Хотя его репутация и популярность пока невысоки из-за относительной новизны, он мне приглянулся.
Преимущества:
- Удобный интерфейс в WordPress, кнопки легко найти, есть предупреждения и пояснения о действиях при их нажатии.
- Имеет
5-звездочный4.9-звездочный рейтинг - По-прежнему поддерживается разработчиком
- Совместим с плагином Advanced Custom Fields
- Совместим с плагином Public Post Preview
Недостатки:
Всего 300+4,000+ активных установокВсего 4 отзыва21 отзыв- Нет поддержки Gutenberg
Списки обновлены 15 августа 2019 года. Несмотря на то, что это отличный плагин, если вы используете редактор блоков Gutenberg, он может вам не подойти.

Привет, я автор плагина Revisionize. Он прошел долгий путь — скоро выйдет версия 2.1 с улучшенной совместимостью для мультисайтов/сетей. В последней версии есть базовая панель настроек, а также несколько платных дополнений на https://revisionize.pro, которые позволяют участникам с ролью "Участник" (Contributors) создавать ревизии существующего контента и отправлять изменения на проверку. Сейчас у плагина более 1000 активных установок и 11 отзывов с 5 звездами.

Да, у вас уже 18 отзывов с 5 звездами! Я действительно считаю, что этот плагин (и Revisionize) сейчас должен быть принятым ответом.

К сожалению, в данный момент это невозможно. Если страница/запись уже опубликована, единственный вариант — создать новую страницу/запись для внесения правок и опубликовать её приватно, чтобы коллега мог проверить изменения. Затем заменить содержимое основной страницы/записи на обновлённую версию.
Для информации: Работа с черновиками уже опубликованного контента — это нестандартный рабочий процесс для большинства пользователей WordPress. За последний месяц я слышал как минимум о трёх различных подходах к этому вопросу... Так как единого стандарта для подачи правок в уже опубликованный контент не существует, шансы на то, что такая функция появится в WordPress, весьма малы.

Хм, мне действительно кажется странным, что такой рабочий процесс не пользуется большим спросом, особенно учитывая, что WordPress все чаще продвигают как полнофункциональную CMS с пользовательскими типами контента и т.д.

Проблема в том, что "такой рабочий процесс" определяется по-разному множеством людей. Если бы был стандарт, его было бы легко внедрить. Без стандарта кастомизация WP под один рабочий процесс отталкивает других. В текущей ситуации проще позволить разработчикам создавать индивидуальные решения для конкретных случаев.

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

Две функции, которые я могу вспомнить конкретно: 1) На основе ролей: Участники могут редактировать содержимое записи и нажимать "отправить на рецензирование", изменения должны быть проверены перед публикацией. 2) Раздельные ревизии: Пользователи могут выбрать любую ревизию записи и автоматически скопировать её в новую запись без отката существующей версии.

возможно простое решение: плагин http://wordpress.org/extend/plugins/duplicate-post/ для копирования записей

Есть плагин под названием Live Drafts, который, кажется, работает довольно хорошо?

Если вы всё ещё ищете решение, посмотрите это: https://github.com/malithmcr/wp-draft-published

Теперь для этого существует очень удобное решение в виде плагина Drafts of Post Revisions.
Пользователи могут получить разрешение на создание черновика ревизии опубликованной записи (или пользовательского типа записи), который создается как дочерняя копия записи.
Черновики можно сравнивать с их опубликованным родителем с помощью функции сравнения ревизий.
При публикации черновика ревизии все изменения интегрируются обратно в родительскую запись, а черновик удаляется. Также можно поддерживать несколько черновиков одновременно.
Рекомендую этот плагин всем - он становится стандартным инструментом для сайтов на WordPress. Однако я подозреваю, что в ближайшем будущем подобный функционал может быть разработан в ядре WordPress.

Нашел этот ответ здесь, который сработал для меня. Я немного изменил его, так как использую пользовательские роли.
function published_to_pending( $post_id ) {
global $post;
if ( ! is_object( $post ) ) {
return;
}
if ( ! current_user_can( 'publish_posts' ) && $post->post_status == 'publish' ) {
// остановить рекурсивный вызов
remove_action( 'save_post', 'published_to_pending' );
// обновить запись, что снова вызывает save_post
wp_update_post( array( 'ID' => $post_id, 'post_status' => 'pending' ) );
// снова подключить эту функцию
add_action( 'save_post', 'published_to_pending' );
}
}
add_action( 'save_post', 'published_to_pending' );

Привет @e100 :)
Я думаю, что умным решением будет использовать существующий бесплатный плагин. Он делает всё, о чём ты написал. Просто скачай его с WordPress.org: https://wordpress.org/plugins/revision-manager-tmc/
Этот плагин очень часто и регулярно обновляется
Revision Manager TMC отлично работает вместе со вторым бесплатным плагином для редактирования возможностей пользовательских ролей - User Role Editor https://wordpress.org/plugins/user-role-editor/

На 2019 год это самое полное решение. Оно похоже на Revisionize, но более интуитивное и завершённое. 1) Редакции привязаны к оригинальным записям; 2) Позволяет назначить редакторам "Роль участника", ограничивая их доступ к исходной записи; 3) Редакции действительно выглядят как редакции — скрывают параметры публикации и т.д.

Теперь в плагине (ранее Yoast) Duplicate Post появилась новая функция "Переписать и переопубликовать". Она позволяет сохранять ваши правки как черновик и планировать повторную публикацию, объединяя изменения с оригиналом.
Подробнее можно узнать здесь: https://yoast.com/help/how-to-use-the-rewrite-republish-feature-in-yoast-duplicate-post/

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