Sprawdzanie poprawności wartości niestandardowych pól i wymaganych pól


16

Coś, czego nigdy nie widziałem, to najlepszy sposób na sprawdzenie, czy określone pola formularza są poprawnie wypełnione dla niestandardowych meta pól typu post.

Chcę uzyskać opinie ekspertów na temat najlepszych metod sprawdzania poprawności niestandardowych pól dla dowolnych metaboksów, które można utworzyć. Moje zainteresowania to:

  • upewnij się, że weryfikacja pola ma miejsce przed opublikowaniem / zaktualizowaniem posta
  • wykorzystując klasę / kod, który nie powoduje konfliktu z innym skryptem javascript
  • pozwala zdefiniować określone pola zgodnie z wymaganiami, podczas gdy inne mogą być opcjonalne
  • sprawdzaj poprawność pól na podstawie dostosowywalnych reguł, w tym wyrażeń regularnych dla takich rzeczy jak format wiadomości e-mail
  • kontrolować wizualne wyświetlanie wszelkich błędów / powiadomień

Z góry dziękuję!

Odpowiedzi:


21

Najprostszym sposobem jest dodanie sprawdzania poprawności Javascript za pomocą wtyczki jQuery Validate . Oto najbardziej podstawowy przewodnik:

W pobliżu wywołania add_meta_box umieść w kolejce wtyczkę jQuery Validate oraz plik JS dla prostego skryptu:

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

Następnie w my_script.js dołącz następujące:

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

Umożliwi to sprawdzenie poprawności na formularzu postu. Następnie w wywołaniu zwrotnym add_meta_box, w którym definiujesz pola niestandardowe, dodajesz „wymaganą” klasę dla każdego pola, które chcesz sprawdzić, w następujący sposób:

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

Wszystkie pola z „wymaganymi” w swojej klasie zostaną zatwierdzone, gdy post zostanie zapisany / opublikowany / zaktualizowany. Wszystkie pozostałe opcje sprawdzania poprawności (reguły, stylizacja błędów itp.) Można ustawić w funkcji document.ready w my_script.js; sprawdź jQuery Validate docs dla wszystkich opcji.


Dziękuję, spróbuję jutro, ale czy mógłbyś wyjaśnić, jak wykonać różne walidacje. Na przykład sprawdzanie poprawności adresu e-mail, sprawdzanie, czy nie ma więcej niż co najmniej XX znaków, wypełnianie pola formularza ... czy coś takiego?
NetConstructor.com

Czy to też sprawdza się przed zapisaniem / aktualizacją postu? Jeśli nie, jak mogę to zrobić?
NetConstructor.com

Przykłady i dokumentacja wtyczki jQuery Validation (link w mojej odpowiedzi) pokażą Ci, jak to zrobić. Walidacja odbywa się domyślnie po przesłaniu, ale możesz ją uruchomić w przypadku rozmycia lub zmiany dowolnego elementu formularza dla pól niestandardowych.
danblaker

Wdrożyłem to rozwiązanie i wygląda to bardzo obiecująco, choć jednym problemem jest to, co mam umieścić w „submHandler”? Po sprawdzeniu poprawności za pomocą jquery.validate Wordpress nic nie robi (save buttun pozostaje w stanie animacji). Jak przekazać dziecko z powrotem do WP?
mike23

2
Jeśli po prostu próbujesz przywrócić przycisk Publikuj do normalnego stanu, gdy wymagane pole jest puste (lub niektóre inne sprawdzanie poprawności się nie powiedzie), nie powinieneś nic robić z submHandler; po prostu edytuj kod validate (), aby zmienić przycisk, gdy sprawdzanie poprawności się nie powiedzie. Działa to: jQuery („# post”). Validate ({invalidHandler: function () {jQuery ('# opublikuj'). RemoveClass ('button-primary-disabled'); jQuery ('# ajax-loading'). Css („widoczność”, „ukryty”);}});
danblaker

2

Pełny kod podstawowy, aby dodać sprawdzanie poprawności jQuery:

  1. Kolejkuj skrypt sprawdzania poprawności. Zakładam, że jQuery jest już uruchomione.

    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. W pliku js lub znaczniku skryptu:

    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. Gotowy :)


A co ze stroną serwera?
NetConstructor.com

2

Użyłem tego kodu, bardzo pomocne, po prostu zmieniłem:

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

Do:

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

Ponieważ jeśli masz inny formularz w formularzu głównym, uruchom skrypt.

I:

$(form).submit();

Do:

$(this).submit();

Ponieważ w pierwszym wierszu zapisz tylko post jako wersję roboczą i nie możesz go już opublikować.

Napisał wszystko tutaj: http://allgraphics.it/blog/2012/10/jquery-validation-sui-campi-di-input-postcustom-post-di-wordpress/


2

Znalazłem to podejście do rozwiązania problemu sprawdzania poprawności pól metaboksu za pomocą kodu PHP

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

Mam nadzieję, że ci to pomoże (działa dla mnie w podobnym scenariuszu)


Chociaż ten link może odpowiedzieć na pytanie, lepiej dołączyć tutaj istotne części odpowiedzi i podać link w celach informacyjnych. Odpowiedzi zawierające tylko łącze mogą stać się nieprawidłowe, jeśli zmieni się połączona strona.
Gabriel,

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.