J'ai une taxonomie personnalisée, "position", avec plusieurs termes pour un type de message personnalisé, "employé" dans l'admin. Je souhaite valider le formulaire pour exiger la sélection d'un poste lorsque vous enregistrez/mettez à jour un message.
Comment valider et faire de la taxonomie personnalisée du poste un champ obligatoire dans l'administrateur wordpress?
De plus, j'aimerais afficher un message d'erreur pour indiquer aux utilisateurs qu'une position doit être vérifiée.
Merci!
après ce tutoriel, j'ai remplacé la metabox de taxonomie standard par une metabox personnalisée dotée d'un ensemble de boutons radio. (le tutoriel utilise un select, mais ce n'est pas si différent). De cette façon, vous pouvez vous assurer que quelque chose est sélectionné ET limiter les sélections à quelques options prédéfinies.
http://shibashake.com/wordpress-theme/wordpress-custom-taxonomy-input-panels
une note explique comment supprimer la metabox par défaut, mais vous pouvez empêcher l'affichage de l'interface utilisateur en déclarant show-ui sur false lorsque vous définissez votre taxonomie.
Je dirais, accrochez-vous dans pre_post_update
et vérifiez ce qui est donné via $_POST
...
J'ai posté une réponse à une question très similaire here qui fournit un "cadre" pour valider les champs de publication (titre, contenu ...), les méta-champs (toute métaboxe) et les taxonomies (catégorie, tags, custom) par ajax avant de soumettre le message.
En supposant que vous utilisiez une taxonomie hiérarchique, cela a fonctionné pour moi, changez le mot "tx" pour créer ce que vous appelez votre taxonomie. Notez que si WP change leur structure HTML à l'avenir ou leurs conventions de nommage, cela pourrait ne pas fonctionner.
add_action('admin_footer', function() {
?>
<script type="text/javascript">
jQuery(document).ready(function ($) {
//taxonomy
var tx = 'post-type';
var $scope = $('#' + tx + '-all > ul');
$('#publish').click(function(){
if ($scope.find('input:checked').length > 0) {
alert('found');
return true;
} else {
alert('not found');
return false;
}
});
});
</script>
<?php
});