Opprette en liste over innlegg med de samme kategoriene som den nåværende

Hvis du kjører en stor blogg, må du finne en måte å hjelpe leserne til å finne innhold som de vil lese, basert på det de leser eller leser for øyeblikket..

En måte å gjøre dette på er å bruke en av de mange plugins der ute som identifiserer relaterte innlegg. Disse bruker ulike metoder for å identifisere andre innlegg som har lignende innhold til den nåværende, men noen ganger gir de deg ikke helt de resultatene du vil ha.

En logisk måte å identifisere innlegg som den for tiden er på skjermen, er å bruke kategorier, koder eller taksonomi. Hvis du kunne identifisere innleggene i de samme kategoriene som den nåværende, kan du da vise en liste over de siste innleggene i de samme kategoriene, for å hjelpe leserne til å finne relatert innhold.

I denne veiledningen vil jeg vise deg hvordan du lager et plugin for å gjøre nettopp det. Pluggen gir deg en funksjon som du deretter legger til i single.php malfil for å vise listen under innholdet i gjeldende innlegg.

Hva du trenger

For å følge denne opplæringen trenger du:

  • en utviklingsinstallasjon av WordPress
  • et eksisterende tema med a single.php malfil
  • en kodeditor

Sette opp pluggen

La oss starte med å sette opp plugin. Opprett en ny fil for plugin-jeg ringer til min tutsplus-relaterte-posts.php.

I den nye filen legger du til følgende:

Du vil endre forfatterens detaljer til dine egne detaljer, men dette gir WordPress det som trengs for å gjenkjenne pluginet og aktivere det til å aktivere det i instrumentbrettet..

Identifisering av gjeldende innleggs kategorier

For å kunne identifisere andre stillinger med de samme kategoriene, må du få listen over kategorier det nåværende innlegget er i, og legge dem til en matrise.

Start med å lage funksjonen for å holde koden din, sammen med noen få initialiseringer:

funksjon tutsplus_related_posts () $ post_id = get_the_ID (); $ cat_ids = array (); 

Nå inne i funksjonen din, bruk get_the_category () funksjon for å hente en rekke data relatert til kategoriene det nåværende innlegget er i:

$ kategorier = get_the_category ($ post_id);

Funksjonen har bare en parameter, post-ID, som angir at det er det nåværende innlegget som du ønsker å få.

Deretter må du opprette en matrise som vil inneholde IDene til alle kategoriene:

hvis ($ kategorier &&! er_wp_error ($ kategorier)) foreach ($ kategorier som $ kategori) array_push ($ cat_ids, $ category-> term_id); 

La oss ta en titt på hva denne koden gjør:

  • Først sjekker det det $ kategorier har ikke returnert null eller en feil.
  • Deretter for hver kategori legger den ID-en til matrisen.

Din funksjon vil nå se slik ut:

funksjon tutsplus_related_posts () $ post_id = get_the_ID (); $ cat_ids = array (); $ kategorier = get_the_category ($ post_id); hvis ($ kategorier &&! er_wp_error ($ kategorier)) foreach ($ kategorier som $ kategori) array_push ($ cat_ids, $ category-> term_id); 

Skrive en spørring til Output Posts i samme kategori

Nå som du har en matrise med kategorid IDene i den, kan du bruke den som et argument for en forespørsel for å identifisere innlegg med de kategoriene.

Fortsett inne i funksjonen din, angi argumentene for spørringen:

$ current_post_type = get_post_type ($ post_id); $ args = array ('category__in' => $ cat_ids, 'post_type' => $ current_post_type, 'posts_per_page' => '5', 'post__not_in' => array ($ post_id));

Disse argumentene vil finne innlegg av samme posttyper som den nåværende, i de samme kategoriene, og utelukke nåværende innlegg. Jeg har satt den til å skrive ut fem innlegg, men du kan alltid endre dette, eller noen av de andre argumentene, for eksempel posttype, hvis du har brukt kategorier til mer enn en posttype.

Kjør nå spørringen:

$ query = nytt WP_Query ($ args); hvis ($ query-> have_posts ()) ?>  

Dette gir ut posttittene innsiden av koblinger til dem, i en liste. 

Legge til funksjonen til temaet ditt

Det siste trinnet er å legge til funksjonen i en malfil i temaet ditt. Jeg har laget et barn tema for Twenty Fourteen temaet med en ny single.php fil, og jeg legger til funksjonen der, under innholdet. Det kan legges til hvor som helst, så lenge det er innenfor WordPress-innleggsløyfen.

I din malfil legger du til følgende:

tutsplus_related_posts ();

Du kan se resultatet nedenfor:

Merk: Demo-siden er litt forvirrende da merker og kategorier er oppført på slutten av hvert innlegg. Vår liste bruker ikke koder, bare kategorier, hvorav hvert innlegg på dette nettstedet har en.

Alternativer: Merker og Taksonomi Vilkår

Du kan ganske enkelt endre denne funksjonen til å arbeide med koder eller taksonomi i stedet.

For å identifisere koder i stedet for kategorier, ville du erstatte get_the_category () fungere med get_the_tags (), og erstatt deretter 'Category__in' argument for spørringen med 'Tag__in'.

For å identifisere taksonomi vilkår, vil du bruke get_the_terms () i stedet for get_the_category (), legge til taksonomi slug som den andre parameteren. Du vil da erstatte 'Category__in' argument med et argument ved hjelp av 'Tax_query'.

Du kan også søke etter innlegg med de samme vilkårene i mer enn en taksonomi (inkludert vilkår og kategorier), ved å lage to arrays og bruke to argumenter i spørringen.

Sammendrag

I denne opplæringen har du lært hvordan du identifiserer kategoriene det nåværende innlegget er i, legger til IDene deres i en matrise, og bruk deretter det arrayet til å kjøre en forespørsel som viser innlegg i samme kategori. Dette gir deg mer kontroll enn du får fra de mest relaterte innleggene, og betyr at du kan definere argumentene for søket ditt slik at innleggene vises akkurat slik du vil.

Du kan også tilpasse denne teknikken til å jobbe med koder, taksonomi, eller en kombinasjon av to eller flere.