У меня есть пользовательский тип записи (CPT) под названием event
. У меня есть мета-поле для типа с несколькими полями. Я хотел бы проверить некоторые поля перед публикацией события. Например, если дата события не указана, я хотел бы отобразить информативное сообщение об ошибке, сохранить событие для будущего редактирования, но запретить его публикацию. Является ли статус «ожидающий» для сообщения CPT без всей необходимой информации правильным способом обработки?
Рекомендуется проверять поля CPT и предотвращать публикацию сообщения, но сохранять его для дальнейшего редактирования.
Большое спасибо, Даша
Ответы:
Вы можете запретить посту сохранять все вместе с незначительными взломами JQuery и проверить поля перед сохранением на стороне клиента или на сервере с помощью ajax:
Сначала мы добавляем наш JavaScript для захвата события submit / publish и используем его для отправки нашей собственной функции ajax до фактической отправки:
Затем мы создаем функцию для фактической проверки:
вы всегда можете немного изменить его, чтобы выполнить проверку только для вашего типа записей, добавив условную проверку для
my_publish_admin_hook
функции для вашего типа записей и для проверки на стороне клиента, но я предпочитаю на стороне сервера.источник
pre_submit_validation
вписывается.my_publish_admin_hook
блок перехватывает пост-отправку на стороне клиента, но затем он выполняет AJAX-вызов на сервер (pre-official-submit inpre_submit_validation
), который выполняет проверку на стороне сервера.Метод состоит из двух этапов: во-первых, функция для сохранения данных вашего пользовательского поля метабокса (подключенная к save_post), а во-вторых, функция для чтения этого нового post_meta (который вы только что сохранили), проверки его и изменения результата сохранение по мере необходимости (также подключается к save_post, но после первого). Функция проверки, если проверка не пройдена, фактически изменяет post_status обратно на «ожидающий», эффективно предотвращая публикацию публикации.
Так как функция save_post вызывается много раз, каждая функция имеет проверки, которые выполняются только тогда, когда пользователь хочет опубликовать, и только для вашего пользовательского типа записи (mycustomtype).
Я также обычно добавляю некоторые пользовательские уведомления, чтобы помочь пользователю понять, почему его публикация не публиковалась, но добавить его сюда немного сложнее ...
Я не тестировал этот точный код, но это упрощенная версия того, что я делал в крупномасштабных пользовательских типах пост-настроек.
Для нескольких полей метабокса просто добавьте больше маркеров завершения, получите больше post_meta и сделайте больше тестов.
источник
Вы должны проверить / проверить значение вашего метаполя на ajax, т.е. когда пользователь нажмет кнопку «Опубликовать / обновить». Здесь я проверяю продукт woocommerce, имеющий метаполе "product_number" для пустого значения.
После этого добавьте функцию обработчика AJAX,
источник
Просто хотел добавить, что для чтения пост-переменных, используя решение Bainternet, вам придется анализировать строку с
$_POST['form_data']
помощьюparse_str
функции PHP (просто чтобы сэкономить вам время на исследования).Затем вы можете получить доступ к каждой переменной, просто используя
$varname
. Например, если у вас есть мета-поле с именем «my_meta», вы получите к нему доступ следующим образом:источник