Validación de valores de metacuadros personalizados y campos obligatorios

16

Algo que nunca he visto cubierto es la mejor manera de validar que los campos de formulario específicos se completen correctamente para los meta cuadros de tipo de publicación personalizada.

Estoy buscando obtener opiniones de expertos sobre la mejor manera de validar campos personalizados para cualquier metaboxes que uno pueda crear. Mi interés es:

  • Asegurar que la validación de campo se realice antes de que se publique / actualice
  • utilizando una clase / código que no entre en conflicto con otros JavaScript de WordPress
  • le permite definir campos específicos según sea necesario, mientras que otros podrían ser opcionales
  • validar campos basados ​​en reglas personalizables que incluyen expresiones regulares para cosas como el formato de correo electrónico
  • controlar la visualización de cualquier error / aviso

¡Gracias por adelantado!

NetConstructor.com
fuente

Respuestas:

21

La forma más fácil es agregar validación de Javascript a través del complemento jQuery Validate . Aquí está el tutorial más básico:

Cerca de su llamada add_meta_box, ponga en cola el complemento jQuery Validate, así como un archivo JS para su script simple:

add_action('admin_enqueue_scripts', 'add_my_js');   
function add_my_js(){    
  wp_enqueue_script('my_validate', 'path/to/jquery.validate.min.js', array('jquery'));
  wp_enqueue_script('my_script_js', 'path/to/my_script.js');
}

Luego, en my_script.js incluya lo siguiente:

jQuery().ready(function() {
    jQuery("#post").validate();
});

Esto permitirá la validación en el formulario de publicación. Luego, en la devolución de llamada add_meta_box donde define los campos personalizados, agregaría una clase "obligatoria" para cada campo que desee validar, de esta manera:

<input type="text" name="my_custom_text_field" class="required"/>

Todos los campos con "obligatorio" en su clase se validarán cuando la publicación se guarde / publique / actualice. Todas las otras opciones de validación (reglas, estilo de error, etc.) se pueden configurar en la función document.ready en my_script.js; consulte los documentos de jQuery Validate para ver todas las opciones.

danblaker
fuente
Gracias, lo intentaré mañana, pero ¿podría explicar cómo hacer diferentes validaciones? Por ejemplo, validar una dirección de correo electrónico correcta, validar que no hay más de o al menos XX caracteres, que se completa un campo de formulario ... ¿cosas así?
NetConstructor.com
Además, ¿esto se valida antes de que la publicación se guarde / actualice? Si no, ¿cómo puedo hacer eso?
NetConstructor.com
Los ejemplos y la documentación del complemento jQuery Validation (vinculado en mi respuesta) le mostrarán cómo hacer todas esas cosas. La validación se realiza al enviar de forma predeterminada, pero puede activarla en el desenfoque o en el cambio de cualquier elemento de formulario para sus campos personalizados.
danblaker
Implementé esta solución y parece muy prometedor, un problema, sin embargo, ¿qué pongo en el 'submitHandler'? Después de la validación con jquery.validate, Wordpress no hace nada (guardar buttun permanece en estado animado). ¿Cómo le devuelvo el bebé a WP?
mike23
2
Si solo está tratando de que el botón Publicar vuelva a su estado normal cuando un campo requerido está vacío (o alguna otra validación falla), no debería necesitar hacer nada con submitHandler; solo edite el código validate () para cambiar el botón cuando falle la validación. Esto funciona: jQuery ("# ​​post"). Validate ({invalidHandler: function () {jQuery ('# publicar'). RemoveClass ('button-primary-disabled'); jQuery ('# ajax-loading'). Css ('visibilidad', 'oculto');}});
danblaker
2

El código básico completo para agregar jQuery Validation:

  1. Poner en cola el script de validación. Supongo que jQuery ya está conquistado.

    add_action('admin_enqueue_scripts',function($id){
        $validation',$validation_js_url = #your validation.js source;
        wp_register_script( 'validation',$validation_js_url,array(),'',true );
        wp_enqueue_script( 'validation' );
    });
  2. En el archivo js o etiqueta de script:

    jQuery(document).ready(function($){
        var form = $("form[name='post']");
        $(form).find("input[type='submit']").click(function(e){
            e.preventDefault();
            $(form).validate();
    
            if($(form).valid())
            {
                $("#ajax-loading").show();
                $(form).submit();
            }else{
                $("#publish").removeClass().addClass("button-primary");
                $("#ajax-loading").hide();
            }
        });
    });
  3. Hecho :)

Ijas Ameenudeen
fuente
¿Qué pasa en el lado del servidor?
NetConstructor.com
2

Usé este código, muy útil, justo cambiado:

$(form).find("input[type='submit']").click(function(e){

A:

$(form).find("#publish").click(function(e){

Porque si tienes otro formulario dentro del formulario principal, inicia el script.

Y:

$(form).submit();

A:

$(this).submit();

Porque la primera línea solo guarda la publicación como borrador y ya no puedes publicarla.

Escrito todo aquí: http://allgraphics.it/blog/2012/10/jquery-validation-sui-campi-di-input-postcustom-post-di-wordpress/

Ricky
fuente
2

Encontré este enfoque para resolver el problema de validar campos de metabox usando código PHP

https://tommcfarlin.com/post-meta-data-error-messages/

Espero que esto te ayude (funciona para mí en un escenario similar)

Julio Garcés Teuber
fuente
Si bien este enlace puede responder la pregunta, es mejor incluir las partes esenciales de la respuesta aquí y proporcionar el enlace como referencia. Las respuestas de solo enlace pueden volverse inválidas si la página vinculada cambia.
Gabriel
0

Si desea poder validar el lado del servidor, la opción más fácil es usar Campos personalizados avanzados para definir sus diseños de campo personalizados, y luego el complemento Campo validado para configurar su validación por campo en el Administrador de WordPress.

doble filo
fuente