Comment afficher les métaboxes selon le format de publication actuel

Aujourd'hui, j'aimerais vous montrer comment aller plus loin avec les métabox personnalisés et plus particulièrement comment les utiliser selon les formats de publication..

Nous ne verrons pas comment construire des métabox personnalisés réutilisables, car ils ont déjà été abordés dans un sujet précédent. Veuillez vous reporter à cet article si vous rencontrez un problème avec cela..


introduction

Tout d’abord, si vous n’avez jamais entendu parler d’eux auparavant, les formats de publication vous permettent d’afficher une publication de différentes façons, en fonction du "format" de publication que vous avez défini (image, lien, galerie, etc.)..

Pour être sûr que votre thème est déjà "post formats", vérifiez qu'il accepte différents formats en recherchant cette fonction:

 add_theme_support ('post-formats', tableau ('lien', 'citation'));

Maintenant, avec cet exemple, vous pourrez utiliser deux formats de publication: "link" et "quote".

L'idée est d'afficher une metabox uniquement si la case d'option de post-formatage correcte est cochée. Pour cela, nous allons utiliser des hooks (PHP) et jQuery (JavaScript).


Étape 1 Ajout de métaboxes personnalisés

Nous définirons un tableau de métaboxes applicables aux articles uniquement (vous pouvez l'écrire à l'intérieur du functions.php fichier de votre thème). Il y a différentes options par défaut (emplacement, priorité) sur lesquelles nous ne nous concentrerons pas (consultez à nouveau l'article sur les métabox personnalisées réutilisables).

Définir les métaboxes

Outre le des champs nous définissons, ce qui est important à noter dans le code ci-dessous est le condition d'affichage variable qui sera utilisée pour afficher / masquer les métaboxes en fonction du format de publication actuel. Il correspond à l'ID du bouton radio du format de message.

 $ metaboxes = array ('link_url' => array ('title' => __ ('information sur le lien', 'vingt-neuf'), 'applicableto' => 'post', 'location' => 'normal', 'display_condition' => 'post-format-link', 'priority' => 'low', 'fields' => array ('l_url' => array ('title' => __ ('link url:', 'twentyeleven') , 'type' => 'text', 'description' => ", 'size' => 60))), 'quote_author' => array ('title' => __ ('auteur de la quotation', 'twentyeleven') , 'applicableto' => 'post', 'location' => 'normal', 'display_condition' => 'post-format-quote', 'priority' => 'bas', 'champs' => tableau ('q_author '=> array (' title '=> __ (' quote quote author '', 'twentyeleven'), 'type' => 'text', 'description' => ", 'size' => 20))));

Pour ce tutoriel, nous n’ajouterons qu’une entrée de texte de base pour chaque métabox. Assurez-vous de vérifier la clé de champ est unique ou cela ne fonctionnera pas correctement.

Nous allons maintenant créer trois fonctions pour ajouter, mettre à jour / enregistrer et afficher les métaboxes..

Créer des métaboxes

 add_action ('admin_init', 'add_post_format_metabox'); fonction add_post_format_metabox () global $ metaboxes; if (! empty ($ metaboxes)) foreach ($ metaboxes as $ id => $ metabox) add_meta_box ($ id, $ metabox ['title'], 'show_metaboxes', $ metabox ['applicableto'], $ metabox ['emplacement'], $ metabox ['priorité'], $ id); 

Fondamentalement, nous utilisons simplement nos options précédemment définies pour ajouter ces métaboxes.

Afficher les métaboxes

 function show_metaboxes ($ post, $ args) global $ metaboxes; $ custom = get_post_custom ($ post-> ID); $ fields = $ tabs = $ metaboxes [$ args ['id']] ['fields']; / ** Nonce ** / $ output = ''; if (sizeof ($ fields)) foreach (les champs $ as $ id => champ $) switch ($ champ ['type']) valeur par défaut: case "text": $ output. = ''; Pause;  echo $ output; 

Jusqu'ici, voici ce que nous devrions avoir sur un nouvel écran post-administrateur:

Enregistrer les métaboxes

 add_action ('save_post', 'save_metaboxes'); function save_metaboxes ($ post_id) global $ metaboxes; // vérifier nonce si (! wp_verify_nonce ($ _POST ['post_format_meta_box_nonce'], nom de base (__FILE__))) return $ post_id; // vérifie l'enregistrement automatique si (défini ('DOING_AUTOSAVE') && DOING_AUTOSAVE) return $ post_id; // vérifie les autorisations si ('page' == $ _POST ['post_type']) if (! current_user_can ('edit_page', $ post_id)) return $ post_id;  elseif (! current_user_can ('edit_post', $ post_id)) return $ post_id;  $ post_type = get_post_type (); // parcourt les champs et enregistre les données pour chaque ($ metaboxes sous la forme $ id => $ metabox) // vérifie si metabox est applicable pour le type de publication en cours if ($ metabox ['applicableto'] == $ post_type) $ fields = $ metaboxes [$ id] ['champs']; foreach ($ champs comme $ id => champ $) $ old = get_post_meta ($ post_id, $ id, true); $ new = $ _POST [$ id]; if ($ new && $ new! = $ old) update_post_meta ($ post_id, $ id, $ new);  elseif ("== $ new && $ old ||! isset ($ _POST [$ id])) delete_post_meta ($ post_id, $ id, $ old);

Ok, maintenant nous sommes tous prêts et sommes en mesure d'ajouter et de mettre à jour des métas de publication pour chaque article et de les afficher à l'intérieur de métaboxes. Nous pouvons maintenant creuser notre problème: afficher la metabox correcte pour correspondre au format de publication actuel.


Étape 2 Afficher le métabox correct au bon moment

Pour cela, nous allons utiliser jQuery gérer les événements de show, hide et radio change.

Pour ajouter du code JavaScript en ligne uniquement dans la section admin, nous pouvons utiliser ce crochet d’action:

 add_action ('admin_print_scripts', 'display_metaboxes', 1000);

La priorité est définie sur 1000 pour garantir que jQuery a été chargé en premier..

Nous pourrions définir un crochet plus précis tel que admin_print_scripts-post ou admin_print_scripts-post-new, mais pour une raison quelconque, jQuery est appelé après l'impression de notre script..

De plus, si nous ajoutions des formats de publication à des types de publication personnalisés, il ne serait pas très pratique d'ajouter toutes les configurations possibles..

Ce que nous ferons est de construire (via PHP) une chaîne JavaScript contenant une liste d'identifiants (la clé de champ vue ci-dessus) séparés par une virgule. Il sera utilisé pour masquer toutes les métaboxes mais celle correspondant au format de publication actuel..

Nous allons également construire (toujours via PHP) un objet JavaScript que nous utiliserons pour lier l'ID d'un bouton radio au format post à un ID metabox..

 function display_metaboxes () global $ metaboxes; if (get_post_type () == "post"):?>   

Et le tour est joué! Maintenant, vous pouvez changer de format de message et vous aurez toujours la bonne métabox affichée.


Conclusion

Les formats de message peuvent être très pratiques pour personnaliser la mise en page de tout type de message et l'affichage des métaboxes en conséquence est un excellent moyen d'améliorer la convivialité..

De plus, cela économise de l'espace sur un écran d'administration déjà bien encombré. Avec un peu plus de CSS et plusieurs champs, vous pouvez vraiment améliorer la façon dont vous écrivez des messages et obtenir une interface vraiment intuitive..