Crearea unei liste de postări cu aceleași categorii ca cea curentă

Dacă rulați un blog mare, va trebui să găsiți o modalitate de a vă ajuta pe cititorii dvs. să găsească conținut pe care vor să-l citească, în funcție de ceea ce citesc sau au citit.

O modalitate de a face acest lucru este folosirea unuia dintre multele pluginuri care identifică posturile asociate. Acestea utilizează diverse metode pentru a identifica alte postări care au un conținut similar cu cel actual, dar uneori nu vă dau rezultatele pe care le doriți.

O modalitate logică de a identifica postări precum cea afișată în prezent este prin utilizarea unor categorii, etichete sau termeni de taxonomie. Dacă ați putea identifica posturile din aceleași categorii ca și cea curentă, puteți afișa o listă cu cele mai recente postări din aceleași categorii, pentru a ajuta cititorii să găsească conținut similar.

În acest tutorial vă voi arăta cum să creați un plugin pentru a face acest lucru. Pluginul vă va oferi o funcție pe care o adăugați apoi la dvs. single.php șablon pentru a afișa lista sub conținutul postării curente.

Ce ai nevoie

Pentru a urma acest tutorial, veți avea nevoie de:

  • o instalare de dezvoltare a WordPress
  • o temă existentă cu single.php șablon
  • un editor de cod

Configurarea pluginului

Să începem prin instalarea pluginului. Creați un fișier nou pentru plugin-ul dvs. - sun de-al meu legate de tutsplus-posts.php.

În fișierul dvs. nou, adăugați următoarele:

Veți dori să schimbați detaliile autorului pe propriile dvs. detalii, dar aceasta oferă WordPress ceea ce are nevoie pentru a recunoaște pluginul și pentru a vă permite să îl activați în tabloul de bord.

Identificarea categoriilor Postărilor curente

Pentru a identifica alte postări cu aceleași categorii, trebuie să obțineți lista categoriilor în care se află postarea curentă și să le adăugați într-o matrice.

Începeți prin crearea funcției de menținere a codului, împreună cu câteva inițializări:

funcția tutsplus_related_posts () $ post_id = get_the_ID (); $ cat_ids = array (); 

Acum, în interiorul funcției dvs., utilizați get_the_category () funcția de a prelua o serie de date referitoare la categoriile în care se află postul curent:

categorii $ = get_the_category ($ post_id);

Funcția are un singur parametru, postul id, care specifică faptul că este postul curent ale cărui categorii doriți să le obțineți.

Apoi, trebuie să creați o matrice care să dețină ID-urile tuturor categoriilor:

dacă (categoriile $ &&! is_wp_error ($ categories)) foreach (categoriile $ ca categorie $) array_push ($ cat_ids, $ category-> term_id); 

Să aruncăm o privire la ceea ce face acest cod:

  • Mai întâi verifică asta categorii $ nu a returnat nici o eroare sau o eroare.
  • Apoi, pentru fiecare categorie, se adaugă ID-ul la matrice.

Funcția dvs. va arăta astfel:

funcția tutsplus_related_posts () $ post_id = get_the_ID (); $ cat_ids = array (); categorii $ = get_the_category ($ post_id); dacă (categoriile $ &&! is_wp_error ($ categories)) foreach (categoriile $ ca categorie $) array_push ($ cat_ids, $ category-> term_id); 

Scrierea unei interogări pentru ieșirea posturilor din aceeași categorie

Acum, dacă aveți o matrice cu codurile de categorii din ea, puteți să o utilizați ca argument pentru o interogare pentru a identifica postările cu acele categorii.

Încă în interiorul funcției dvs., setați argumentele pentru interogare:

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

Aceste argumente vor găsi posturi de aceleași tipuri de posturi ca și cele curente, în aceleași categorii, și vor exclude postarea curentă. Am setat să emită cinci postări, însă puteți schimba întotdeauna acest lucru sau oricare dintre celelalte argumente, cum ar fi tipul de post, dacă ați aplicat categorii la mai mult de un tip de postare.

Acum rulați interogarea:

$ query = noua valoare WP_Query ($ args); dacă ($ query-> have_posts ()) ?>  

Aceasta scoate titlurile post în interiorul legăturilor către ele, într-o listă. 

Adăugarea funcției la tema dvs.

Ultimul pas este să adăugați funcția într-un fișier șablon în tema dvs. Am creat o temă pentru tema Twenty Fourteen cu un nou single.php dosar, și adaug funcția acolo, sub conținutul. Acesta poate fi adăugat oriunde, atâta timp cât se află în buclă de mesaje WordPress.

În fișierul dvs. șablon, adăugați următoarele:

tutsplus_related_posts ();

Puteți vedea rezultatul de mai jos:

Notă: Site-ul demo este puțin confuz, deoarece etichetele și categoriile sunt afișate la sfârșitul fiecărei postări. Lista noastră nu folosește etichete, doar categorii, din care fiecare post din acest site are unul.

Alternative: etichete și termeni de taxonomie

Puteți modifica cu ușurință această funcție pentru a lucra cu taguri sau cu termeni de taxonomie.

Pentru a identifica etichetele în locul categoriilor, le-ați înlocui get_the_category () funcția cu get_the_tags (), și apoi înlocuiți 'Category__in' argument pentru interogarea cu 'Tag__in'.

Pentru a identifica termenii de taxonomie, ai folosi get_the_terms () in locul get_the_category (), adăugând slugul taxonomic ca al doilea parametru. Veți înlocui apoi 'Category__in' argument cu ajutorul unui argument 'Tax_query'.

Puteți căuta, de asemenea, postări cu aceleași termeni în mai multe taxonomii (inclusiv termeni și categorii), prin crearea a două matrice și folosirea a două argumente în interogarea dvs..

rezumat

În acest tutorial ați învățat cum să identificați categoriile în care se află postarea curentă, să adăugați codurile acestora într-o matrice și apoi să folosiți matricea respectivă pentru a rula o interogare care afișează postări din aceeași categorie. Acest lucru vă oferă mai mult control decât obțineți de la cele mai multe pluginuri de posturi asociate și înseamnă că puteți defini argumentele pentru interogarea dvs., astfel încât postările să fie afișate exact așa cum doriți.

De asemenea, puteți adapta această tehnică pentru a lucra cu etichete, termeni de taxonomie sau o combinație de două sau mai multe.

Cod