Validation des valeurs de la boîte Meta personnalisée et des champs obligatoires

16

Quelque chose que je n'ai jamais vu couvert est le meilleur moyen de valider que des champs de formulaire spécifiques sont correctement remplis pour les métadonnées de type de message personnalisé.

Je cherche à obtenir des avis d'experts sur la meilleure façon de valider les champs personnalisés pour toutes les métaboxes que l'on pourrait créer. Mon intérêt est de:

  • s'assurer que la validation sur le terrain a lieu avant la publication / mise à jour du message
  • en utilisant une classe / code qui n'entre pas en conflit avec d'autres javascript wordpress
  • vous permet de définir des champs spécifiques selon les besoins tandis que d'autres peuvent être facultatifs
  • valider les champs en fonction de règles personnalisables, y compris l'expression régulière pour des choses comme le format de courrier électronique
  • contrôler l'affichage visuel de toute erreur / notification

Merci d'avance!

NetConstructor.com
la source

Réponses:

21

La façon la plus simple est d'ajouter la validation Javascript via le plugin jQuery Validate . Voici la procédure pas à pas la plus élémentaire:

Près de votre appel add_meta_box, mettez en file d'attente le plugin jQuery Validate ainsi qu'un fichier JS pour votre 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');
}

Ensuite, dans my_script.js, incluez les éléments suivants:

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

Cela permettra la validation sur le formulaire de publication. Ensuite, dans le rappel add_meta_box où vous définissez les champs personnalisés, vous ajouteriez une classe "obligatoire" pour chaque champ que vous souhaitez valider, comme ceci:

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

Tous les champs avec "requis" dans leur classe seront validés lorsque le message sera enregistré / publié / mis à jour. Toutes les autres options de validation (règles, style d'erreur, etc.) peuvent être définies dans la fonction document.ready dans my_script.js; consultez les documents jQuery Validate pour toutes les options.

danblaker
la source
Merci, je vais essayer demain mais pourriez-vous expliquer comment faire différentes validations. Par exemple, valider pour une adresse e-mail correcte, valider qu'il n'y a pas plus ou au moins XX caractères, qu'un champ de formulaire est rempli ... des choses comme ça?
NetConstructor.com
En outre, cela valide-t-il avant que le message ne soit enregistré / mis à jour? Sinon, comment faire?
NetConstructor.com
Les exemples et la documentation du plugin jQuery Validation (lié dans ma réponse) vous montreront comment faire toutes ces choses. La validation se produit lors de la soumission par défaut, mais vous pouvez la déclencher en cas de flou ou de modification pour tout élément de formulaire pour vos champs personnalisés.
danblaker
J'ai implémenté cette solution et elle semble très prometteuse, un problème cependant, que dois-je mettre dans le «submitHandler»? Après validation avec jquery.validate, Wordpress ne fait rien (la sauvegarde de buttun reste à l'état animé). Comment puis-je transmettre le bébé à WP?
mike23
2
Si vous essayez simplement de ramener le bouton Publier à son état normal lorsqu'un champ obligatoire est vide (ou qu'une autre validation échoue), vous ne devriez rien faire avec le submitHandler; modifiez simplement le code validate () pour changer le bouton lorsque la validation échoue. Cela fonctionne: jQuery ("# ​​post"). Validate ({invalidHandler: function () {jQuery ('# publish'). RemoveClass ('button-primary-disabled'); jQuery ('# ajax-loading'). Css ('visibilité', 'caché');}});
danblaker
2

Le code de base complet pour ajouter la validation jQuery:

  1. Mettez le script de validation en file d'attente. Je suppose que jQuery est déjà interrogé.

    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. Dans le fichier js ou la balise 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. Terminé :)

Ijas Ameenudeen
la source
Et côté serveur?
NetConstructor.com
2

J'ai utilisé ce code, très utile, juste changé:

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

À:

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

Parce que si vous avez un autre formulaire dans le formulaire principal, lancez le script.

Et:

$(form).submit();

À:

$(this).submit();

Parce que la première ligne enregistre uniquement le message en tant que brouillon et vous ne pouvez plus le publier.

Tout écrit ici: http://allgraphics.it/blog/2012/10/jquery-validation-sui-campi-di-input-postcustom-post-di-wordpress/

Ricky
la source
2

J'ai trouvé cette approche pour résoudre le problème de la validation des champs de métabox en utilisant du code PHP

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

J'espère que cela vous aidera (fonctionne pour moi dans un scénario similaire)

Julio Garcés Teuber
la source
Bien que ce lien puisse répondre à la question, il est préférable d'inclure les parties essentielles de la réponse ici et de fournir le lien de référence. Les réponses de lien uniquement peuvent devenir invalides si la page liée change.
Gabriel
0

Si vous souhaitez pouvoir valider côté serveur, l'option la plus simple consiste à utiliser les champs personnalisés avancés pour définir vos dispositions de champs personnalisés, puis le module complémentaire Champ validé pour définir votre validation par champ dans l'administrateur WordPress.

doubleharp
la source