Я пытаюсь проверить поля для пользовательского типа сообщения в панели администратора Редактировать страницу сообщения.
Когда пользователь нажимает «Опубликовать», я хочу проверить поля в данных 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 просто приводит меня к тем же, на первый взгляд, неуместным страницам. Может ли кто-нибудь указать мне правильное направление здесь? Заранее спасибо -
UPDATE
Итак, RichardML действительно был прав: подключение к фильтру wp_insert_post_data дало мне подходящее место для проверки полей страницы редактирования сообщения администратора. Однако я обновляю это, чтобы заметить, какова остальная часть решения, в частности, узнать причину, указанную в области уведомлений администратора.
Во-первых, вы не можете просто вывести данные или задать поле, потому что страница администратора является результатом перенаправления, и к тому времени, когда вы снова создадите страницу публикации администратора, действие admin_notices уже исчезло. Уловка была чем-то, что я подобрал на другом форуме, и он хакерский, но он работает.
Что вам нужно сделать, так это воспользоваться функцией фильтра проверки. Если вы решите, что вам нужно будет отображать ошибки, используйте set_option (), чтобы добавить опцию блога с уникальным именем (я использовал «publish_errors»). Это должен быть HTML-код в div с классом «error».
Вам также необходимо добавить хук действия для 'admin_notices', указывающий на функцию, которая проверяет наличие опции 'publish_errors', и, если она находит ее, печатает ее на странице и удаляет ее с помощью delete_option ( ).