PHP: Bruk WordPress API for å lage en kortkode for å liste undersider
Vi jobber med en ganske komplisert implementering for en bedriftsklient akkurat nå. Nettstedet bygges i WordPress, men har massevis av bjeller og fløyter. Når jeg gjør denne typen arbeid, lagrer jeg ofte den egendefinerte koden for senere bruk på andre nettsteder. I dette tilfellet trodde jeg det var en så nyttig funksjon, jeg ønsket å dele den med verden. Vi bruker Avada WordPress-tema med Fusion Page Builder som overordnet tema, og distribuere ganske mye tilpasset kode i barnetemaet vårt.
WordPress har allerede et par funksjoner i API-en som kan brukes til å liste undersider, som wp_list_pages og get_pages. Problemet er at de ikke returnerer nok informasjon hvis du håper å lage en liste med en mengde informasjon dynamisk.
For denne kunden ønsket de å legge ut stillingsbeskrivelser og få listen over stillinger automatisk generert i synkende rekkefølge etter publiseringsdatoen. De ønsket også å vise et utdrag av siden.
Så først måtte vi legge til utdragstøtte til sidemalen. I functions.php for deres tema la vi til:
add_post_type_support ('side', 'utdrag');
Deretter trengte vi å registrere en tilpasset kortkode som ville generere listen over undersider, lenker til dem og utdraget for dem. Gjør dette, vi må bruke WordPress Loop. I functions.php la vi til:
// Liste undersider i en listefunksjon dknm_list_child_pages ($ atts, $ content = "") {global $ post; $ atts = shortcode_atts (array ('ifempty' => 'Ingen poster', 'aclass' => ''), $ atts, 'list_subpages'); $ args = array ('post_type' => 'side', 'posts_per_page' => -1, 'post_parent' => $ post-> ID, 'orderby' => 'publish_date', 'order' => 'DESC' ,); $ foreldre = ny WP_Query ($ args); if ($ parent-> have_posts ()) {$ string. = $ content. ' '; mens ($ parent-> have_posts ()): $ parent-> the_post (); $ string. = ' '.get_the_title ().' '; hvis (has_excerpt ($ post-> ID)) {$ string. = '-' .get_the_excerpt (); } $ string. = ' '; slutter; } annet {$ string = ' '. $ atts [' ifempty '].' '; } wp_reset_postdata (); returnere $ streng; } add_shortcode ('list_subpages', 'dknm_list_child_pages');
Nå kan kortkoden implementeres på hele nettstedet for å vise barnesidene med en lenke og et utdrag. Bruk:
[list_subpages aclass = "button" ifempty = "Beklager, vi har for øyeblikket ingen stillinger."] Liste over jobber [/ list_subpages]
Resultatet er en fin, ren, ikke-ordnet liste over publiserte jobber, som er barnesider under karrieresiden.
Hvis det ikke ble publisert jobber (ingen underordnede sider), vil den publisere:
Beklager, vi har for øyeblikket ingen stillinger.
Hvis det ble utgitt jobber (underordnede sider), vil den publisere:
Liste over jobber:
- Siste barneside - Utdrag fra barnesiden
- Neste barneside - Utdrag fra barnesiden
- Neste barneside - Utdrag fra barnesiden