Validarea valorilor pentru câmpuri Meta Box personalizate și câmpuri obligatorii

12 sept. 2010, 19:48:27
Vizualizări: 20.6K
Voturi: 17

Un aspect care nu am văzut să fie abordat este cea mai bună modalitate de a valida completarea corectă a câmpurilor specifice pentru meta box-urile tipurilor de postări personalizate.

Caut să obțin opinii de la experți despre cum să validez cel mai bine câmpurile personalizate pentru orice metabox-uri care ar putea fi create. Interesele mele sunt:

  • asigurarea că validarea câmpurilor are loc înainte ca postarea să fie publicată/actualizată
  • utilizarea unei clase/cod care nu intră în conflict cu alte scripturi JavaScript din WordPress
  • permite definirea anumitor câmpuri ca fiind obligatorii în timp ce altele pot fi opționale
  • validarea câmpurilor bazată pe reguli personalizabile inclusiv regex pentru lucruri precum formatul de email
  • controlul afișării vizuale a oricăror erori/notificări

Mulțumesc anticipat!

0
Toate răspunsurile la întrebare 5
5
21

Cea mai ușoară metodă este adăugarea validării Javascript prin intermediul plugin-ului jQuery Validate. Iată cel mai simplu ghid pas cu pas:

Lângă apelul tău add_meta_box, încarcă plugin-ul jQuery Validate precum și un fișier JS pentru scriptul tău simplu:

add_action('admin_enqueue_scripts', 'add_my_js');   
function add_my_js(){    
  wp_enqueue_script('my_validate', 'cale/către/jquery.validate.min.js', array('jquery'));
  wp_enqueue_script('my_script_js', 'cale/către/my_script.js');
}

Apoi, în my_script.js include următoarele:

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

Aceasta va activa validarea pe formularul de postare. Apoi, în callback-ul add_meta_box unde definești câmpurile personalizate, vei adăuga o clasă "required" pentru fiecare câmp pe care dorești să-l validezi, astfel:

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

Toate câmpurile cu clasa "required" vor fi validate atunci când postarea este salvată/publicată/actualizată. Toate celelalte opțiuni de validare (reguli, stilizare erori etc.) pot fi setate în funcția document.ready din my_script.js; consultă documentația jQuery Validate pentru toate opțiunile disponibile.

28 sept. 2010 01:13:07
Comentarii

Mulțumesc, voi încerca asta mâine, dar te rog să-mi explici cum să fac diferite validări. De exemplu, validarea pentru o adresă de email corectă, validarea că nu sunt mai mult sau cel puțin XX de caractere, că un câmp de formular este completat... lucruri de genul acesta?

NetConstructor.com NetConstructor.com
29 sept. 2010 11:54:24

De asemenea, această validare se face înainte ca postarea să fie salvată/actualizată? Dacă nu, cum pot face asta?

NetConstructor.com NetConstructor.com
29 sept. 2010 11:55:04

Exemplele și documentația pentru plugin-ul jQuery Validation (link-ul din răspunsul meu) îți vor arăta cum să faci toate aceste lucruri. Validarea se întâmplă implicit la trimitere, dar poți să o declanșezi la pierderea focusului (blur) sau la schimbare pentru orice element de formular pentru câmpurile tale personalizate.

danblaker danblaker
29 sept. 2010 20:13:25

Am implementat această soluție și pare foarte promițătoare, dar am o problemă: ce să pun în 'submitHandler'? După validarea cu jquery.validate, WordPress nu face nimic (butonul de salvare rămâne în starea animată). Cum pot să retrimit controlul înapoi la WP?

mike23 mike23
11 mai 2011 12:16:15

Dacă încerci doar să readuci butonul de Publicare la starea normală când un câmp obligatoriu este gol (sau când validarea eșuează din alt motiv), nu ar trebui să faci nimic cu submitHandler; doar modifică codul validate() pentru a schimba butonul când validarea eșuează. Această soluție funcționează: jQuery("#post").validate({ invalidHandler: function() { jQuery('#publish').removeClass('button-primary-disabled'); jQuery('#ajax-loading').css('visibility', 'hidden'); } });

danblaker danblaker
14 mai 2011 01:14:37
1

Am găsit această abordare pentru a rezolva problema validării câmpurilor din metabox folosind cod PHP

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

Sper că te ajută (la mine a funcționat într-un scenariu similar)

9 iun. 2016 20:28:48
Comentarii

Deși acest link ar putea răspunde la întrebare, este mai bine să incluzi părțile esențiale ale răspunsului aici și să furnizezi linkul pentru referință. Răspunsurile care conțin doar linkuri pot deveni invalide dacă pagina la care se face referință se modifică.

Gabriel Gabriel
9 iun. 2016 20:50:58
1

Codul de bază complet pentru a adăuga Validare jQuery:

  1. Încarcă scriptul de validare. Presupun că jQuery este deja încărcat.

    add_action('admin_enqueue_scripts',function($id){
        $validation',$validation_js_url = #sursa ta validation.js;
        wp_register_script( 'validation',$validation_js_url,array(),'',true );
        wp_enqueue_script( 'validation' );
    });
    
  2. În fișierul js sau tag-ul 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. Gata :)

15 mai 2012 20:50:40
Comentarii

Și pe partea de server?

NetConstructor.com NetConstructor.com
28 iun. 2012 09:12:31
0

Am folosit acest cod, foarte util, doar am modificat:

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

În:

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

Pentru că dacă ai un alt formular în interiorul formularului principal, acesta începe scriptul.

Și:

$(form).submit();

În:

$(this).submit();

Pentru că prima linie salvează postarea doar ca draft și nu o mai poți publica ulterior.

Totul este scris aici: http://allgraphics.it/blog/2012/10/jquery-validation-sui-campi-di-input-postcustom-post-di-wordpress/

20 nov. 2012 12:46:42
0

Dacă doriți să puteți valida pe partea de server, cea mai ușoară opțiune este să folosiți Advanced Custom Fields pentru a defini layout-urile câmpurilor personalizate, iar apoi add-on-ul Validated Field pentru a seta validarea pe fiecare câmp în Admin-ul WordPress.

24 iun. 2015 01:47:38