Tengo un tipo de mensaje personalizado (CPT) llamado event
. Tengo un cuadro de meta para el tipo con varios campos. Me gustaría validar algunos campos antes de publicar un evento. Por ejemplo, si no se especifica la fecha de un evento, me gustaría mostrar un mensaje de error informativo, guardar el evento para su posterior edición, pero evitar que se publique ese evento. ¿Es el estado 'pendiente' para una publicación de CPT sin toda la información necesaria la forma correcta de tratarla?
¿Cuál es la mejor práctica para hacer la validación de campos de CPT y evitar que se publique una publicación, pero guárdela para su futura edición?
Muchas gracias, Dasha.
Respuestas:
Puede evitar que la publicación se guarde junto con hacks menores de JQuery y validar los campos antes de guardar en el lado del cliente o del servidor con ajax:
primero agregamos nuestro JavaScript para capturar el evento de envío / publicación y lo usamos para enviar nuestra propia función ajax antes del envío real:
luego creamos la función para hacer la validación real:
siempre puede cambiarlo un poco para hacer la validación solo para su tipo de publicación agregando una verificación condicional para que
my_publish_admin_hook
funcione para su tipo de publicación y validar en el lado del cliente, pero prefiero en el lado del servidor.fuente
pre_submit_validation
encaja.my_publish_admin_hook
bloque intercepta el envío desde el lado del cliente, pero luego realiza una llamada AJAX al servidor (pre-envío oficialpre_submit_validation
) que realiza la validación del lado del servidor.Hay dos pasos para el método: primero, una función para guardar sus datos de campo de metabox personalizados (enganchado a save_post), y segundo, una función para leer ese nuevo post_meta (que acaba de guardar), validarlo y modificar el resultado de guardar según sea necesario (también enganchado a save_post, pero después del primero). La función del validador, si la validación falla, en realidad cambia el post_status de nuevo a "pendiente", evitando efectivamente la publicación de la publicación.
Como la función save_post se llama mucho, cada función tiene comprobaciones que solo se ejecutan cuando el usuario quiere publicar, y solo para su tipo de publicación personalizada (mycustomtype).
También normalmente agrego algunos mensajes de aviso personalizados para ayudar al usuario a saber por qué su publicación no se publicó, pero es un poco complicado incluirlos aquí ...
No he probado este código exacto, pero es una versión simplificada de lo que he hecho en configuraciones de tipo de publicación personalizada a gran escala.
Para múltiples campos de metabox, simplemente agregue más marcadores de finalización y recupere más post_meta y realice más pruebas.
fuente
debe verificar / validar su valor de metacampo en ajax, es decir, cuando el usuario presiona el botón "Publicar / Actualizar" Aquí estoy validando el producto woocommerce que tiene un metacampo "product_number" para un valor vacío.
Después de eso, agregue la función de controlador ajax,
fuente
Solo quería agregar eso para leer las variables de publicación, usando la solución de Bainternet, tendrá que analizar la cadena
$_POST['form_data']
usando laparse_str
función PHP (solo para ahorrarle algo de tiempo de investigación).Luego puede acceder a cada variable simplemente usando
$varname
. Por ejemplo, si tiene un metacampo llamado "my_meta", accedería de esta manera:fuente