Convalida di valori personalizzati di Meta Box e campi obbligatori


16

Qualcosa che non ho mai visto coperto è il modo migliore per convalidare che i campi specifici del modulo siano compilati correttamente per meta box di tipo post personalizzato.

Sto cercando di ottenere pareri di esperti sul modo migliore per convalidare i campi personalizzati per qualsiasi metabox che si possa creare. Il mio interesse è:

  • assicurarsi che la validazione sul campo avvenga prima che il post sia pubblicato / aggiornato
  • utilizzando una classe / codice che non è in conflitto con altri wordpress javascript
  • ti permette di definire campi specifici come richiesto mentre altri potrebbero essere opzionali
  • convalida i campi in base a regole personalizzabili tra cui regex per cose come il formato e-mail
  • controlla la visualizzazione visiva di eventuali errori / avvisi

Grazie in anticipo!

Risposte:


21

Il modo più semplice è aggiungere la convalida Javascript tramite il plugin jQuery Validate . Ecco la procedura dettagliata più semplice:

Vicino alla tua chiamata add_meta_box, accoda il plug-in jQuery Validate e un file JS per il tuo semplice script:

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');
}

Quindi in my_script.js includere quanto segue:

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

Ciò consentirà la convalida sul modulo di posta. Quindi nel callback add_meta_box in cui si definiscono i campi personalizzati, si aggiungerebbe una classe "obbligatoria" per ogni campo che si desidera convalidare, in questo modo:

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

Tutti i campi con "obbligatorio" nella loro classe verranno convalidati quando il post viene salvato / pubblicato / aggiornato. Tutte le altre opzioni di convalida (regole, stile degli errori, ecc.) Possono essere impostate nella funzione document.ready in my_script.js; controlla i documenti jQuery Convalida per tutte le opzioni.


Grazie, lo proverò domani, ma potresti spiegarmi come fare diverse convalide. Ad esempio la convalida per un indirizzo e-mail corretto, la convalida che non ci siano più o almeno XX caratteri, che un campo modulo sia compilato ... cose del genere?
NetConstructor.com il

Inoltre, questo viene convalidato prima che il post venga salvato / aggiornato? In caso contrario, come posso farlo?
NetConstructor.com il

Gli esempi e la documentazione per il plug-in di convalida jQuery (collegato nella mia risposta) ti mostreranno come fare tutte queste cose. La convalida si verifica all'invio per impostazione predefinita, ma è possibile attivarla su sfocatura o modifica per qualsiasi elemento del modulo per i campi personalizzati.
danblaker,

Ho implementato questa soluzione e sembra molto promettente, un problema però, cosa inserisco in "submitHandler"? Dopo la convalida con jquery.validate, Wordpress non fa nulla (salva il pulsante di avvio rimane nello stato animato). Come posso restituire il bambino a WP?
mike23,

2
Se stai solo cercando di riportare il pulsante Pubblica al suo stato normale quando un campo richiesto è vuoto (o se qualche altra validazione fallisce), non dovresti fare nulla con submitHandler; basta modificare il codice validate () per cambiare il pulsante quando la validazione fallisce. Funziona: jQuery ("# ​​post"). Validate ({invalidHandler: function () {jQuery ('# publishing'). RemoveClass ('button-primary-disabled'); jQuery ('# ajax-loading'). Css ('visibilità', 'nascosto');}});
danblaker,

2

Il codice di base completo per aggiungere la convalida jQuery:

  1. Accodare lo script di convalida. Presumo che jQuery sia già richiesto.

    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. Nel file js o tag 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. Fatto :)


Che dire sul lato server?
NetConstructor.com il

2

Ho usato questo codice, molto utile, Justa è cambiata:

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

Per:

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

Perché se hai un altro modulo all'interno del modulo principale, questo avvia lo script.

E:

$(form).submit();

Per:

$(this).submit();

Perché la prima riga salva solo il post come bozza e non puoi più pubblicarlo.

Scritto tutto qui: http://allgraphics.it/blog/2012/10/jquery-validation-sui-campi-di-input-postcustom-post-di-wordpress/


2

Ho trovato questo approccio per risolvere il problema di validare i campi metabox usando il codice PHP

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

Spero che questo ti aiuti (funziona per me in uno scenario simile)


Sebbene questo collegamento possa rispondere alla domanda, è meglio includere qui le parti essenziali della risposta e fornire il collegamento come riferimento. Le risposte di solo collegamento possono diventare non valide se la pagina collegata cambia.
Gabriel,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.