J'ai un type de message personnalisé (CPT) appelé event
. J'ai une meta box pour le type avec plusieurs champs. Je souhaite valider certains champs avant de publier un événement. Par exemple, si la date d'un événement n'est pas spécifiée, je voudrais afficher un message d'erreur informatif, enregistrer l'événement pour une modification ultérieure, mais empêcher la publication de cet événement. Le statut «en attente» pour un poste CPT sans toutes les informations nécessaires est-il la bonne façon de le traiter?
Quelle est la meilleure pratique pour effectuer la validation des champs CPT et empêcher la publication d'un article, mais enregistrez-le pour une édition ultérieure.
Merci beaucoup, Dasha
Réponses:
Vous pouvez empêcher la publication de tout enregistrer avec des hacks JQuery mineurs et valider les champs avant de les enregistrer côté client ou côté serveur avec ajax:
nous ajoutons d'abord notre JavaScript pour capturer l'événement de soumission / publication et l'utiliser pour soumettre notre propre fonction ajax avant la soumission réelle:
puis nous créons la fonction pour effectuer la validation proprement dite:
vous pouvez toujours le modifier un peu pour faire la validation uniquement pour votre type de publication en ajoutant une vérification conditionnelle pour
my_publish_admin_hook
fonctionner pour votre type de publication et pour valider côté client mais je préfère côté serveur.la source
pre_submit_validation
s'intègre.my_publish_admin_hook
bloc intercepte la soumission côté client - mais il effectue ensuite un appel AJAX au serveur (pré-soumission officiellepre_submit_validation
) qui effectue la validation côté serveur.La méthode comporte deux étapes: premièrement, une fonction pour enregistrer vos données de champ de métabox personnalisé (accroché à save_post), et deuxièmement, une fonction pour lire ce nouveau post_meta (que vous venez d'enregistrer), le valider et modifier le résultat de enregistrer si nécessaire (également accroché à save_post, mais après le premier). La fonction de validation, en cas d'échec de la validation, redéfinit en fait le post_status sur "en attente", empêchant ainsi la publication de la publication.
Puisque la fonction save_post est souvent appelée, chaque fonction a des vérifications à exécuter uniquement lorsque l'utilisateur veut publier, et uniquement pour votre type de publication personnalisé (mycustomtype).
J'ajoute généralement des messages de notification personnalisés pour aider l'utilisateur à savoir pourquoi leur message n'a pas été publié, mais ceux-ci sont devenus un peu compliqués à inclure ici ...
Je n'ai pas testé ce code exact, mais c'est une version simplifiée de ce que j'ai fait dans les configurations de type de message personnalisé à grande échelle.
Pour plusieurs champs de metabox, ajoutez simplement plus de marqueurs d'achèvement et récupérez plus de post_meta et faites plus de tests.
la source
vous devez vérifier / valider la valeur de votre méta-champ sur ajax, c'est-à-dire lorsque l'utilisateur clique sur le bouton "Publier / Mettre à jour". Ici, je valide un produit woocommerce ayant le champ méta "numéro_produit" pour une valeur vide.
Après cela, ajoutez la fonction de gestionnaire ajax,
la source
Je voulais juste ajouter que pour lire les variables de publication, en utilisant la solution de Bainternet, vous devrez analyser la chaîne en
$_POST['form_data']
utilisant laparse_str
fonction PHP (juste pour vous faire gagner du temps de recherche).Ensuite, vous pouvez accéder à chaque variable en utilisant simplement
$varname
. Par exemple, si vous avez un champ méta appelé "my_meta", vous y accéderez comme ceci:la source