PHP: utilisez l'API WordPress pour créer un shortcode afin de répertorier les sous-pages
Nous travaillons actuellement sur une implémentation assez complexe pour un client d'entreprise. Le site est en cours de création dans WordPress mais contient une tonne de cloches et de sifflets. Souvent, lorsque je fais ce type de travail, j'aime enregistrer le code personnalisé pour le réutiliser plus tard sur d'autres sites. Dans ce cas, je pensais que c'était une fonction tellement utile que je voulais la partager avec le monde. Nous utilisons le Thème WordPress Avada avec Fusion Page Builder en tant que thème parent, et en déployant un peu de code personnalisé dans notre thème enfant.
WordPress a déjà quelques fonctions dans son API qui peuvent être utilisées pour lister les sous-pages, comme wp_list_pages et get_pages. Le problème est qu'ils ne renvoient pas suffisamment d'informations si vous espérez créer dynamiquement une liste avec un tas d'informations.
Pour ce client, ils souhaitaient publier des descriptions de poste et faire en sorte que la liste des offres d'emploi soit automatiquement générée par ordre décroissant en fonction de leur date de publication. Ils voulaient également afficher un extrait de la page.
Donc, tout d'abord, nous avons dû ajouter la prise en charge d'extraits au modèle de page. Dans functions.php pour leur thème, nous avons ajouté:
add_post_type_support ('page', 'extrait');
Ensuite, nous devions enregistrer un shortcode personnalisé qui générerait la liste des sous-pages, des liens vers celles-ci et l'extrait correspondant. Faites cela, nous devons utiliser le Boucle WordPress. Dans functions.php, nous avons ajouté:
// Liste des sous-pages dans une fonction de liste dknm_list_child_pages ($ atts, $ content = "") {global $ post; $ atts = shortcode_atts (array ('ifempty' => 'Aucun enregistrement', 'aclass' => ''), $ atts, 'list_subpages'); $ args = array ('post_type' => 'page', 'posts_per_page' => -1, 'post_parent' => $ post-> ID, 'orderby' => 'publish_date', 'order' => 'DESC' ,); $ parent = nouveau WP_Query ($ args); if ($ parent-> have_posts ()) {$ string. = $ content. ' '; while ($ parent-> have_posts ()): $ parent-> the_post (); $ chaîne. = ' '.get_the_title ().' '; if (has_excerpt ($ post-> ID)) {$ string. = '-' .get_the_excerpt (); } $ chaîne. = ' '; en attendant; } else {$ string = ' '. $ atts [' ifempty '].' '; } wp_reset_postdata (); return $ string; } add_shortcode ('list_subpages', 'dknm_list_child_pages');
Désormais, le shortcode peut être implémenté sur tout le site pour afficher les pages enfants avec un lien et un extrait. Usage:
[list_subpages aclass = "button" ifempty = "Désolé, nous n'avons actuellement aucune offre d'emploi."] Liste des emplois [/ list_subpages]
Le résultat est une belle liste claire et non ordonnée des emplois publiés, qui sont des pages enfants sous leur page carrière.
S'il n'y a pas eu de travaux publiés (pas de pages enfants), il publiera:
Désolé, nous n'avons actuellement aucun poste vacant.
S'il y avait des travaux publiés (pages enfants), il publiera:
Liste des emplois:
- Dernière page enfant - Extrait de la page enfant
- Page enfant suivante - Extrait de la page enfant
- Page enfant suivante - Extrait de la page enfant