2013-02-13 3 views
0

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

Я действительно не хочу создавать свою собственную таблицу для хранения этой информации, поэтому я думал об использовании системы ревизий, чтобы добавить ревизию, отмеченную статусом сообщения в обзоре. Затем я покажу, что на странице панели обзора/редактирования, но тот, который отображается для пользователей, по-прежнему будет старым. Как только обзор будет успешно принят, он заменит старый.

Проблема в том, что я не могу найти никакой информации о том, как сохранить пост, обновляемый в качестве обзора; кто-нибудь знает, как это можно сделать?

Благодаря

+0

Проверьте, работает ли [Изменить поток] (http://wordpress.org/extend/plugins/edit-flow/). – brasofilo

ответ

0

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

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

$isNewPost = $data['post_date_gmt'] == $data['post_modified_gmt']; 

Первый крючком я был wp_insert_post_data крюка, который вызывается на пост объекта перед вставкой/обновлен в базе данных. Этот крючок велик, потому что он позволяет вам не возвращать ничего, что отменяет вставку в базу данных. Конечно, вы не всегда хотите это делать, если сообщение новое, тогда мы должны добавить его в базу данных, поэтому в процессе проверки есть местозаполнитель, но вместо того, чтобы просто добавлять его, мы устанавливаем статус сообщения на черновик. Если это обновление, то мы не возвращаем ничего, кроме добавления там обзора.

Теперь, если сообщение новое, нам нужно также подключиться к крюку post_updated, потому что только тогда у нас есть фактическая запись в БД, я сохраняю идентификатор, переданный в запись wp_insert_post_data, и использую его для поиска correct post_saved event, добавление комментария.

Wordpress несколько нечетный, всякий раз, когда посещают новый почтовый экран, в базу данных добавляется сообщение типа авто-черновика, затем сохраняется несколько секунд редактирования в другом сообщении, ревизия (если тип сообщения поддерживает его, который встроен в них), это также запускает все события сохранения сообщений. Еще одна проблема, с которой я столкнулся, заключалась в том, чтобы сэкономить сообщение о пересмотре, потому что тогда он запускает крючки post_saved и wp_insert_post_data, вызывая бесконечный цикл.

Было еще несколько интересных вопросов, и если кому-то интересно, я был бы более чем счастлив помочь, к сожалению, код является патентованным, поскольку я написал его для компании, возможно, я могу убедить их открыть источник на некоторый момент (скорее всего, пока нет, поскольку мы находимся по контрактам с клиентами относительно конфиденциальности).

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

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

Смежные вопросы