Dans les parties 1 et 2 de notre série de tutoriels de modèles de boîtes méta personnalisées, nous avons appris à créer un tableau de champs à parcourir en boucle et à créer une méta-boîte personnalisée avec vos champs standard. Ajoutons maintenant un peu de JavaScript pour des champs sophistiqués mais très utiles..
Chacun des champs que nous couvrons dans ce didacticiel nécessitera jQuery et l'interface utilisateur jQuery. Heureusement, WordPress facilite grandement leur utilisation avec wp_enqueue_script
, et à partir de la version 3.3, toutes les interactions et tous les widgets de l'interface utilisateur de jQuery sont fournis avec WordPress..
Puisque nous travaillons sur une page qui met déjà en file d'attente jQuery, nous pouvons l'ignorer, mais nous devrons obtenir le Datepicker de l'interface utilisateur jQuery. Nous aurons également besoin de créer notre propre feuille de style car le CSS nécessaire n’est pas encore fourni dans WordPress - bien qu’ils travaillent à cela..
if (is_admin ()) wp_enqueue_script ('jquery-ui-datepicker'); wp_enqueue_style ('jquery-ui-custom', get_template_directory_uri (). '/ css / jquery-ui-custom.css');
Nous avons seulement besoin de les charger dans l’administrateur, et non au début du site, alors enveloppez les fonctions dans un conditionnel. La première fonction appelle le sélecteur de date et charge également le noyau de l'interface utilisateur jQuery. La deuxième fonction appellera notre feuille de style jquery-ui-custom.css à partir du dossier css du thème. L'exemple de feuille de style inclus dans le téléchargement au début de ce didacticiel ne nécessite pas d'images. Vous pouvez également créer votre propre thème d'interface utilisateur jQuery..
Maintenant, regardons l'élément de tableau que nous devons ajouter à notre $ custom_meta_fields
tableau que nous avons commencé dans la partie 1.
array ('label' => 'Date', 'desc' => 'Description du champ.', 'id' => $ prefix.'date ',' type '=>' date ')
Ce tableau est presque identique à notre élément de texte. Il comporte une étiquette principale, une description, un identifiant unique et le type de date est défini. Nous allons simplement aller avec une implémentation de base du sélecteur de date dans notre exemple ici, mais si vous avez besoin de pimenter votre utilisation du sélecteur de date, vous pouvez également ajouter d'autres informations au tableau, telles que le format préféré, la localisation. et la plage de dates pour en nommer quelques-uns. Vous pouvez ensuite utiliser ces informations dans l'appelant de script suivant, que nous devons ajouter à l'en-tête de la page:
add_action ('admin_head', 'add_custom_scripts'); function add_custom_scripts () global $ custom_meta_fields, $ post; $ output = ''Ce bit doit être ajouté en dehors de la
$ custom_meta_fields
tableau et en dehors de lashow_custom_meta_box
fonction de rappel pour initialiser le sélecteur de date sur tous les champs avec la classe "datepicker".// date cas 'date': echo '
'. $ field [' desc '].''; Pause;Ce code sera ajouté après la dernière «pause» dans notre commutateur de méta-boîte.
Parfois, vous devez collecter un nombre défini dans une plage exacte ou un multiple de 5. Le curseur de l'interface utilisateur de jQuery est idéal pour cela, car il vous permet de faire glisser et de glisser facilement vers le nombre que vous souhaitez entrer..
wp_enqueue_script ('jquery-ui-slider');
Assurez-vous d'appeler le fichier js en l'ajoutant à vos files d'attente enveloppées is_admin ().
array ('label' => 'Slider', 'desc' => 'Description du champ.', 'id' => $ prefix.'slider ',' type '=>' slider ',' min '= > '0', 'max' => '100', 'step' => '5')
Encore une fois, nous ajoutons cela à notre $ custom_meta_fields
tableau et il y a quelques ajouts spéciaux.
if ($ field ['type'] == 'curseur') $ value = get_post_meta ($ post-> ID, $ field ['id'], true); if ($ value == ") $ value = $ field ['min']; $ output. = 'jQuery (" #'. $ field ['id'] .'-slider ") .slider (value: ' . $ valeur. ', min:'. $ champ ['min']. ', max:'. $ champ ['max']. ', étape:'. $ champ ['étape']. ', diapositive: fonction (événement, ui) jQuery ("# '. $ field [' id '].'") .val (ui.value);); ';
Ajoutez ce morceau de code à la boucle dans le add_custom_scripts
fonction que nous avons créée dans le dernier type de champ. Cela ajoutera le jQuery personnalisé dont nous avons besoin pour configurer le curseur..
// cas du curseur 'curseur': $ value = $ meta! = "? $ meta: '0'; echo '
'. $ field [' desc '].''; Pause;
Encore une fois, nous utilisons simplement un champ de texte pour recevoir la valeur du curseur.
Depuis l’introduction des miniatures sur les publications, nous n’avons pas l'habitude de définir une image avec un méta-champ personnalisé, mais il arrive parfois qu'il soit nécessaire de définir une image autre que la miniature de la publication, en particulier lors de la création d'une image. plugin qui prend en compte que le thème de l'utilisateur peut ne pas supporter les miniatures de publication.
Ce champ ajoutera la possibilité de télécharger une image ou d'en sélectionner une dans le téléchargement de média, d'afficher un aperçu de l'image et d'enregistrer l'ID pour des options d'utilisation maximales..
Pour que notre bouton déclenche l'upload de média, il faut le lier avec un peu de javascript..
jQuery (function (jQuery) jQuery ('. custom_upload_image_button'). click (function () formfield = jQuery (this) .siblings ('. custom_upload_image'); preview = jQuery (this) .siblings ('. custom_preview_image') ; tb_show (", 'media-upload.php? type = image & TB_iframe = true'); window.send_to_editor = fonction (html) imgurl = jQuery ('img', html) .attr ('src'); classes = jQuery ('img', html) .attr ('classe'); id = classes.replace (/(.*?) wp-image- /, "); formfield.val (id); preview.attr ('src' , imgurl); tb_remove (); return false;); jQuery ('. custom_clear_image_button'). cliquez sur function () var defaultImage = jQuery (this) .parent (). siblings ('. custom_default_image'). text (); jQuery (this) .parent (). siblings ('. custom_upload_image'). val ("); jQuery (this) .parent (). siblings ('. custom_preview_image'). attr ('src', defaultImage) ; return false;););
Placez-les dans un fichier js personnalisé et mettez-les en file d'attente dans vos files d'attente enveloppées is_admin ().
wp_enqueue_script ('custom-js', get_template_directory_uri (). '/ js / custom-js.js');
La première fonction trouve le bouton que nous allons bientôt créer avec la classe "custom_upload_image_button" et préforme différentes choses au clic..
La deuxième fonction indique au lien que nous allons classer comme "custom_clear_image_button" pour effacer à la fois la valeur du champ de formulaire et réinitialiser l'aperçu à notre image par défaut..
array ('name' => 'Image', 'desc' => 'Description du champ.', 'id' => $ prefix.'image ',' type '=>' image ')
Nous avons juste besoin des informations de base pour ce champ.
// cas d'image 'image': $ image = get_template_directory_uri (). '/ images / image.png'; écho ''. $ image.''; if ($ meta) $ image = wp_get_attachment_image_src ($ meta, 'medium'); $ image = $ image [0]; écho '
Supprimer l'image
'. $ field [' desc '].''; Pause;
Plusieurs choses se passent ici, mais avec la façon dont nous avons écrit le javascript, cela devrait fonctionner assez bien quel que soit le nombre de champs d'image que vous ajoutez..
Lorsque vous commencez vraiment à utiliser des méta-champs personnalisés pour stocker différents types de données pour une publication, vous finirez par avoir besoin de plusieurs instances du même champ. En utilisant un peu de javascript, vous pouvez facilement dupliquer un champ autant de fois que nécessaire et même les trier par glisser-déposer. Il existe de nombreuses façons d'utiliser cette fonctionnalité, mais pour notre exemple, nous allons simplement utiliser une saisie de texte de base..
jQuery ('. repeatable-add'). click (function () field = jQuery (this) .closest ('td'). find ('. custom_repeatable li: last'). clone (true); fieldLocation = jQuery ( this) .closest ('td'). find ('. custom_repeatable li: last'); jQuery ('input', champ) .val ("). attr ('name', fonction (index, nom) nom de retour .replace (/ (\ d +) /, fonction (fullMatch, n) numéro de retour (n) + 1;)) field.insertAfter (fieldLocation, jQuery (this) .closest ('td')) return false ;); jQuery ('. repeatable-remove'). click (function () jQuery (this) .parent (). remove (); return false;); jQuery ('. custom_repeatable'). sortable ( opacité: 0.6, retour: true, curseur: 'déplacer', handle: '.sort');
Vous pouvez ajouter ce javascript au js personnalisé que vous avez déjà créé à la dernière étape..
La première fonction recherche le bouton Ajouter et ajoute une nouvelle ligne de champ vide à la fin de la liste des champs. Ceci est configuré de manière générique afin que vous puissiez avoir autant de champs répétables que nécessaire.
La fonction suivante donne à chaque bouton de suppression la possibilité de supprimer cette ligne lorsque l'utilisateur clique dessus.
Enfin, nous définissons les listes comme étant triables et définissons une poignée afin que vous puissiez faire glisser et déposer les lignes. Il n'est pas nécessaire de mettre en file d'attente l'interaction triable de l'interface utilisateur jQuery, car elle est déjà utilisée sur la page de publication modifiée..
array ('label' => 'Répétable', 'desc' => 'Description du champ.', 'id' => $ prefix.'repeatable ',' type '=>' répétable ')
Il n'y a rien de spécial à propos de ce champ dans le tableau pour notre exemple. Cependant, vous pourriez devenir assez fou ici et ajouter des options pour quels types de champs sont utilisés dans la liste répétable.
// cas répétable 'répétable': echo '+
Ce champ nécessite une boucle si une méta-valeur est enregistrée et aucune boucle s'il n'y en a pas..
.$ i
entier pour s'assurer qu'un nouveau nombre est ajouté au tableau de noms.Si vous avez suivi les trois parties de cette série jusqu'à présent, votre dernière boîte devrait ressembler à celle illustrée ici:
En réalité, nous n'avons fait qu'effleurer la surface de ce qui peut être fait avec cette méthode de construction d'un modèle de boîte à méta personnalisé réutilisable. Plus vous ajoutez de contenu à votre modèle, plus il est facile de l'insérer dans le projet sur lequel vous travaillez pour accélérer le temps que vous passez à coder et pour rationaliser le processus avec un code propre et cohérent..