Изменение статуса сообщения Wordpress при публикации

Я пытаюсь проверить поля в настраиваемом типе сообщения на странице редактирования сообщения панели администратора.

Когда пользователь нажимает «Опубликовать», я хочу проверить поля в данных POST, и измените post_status на «ожидающий», если данные не проходят тесты. Когда это происходит, я бы также хотел добавить ошибки на страницу в области уведомлений администратора.

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

Проблема в том, что это функция Wordpress, которая выполняет публикацию поста. действия, поэтому к тому времени, когда я доберусь до проверки данных, Wordpress уже сохранит сообщение со статусом «опубликовать». Что мне нужно сделать, так это либо предотвратить это обновление, либо снова изменить статус на «ожидает», но мне не удалось найти способ сделать это в API.

Итак, вот порядок действий, который я хотел бы выполнить:

1. admin user edits post data and clicks "Publish"
2. via wp_insert_post, my data validation and post meta save routine is called
3. If data passes validation, post status is "published"
4. Otherwise, post status set to "pending" & message shown in admin notice area

Конечно, кто-то это сделал, но обширный поиск в Google просто приводит меня к тем же страницам, которые кажутся нерелевантными. Может ли кто-нибудь указать мне здесь правильное направление? Заранее спасибо -

ОБНОВЛЕНИЕ:

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

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

Что вам нужно сделать, так это в вашей функции фильтра проверки, если вы определите, что вам нужно отображать ошибки, использовать set_option (), чтобы добавить параметр блога с уникальным именем (я использовал «publish_errors»). Это должен быть HTML-код в блоке div с классом "error".

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

5
задан markh 15 February 2011 в 23:15
поделиться