În părțile anterioare ale acestei serii, ați învățat cum WP_Query
este structurat și care sunt proprietățile și metodele sale. Următoarea etapă este să înțelegeți diferitele argumente pe care le puteți utiliza cu aceasta și cum să procedați în acest fel.
WP_Query
are un număr mare de argumente posibile, ceea ce îl face extrem de flexibil. Așa cum îl puteți folosi pentru a interoga doar despre ceva deținut în dvs. wp_posts
tabel, are argumente pentru fiecare permutare a interogării pe care ați putea dori să o difuzați pe conținutul dvs..
În acest tutorial mă voi uita la două tipuri de argumente, pentru următoarele:
Argumentele pentru aceste două taxonomii sunt similare, dar au unele diferențe de care trebuie să știți dacă le veți folosi în mod eficient.
Înainte de a începe, hai să facem o recapitulare rapidă a modului în care lucrează argumentele WP_Query
. Când codificați WP_Query
în temele sau pluginurile dvs., trebuie să includeți patru elemente principale:
În practică, acest lucru va arăta mai degrabă după cum urmează:
have_posts ()) // Începeți cu buclă peste rezultatele interogării. în timp ce ($ query-> have_posts ()) $ query-> the_post (); // Conținutul rezultatelor mesajelor interogate merge aici. // Restaurați datele postale originale. wp_reset_postdata (); ?>
Argumentele sunt ceea ce spune WordPress ce date să aducă din baza de date și sunt cele pe care le voi acoperi aici. Deci, tot ce ne concentrăm aici este prima parte a codului:
$ args = array (// Argumente pentru interogarea dvs.);
După cum puteți vedea, argumentele sunt conținute într-o matrice. Veți învăța cum să le codificați pe măsură ce lucrați prin acest tutorial.
Există o modalitate specifică de a codifica argumentele în matrice, care este după cum urmează:
$ args = array ('parameter1' => 'valoare', 'parameter2' => 'valoare', 'parameter3' => 'valoare');
Trebuie să închideți parametrii și valorile lor în ghilimele simple, utilizați =>
între ele, și le separați cu o virgulă. Dacă obțineți acest lucru greșit, WordPress nu poate adăuga toate argumentele dvs. la interogare sau puteți obține un ecran alb.
Să începem cu parametrii categoriei. Opțiunile pe care le aveți aici sunt următoarele:
pisică
(int): utilizați categoria id.Numele categoriei
(şir): folosiți categoria slug (NU nume).category__and
(mulțime): utilizați categoria id.category__in
(mulțime): utilizați categoria id.category__not_in
(mulțime): utilizați categoria id.Rețineți că pentru niciuna dintre acestea nu folosiți numele categoriei dvs. Pana si Numele categoriei
parametrul preia volumul, nu numele acestuia. Tind să folosesc aceasta, mai degrabă decât ID-ul ca atunci când mă întorc la codul meu la o dată ulterioară, melcii sunt mai ușor de identificat decât ID-urile. Cu toate acestea, dacă credeți că utilizatorii site-ului dvs. ar putea schimba slugul pentru una sau mai multe categorii, vă recomandăm să utilizați ID-ul pentru a evita orice probleme.
Să aruncăm o privire la modul în care folosiți fiecare dintre acestea.
pisică
parametrul este simplu: utilizați doar un singur ID de categorie sau un șir de coduri de categorii.
Interogarea pentru o categorie arată astfel:
$ args = array ('cat' => '12');
Solicitarea interogărilor pentru mai multe categorii arată astfel:
$ args = array ('cat' => '12, 13, 14 ');
Cele de mai sus vor spune WordPress să preia posturile care se află în oricare dintre categoriile listate. Dacă doriți să găsiți postări în fiecare dintr-o serie de categorii, utilizați category_and
parametru, din care mai curând.
De asemenea, puteți utiliza parametrul pisică pentru a găsi postări care se găsesc într-o singură categorie, dar nu și în altul, utilizând un semn minus înainte de identificarea categoriei după cum urmează:
$ args = array ('cat' => '12, -13 ');
Cele de mai sus vor interoga postările din categorie 12
dar nu în categorie 13
.
Numele categoriei
parametrul folosește categoria slug, nu numele (confuz, știu!). Din nou, îl puteți folosi cu o singură categorie sau cu un șir de categorii pentru a găsi postări care se află în oricare dintre categorii.
Pentru a interoga postările dintr-o singură categorie, adăugați:
$ args = array ('category_name' => 'meu-slug');
Și pentru a găsi postări într-unul sau mai multe dintre mai multe categorii, utilizați aceasta:
$ args = array ('category_name' => 'meu-slug, tu-slug, alt-slug');
Ca și în cazul parametrului pisică, acesta nu va găsi posturile în care se află toate din categorii, dar va găsi posturi în orice din categorii.
Dacă doriți să găsiți postări care apar în toate categoriile de categorii, acesta este parametrul pe care îl utilizați. Este nevoie de ID-urile categoriei pentru valoarea sa. Deci, pentru a găsi postări în toate cele trei categorii, ați folosi:
$ args = array ('category__and' => array ('12', '13', '14'));
Rețineți că acest lucru utilizează un matrice nu un șir, deci codificați-l diferit. Parametrul are două subliniere în numele său: utilizați doar unul și nu va funcționa.
Următorul parametru caută postările dintr-una sau mai multe dintre o serie de categorii. Funcționează de fapt în același mod ca și parametrul pisică și, de asemenea, ia ID-ul categoriei ca valoare.
Deci, pentru a interoga postările din unul sau mai multe dintre categoriile de categorii, ați folosi:
$ args = array ('category__in' => array ('12', '13', '14'));
Cele de mai sus ar aduce mesaje din una sau mai multe din aceste categorii.
category__not_in
parametrul face cum v-ați aștepta: se interoghează mesaje care nu se află într-o categorie sau într-o serie de categorii.
Pentru a exclude postările dintr-o categorie, utilizați următoarele:
$ args = array ('category__not_in' => '12');
Și pentru a exclude postările dintr-o serie de categorii:
$ args = array ('category__not_in' => array ('12', '13', '14'));
Aceasta ar exclude postările din oricare dintre aceste categorii.
Etichetele au parametri ușor diferiți de la categorii: nu puteți afla ce s-ar putea baza pe cunoștințele dvs. despre parametrii categoriei, mi-e teamă!
Parametrii etichetei sunt:
etichetă
(şir): utilizați eticheta de tip slug.tag_id
(int): utilizați id-ul tag-ului.tag__and
(mulțime): utilizați ID-uri de etichete.tag__in
(mulțime): utilizați ID-uri de etichete.tag__not_in
(mulțime): utilizați ID-uri de etichete.tag_slug__and
(mulțime): utilizați etichetele de etichete.tag_slug__in
(mulțime): utilizați etichetele de etichete.Să ne uităm la fiecare dintre acestea.
etichetă
parametrul preia tag-ul slug pentru valoarea sa și poate fi folosit pentru a găsi postări cu o singură etichetă sau cu oricare dintre șir de etichete.
Deci, pentru a găsi postări cu o etichetă pe care o utilizați:
$ args = array ('tag' => 'my-tag');
Și pentru a găsi postări cu etichete dintr-o serie de etichete:
$ args = array ('tag' => 'eticheta mea, eticheta ta, altă etichetă');
Rețineți că mesajele de interogare de mai sus cu orice din etichetele din matrice, nu toate acestea.
tag_id
parametrul funcționează în mod similar cu pisică
parametru: este necesar ID-ul tag-ului și poate fi utilizat cu o singură etichetă sau mai multe etichete.
Pentru a găsi postări cu o singură etichetă, utilizați aceasta:
$ args = array ('tag_id' => '21');
Pentru a găsi postări cu unul sau mai multe etichete dintr-un șir de etichete de etichete:
$ args = array ('tag_id' => '21, 22, 23 ');
Puteți utiliza, de asemenea tag_id
pentru a exclude etichetele, fie când îl utilizați pentru etichete unice, fie pentru mai multe etichete.
Deci, pentru a interoga mesajele cu excepția celor care au o etichetă dată, ați folosi:
$ args = array ('tag_id' => '-21');
În timp ce pentru a găsi postări cu unul dintre cele două etichete, dar fără altă etichetă, ați folosi acest lucru:
$ args = array ('tag_id' => '21, -22, 23 ');
Astfel, cele de mai sus vor interoga postări cu unul sau ambele etichete 21
sau 23
dar nu eticheta 22
.
Acest parametru vă permite să găsiți postări cu unul sau mai multe etichete. Funcționează în același mod ca și etichetă
atunci când este utilizat cu o matrice:
$ args = array ('tag_in' => array ('21', '22', '23'));
Aceasta va interoga postările cu oricare sau cu toate etichetele afișate. Dacă doriți să găsiți postări cu toate etichetele pe care le utilizați tag__and
, pe care o voi acoperi într-un moment.
tag__not_in
parametru vă permite să interogați mesajele care nu au o etichetă sau un șir de etichete.
Utilizați-l astfel pentru a exclude o etichetă:
$ args = array ('tag__not_in' => array ('21'));
Rețineți că trebuie să utilizați în continuare un tablou, chiar dacă utilizați doar o singură etichetă. Pentru mai multe etichete, utilizați:
$ args = array ('tag__not_in' => array ('21', '22', '23'));
Aceasta va interoga postări care nu au nici una dintre etichetele de mai sus.
Acești doi parametri se comportă exact în același mod ca și tag__and
și tag__in
parametrii, cu excepția faptului că utilizați acel tag-uri în serverele dvs. în locul etichetei.
De exemplu, pentru a găsi postări care au atât o pereche de etichete, pe care le utilizați tag__slug_in
:
$ args = array ('tag_slug__in' => array ('my-tag', 'your-tag', 'another-tag'));
Aceasta găsește postări cu oricare dintre aceste etichete. De asemenea, puteți utiliza parametrul tagului cu un șir de tag-uri pentru a obține același rezultat.
Pentru a include postări cu un set de etichete, utilizați tag_slug__and
:
$ args = array ('tag_slug__and' => array ('my-tag', 'your-tag', 'another-tag'));
În loc să interogheze postările cu oricare dintre etichete, numai acestea conțin mesaje de interogare toate a etichetelor.
Interogarea postărilor dvs. după categorie și / sau etichetă este ceva ce există o șansă bună cu care veți avea ocazia de a face WP_Query
. Folosind argumentele de mai sus și combinându-le acolo unde este necesar, puteți crea argumente puternice pentru a extrage exact datele de care aveți nevoie din baza de date.