WP_Query Argumente Mesaje, pagini și tipuri de mesaje

În această parte a seriei WP_Query, veți învăța cum să utilizați WP_Query pentru a căuta postări, pagini și tipuri personalizate de postări. Puteți căuta postări și pagini specifice sau puteți rula o interogare pentru a returna postările din unul sau mai multe tipuri de postări.

O recapitulare a modului în care argumentele funcționează în WP_Query

Î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:

  • argumentele pentru interogare, utilizând parametrii care vor fi abordați în acest tutorial
  • interogarea însăși
  • bucla
  • terminați: închiderea dacă și în timp ce etichetele și resetarea datelor postale

Î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.

Codificarea argumentelor dvs.

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.

Solicitarea interogărilor pentru mesaje individuale sau pagini

Să începem cu cel mai simplu scenariu: rularea unei interogări pentru a găsi o anumită postare sau pagină.

Solicitarea unui mesaj

Pentru a găsi o anumită postare (sau un set de postări), aveți două opțiuni:

  • p (int): Utilizați codul poștal.
  • Nume (şir): Utilizați post slug.

Puteți utiliza acești parametri cu orice tip de postare, inclusiv postări, pagini, atașamente și tipuri personalizate de postări. Implicit, WordPress va interoga 'post' postați tipul și nu întoarceți pagini sau tipuri personalizate de postări - dacă doriți să faceți acest lucru, va trebui să adăugați mai multe argumente sau să folosiți un alt argument, pe care îl voi face mai târziu în acest tutorial.

Deci, pentru a returna un anumit post, ai putea folosi unul dintre acestea:

$ args = array ('p' => '32');

sau:

$ args = array ('nume' => 'post_slug');

Rețineți că Nume parametru ia post slug ca argument, nu titlul său.

Utilizarea Nume parametrul facilitează identificarea interogărilor pe care le va prelua interogarea din baza de date atunci când revizuiți codul la o dată ulterioară, dar există riscul ca acesta să nu funcționeze dacă unul dintre utilizatorii site-ului dvs. modifică post slug. Codul poștal nu poate fi modificat, deci este mai sigur.

Solicitarea unei pagini

Pentru a interoga o anumită pagină, aveți din nou două opțiuni:

  • PAGE_ID (int): Utilizați pagina ID.
  • pagename (şir): Folosiți pagina slug.

Deci, pentru a rula o interogare care a preluat o singură pagină din baza de date, ați folosi unul dintre acestea:

$ args = array ('page_id' => '20');

sau:

$ args = array ('pagename' => 'pagina_slug');

Cererea pentru un mesaj de alt tip

Pentru a rula o interogare pentru un post de alt tip de postare, inclusiv un tip de post particularizat, utilizați și post_type parametru. Voi acoperi acest lucru mai detaliat mai târziu în acest tutorial, dar pe scurt, pentru a căuta un singur post în produs tipul postului personalizat, ați folosi acest lucru:

$ args = array ('p' => '46', 'post_type' => 'produs');

Sau pentru a căuta un atașament, ați folosi:

$ args = array ('p' => '46', 'post_type' => 'atașament');

Solicitarea interogărilor pentru paginile copiilor

Uneori este posibil să trebuiască să preluați toate paginile care sunt copii ai unei anumite pagini, de exemplu dacă site-ul dvs. are o structură ierarhică de pagină și doriți să afișați o listă pe fiecare pagină a copiilor acelei pagini.

Notă: nu ați face acest lucru cu mesaje deoarece acestea nu sunt ierarhice, deși puteți cu un tip de post personalizat dacă este ierarhic.

Aveți trei argumente pe care le puteți utiliza pentru a face acest lucru:

  • post_parent (int): Utilizați ID-ul paginii pentru a reveni numai la paginile copilului. Setați la 0 pentru a reveni numai la intrările de nivel superior.
  • post_parent__in (mulțime): Utilizați o serie de ID-uri postale.
  • post_parent__not_in (mulțime): Utilizați o serie de ID-uri postale.

Să aruncăm o privire la fiecare dintre ele.

Primul, post_parent, vă permite să căutați pagini care sunt copii ai unei anumite pagini. 

Deci, pentru a găsi toate paginile care sunt copii ai unei anumite pagini, ați folosi acest lucru:

$ args = array ('post_type' => 'pagina', 'post_parent' => '2');

Rețineți că trebuie să includeți post_type argument ca tip post implicit care WP_Query caută este post.

Dacă luați acest lucru mai departe, acesta este modul în care îl veți folosi pentru a găsi copii ai paginii curente:

$ actual_page_id = get_the_ID (); $ args = array ('post_type' => 'pagina', 'post_parent' => $ actual_page_id);

De asemenea, puteți utiliza acest parametru pentru a identifica paginile de nivel superior, adică cele fără părinte:

$ args = array ('post_type' => 'pagina', 'post_parent' => '0');

Dar dacă doriți să identificați copii de mai multe pagini? Puteți face acest lucru și cu post_parent__in parametru. Aceasta ia o serie de ID-uri postale.

Deci, pentru a interoga copiii din două pagini, ați folosi acest lucru:

