Это один оказался крепкий орешек взломать, но я узнал много вещей, которые я чувствую, что я должен поделиться любой другой души, глядя повторить эту функциональность.
Во-первых, вам нужно указать, является ли текущее сохранение почты обновлением или публикацией. Ака - это новое сообщение, или нет? Я подумал о умной маленькой хитрости, чтобы проверить это:
$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 (которые мне доверяют, они захотят, чтобы вы, даже если они изначально сказали, что не беспокоиться об этом), сделают обзор опубликованным тем же типом сообщения как сообщение, которое он просматривает, и сделать его ребенком. Сохраните исходный родительский элемент в метатете почты вместе с любой другой необходимой информацией. Таким образом, вам не придется заниматься перестройкой страниц редактирования.
Проверьте, работает ли [Изменить поток] (http://wordpress.org/extend/plugins/edit-flow/). – brasofilo