$ args = array ('post_type' => 'pagina', 'post_parent__in' => array ('2', '4'));

De asemenea, puteți exclude pagini de tip copil din interogarea dvs., utilizând post_parent__not_in parametru:

$ args = array ('post_type' => 'pagină', 'post_parent__not_in' => array ('2', '4'));

Solicitarea interogărilor pentru mesaje multiple

Este, de asemenea, obișnuit să rulați o interogare pentru a include sau exclude mai multe postări. Aveți două argumente pe care le puteți utiliza pentru aceasta:

  • postează în (mulțime): Utilizați ID-urile postale.
  • post__not_in (mulțime): Utilizați ID-urile postale.

postează în argumentul poate fi folosit pentru toate tipurile de posturi și ia o serie de ID-uri. Deci, pentru a afișa o listă cu postări specifice, utilizați aceasta:

$ args = array ('post__in' => array ('36', '52', '246', '354'));

Notă: Dacă utilizați acest argument pentru a prelua postările, WordPress va prelua în continuare postări lipicioase, chiar dacă acestea nu apar în lista dvs. Pentru a le omite, folosiți ignore_sticky_posts argument:

$ args = array ('post__in' => array ('36', '52', '246', '354'); 'ignore_sticky_posts' => 'true');

post__not_in Argumentul funcționează într-un mod similar, luând din nou o serie de ID-uri post, dar va scoate la iveală orice altceva, cu excepția posturilor listate. În mod normal, combinați-l cu alte argumente pentru a evita afișarea unei liste uriașe de postări.

Deci, pentru a interoga toate postările din produs post, dar excludeți câteva:

$ args = array ('post_type' => 'produs', 'post__not_in' => array ('36', '52', '246', '354'));

Deci, pentru a combina acest lucru cu unul dintre exemplele noastre anterioare, iată cum ați interoga toate paginile de nivel superior, cu excepția celei actuale:

$ actual_page_ids = array (get_the_ID ()); $ args = array ('post_parent' => '0', 'post__not_in' => $ actual_page_ids);

Rețineți că, dacă ați înregistrat și un tip de post ierarhic, va trebui să includeți post_type parametru în acest cod doar pentru interogarea paginilor.

Solicitarea interogărilor pentru tipurile de postări

În unele exemple de mai sus am folosit post_type parametru pentru a identifica posturile de un anumit tip. Să aruncăm o privire la argumentele pe care le puteți folosi cu parametrul respectiv:

  • post: O postare.
  • pagină: O pagina.
  • revizuire: O revizuire.
  • atașament: Un atașament.
  • nav_menu_item: Un element de meniu de navigare.
  • orice: Returnează orice tip, cu excepția reviziilor și tipurilor cu 'Exclude_from_search' setat la Adevărat când au fost înregistrați.
  • Tipuri de postări personalizate (de ex. produs).

Așa cum am văzut mai sus, puteți utiliza acest parametru cu alte argumente pentru a face ca interogarea dvs. să fie mai specifică.

Deci, pentru a da un exemplu simplu, iată cum ați interoga toate paginile site-ului dvs.:

$ args = array ('post_type' => 'pagina');

Tipuri personalizate de postări

Solicitarea unui tip de post personalizat este simplă: utilizați numele pe care l-ați acordat tipului de postare la înregistrarea acestuia, nu titlul utilizat în meniurile de administrare. Deci, să presupunem că ați înregistrat tipurile de posturi de produs utilizând register_post_type () după cum urmează:

funcția register_product () $ args = array ('name' => __ ('Products', 'tutsplus'), 'singular_name' => __ ('Product', 'tutsplus')); register_post_type ('produs', $ args); 

Valoarea pe care o utilizați pentru post_type argument atunci când interogarea pentru produse nu este 'Produs' sau 'Produse' dar 'produs':

$ args = array ('post_type' => 'produs');

Fișiere atașate

În mod implicit, dacă încercați să rulați o interogare pentru atașamente, aceasta nu va funcționa, deoarece WordPress stabilește post_status de atașamente la moşteni și WP_Query implicit la 'post_status' => 'publica' dacă nu specificați altfel. Deci, dacă doriți să interogați atașamentele pe care le faceți trebuie sa include post_status argument:

$ args = array ('post_type' => 'atașament', 'post_status' => 'moșteni');

Rețineți că puteți utiliza, de asemenea orice in loc de moşteni.

rezumat

Utilizarea WP_Query pentru a crea interogări personalizate pentru posturi și tipuri de posturi este ceva ce fac foarte mult. După cum ați văzut din exemplele de mai jos, există o mulțime de posibilități:

  • Utilizați-l pentru a căuta pagini de nivel superior de pe site-ul dvs..
  • Utilizați-l pentru a căuta postări ale unui anumit tip de postare.
  • Utilizați-l pentru a căuta toate postările, cu excepția celor specificate.
  • Utilizați-l pentru a interoga toți copiii paginii curente.

Există mai multe posibilități folosind argumentele acoperite aici, dar acest lucru ar trebui să vă ofere un degustător. 

Cod