Acum, că am învățat aproape totul despre WP_Query
clasa, este timpul să încercați câteva exemple. În această parte, vom lucra la 10 scenarii diferite pentru a utiliza WP_Query
clasa și funcțiile conexe.
Va fi un exercițiu distractiv și sper că va fi la fel de educativ. Sa incepem!
Doar pentru a face acest articol ușor de înțeles separat de seria "Mastering WP_Query", ar trebui să fac un nano-tutorial pentru crearea de bucle WordPress cu WP_Query
clasă.
Nu este altceva decât să creezi o buclă obișnuită. O buclă tipică WordPress merge astfel:
Și creând o buclă cu WP_Query
clasa are doar câteva diferențe:
'news', 'posts_per_page' => 3); $ my_query = noua valoare WP_Query ($ args); dacă ($ my_query-> have_posts ()) în timp ce ($ my_query-> have_posts ()) $ my_query-> the_post (); // Postul de date se duce aici. // Resetați datele "$ post" la postarea curentă din interogarea principală. wp_reset_postdata (); ?>
Să vedem diferența dintre cele două:
WP_Query
instanță,WP_Query
clasă,$ My_query->
la începutul have_posts ()
și bara()
(astfel încât acestea sunt acum metodele WP_Query
clasă),$ postare
astfel încât acesta poate reveni la interogarea principală.Acum știm cum să creăm o buclă WP_Query
și diferența dintre o buclă obișnuită și o buclă creată cu WP_Query
. Nu vom crea bucle în toate exemplele (de dragul păstrării scurtului tutorial și al subiectului), astfel încât să vă puteți referi la această secțiune dacă trebuie să creați o buclă cu exemplele de mai jos.
Să presupunem că doriți să enumerați o postare a unui anumit autor scrisă în anul curent într-o secțiune specială "Mesajele autorului din acest an". O combinație simplă de două WP_Query
parametrii vor fi suficienti:
'john', // Obțineți postările sale din acest an. 'an' => $ actuală); // Instanțiați o nouă instanță de interogare. $ my_query = noua valoare WP_Query ($ args); ?>
Treceți această interogare într-o buclă și sunteți bine să mergeți!
Să spunem că doriți să creați o buclă în fiecare post în paginile lor unice de postare și să listați ultimele postări din categoria în care este postul. Desigur, trebuie să excludeți postarea curentă în cazul în care aceasta ar putea fi una dintre cele mai recente postări din acea categorie. Iată cum creați interogarea cu 'pisică'
și 'Post__not_in'
parametri:
term_id; // Argumentele pentru configurare. $ args = array (// Trimiteți postările categoriei. 'cat' => $ current_post_first_cat_id, // Excludeți postarea curentă 'post__not_in' => array ($ current_post_id)); // Instanțiați o nouă instanță de interogare. $ my_query = noua valoare WP_Query ($ args); ?>
Pentru buclă, vă sugerez să creați trei sau patru coloane cu miniaturi post deasupra titlurilor postate. Acesta va arata foarte frumos chiar sub post și înainte de secțiunea comentarii.
WordPress nu are un sistem integrat de afișare a postărilor, iar pluginurile care furnizează această funcție sunt renumite pentru încetinirea site-ului web (deoarece în fiecare vizualizare post, plugin-urile scriu din nou în bază de date pentru a înregistra vizualizarea contează). Cu toate acestea, există un alt tip de măsură pentru a determina ce postări sunt cele mai "populare": numărarea comentariilor. Și spre deosebire de numărul de vizualizări, numărul de comentarii este deja în baza de date - WP_Query
clasa face super-ușor să comanzi postări după numărul de comentarii:
'comment_count'); // Instanțiați o nouă instanță de interogare. $ my_query = noua valoare WP_Query ($ args); ?>
Vedeți cât de ușor este asta? Acum imaginați-vă crearea unui șablon de pagină personalizat cu o buclă care rulează această interogare - o pagină "Cele mai comentate postări".
Când utilizați WordPress pentru a construi site-uri corporative, portofolii sau reviste web, sliders au devenit un standard industrial "trebuie să aibă". Nu sunt un fan al slider-urilor (cred că e rău UX), dar web-ul pare să-i placă, așa că nu pot să spun nu clienților mei în timp ce fac site-uri pentru ei. Dacă doresc sliders, folosesc o interogare simplă folosind WP_Query
clasă:
'slider', // Obțineți o anumită categorie de cursor. 'category_name' => 'home-slides', // Obțineți toate diapozitivele și nu paginați. 'nopaging' => adevărat); // Instanțiați o nouă instanță de interogare. $ my_query = noua valoare WP_Query ($ args); ?>
'pisică'
argumentul poate fi utilizat pentru a prelua diapozitive din diferite categorii, astfel încât să puteți separa grupurile de diapozitive și să utilizați glisoare multiple pe mai multe pagini. Dacă intenționați să utilizați doar un singur glisor în site-ul dvs., puteți șterge acea linie și sunteți bine să mergeți.
Dacă sunteți interesat de literatură sau de religie, ați putea dori să aveți câteva dintre citatele dvs. preferate în bara laterală - nu este o pierdere de spațiu dacă utilizați zona cu scopul. Deci, dacă doriți să listați o cotare aleatorie în bara laterală a fiecărei vizualizări de pagină, puteți utiliza următorul fragment de cod pentru a crea tipul de postare și utilizați următoarea interogare pentru a crea o buclă în bara laterală:
"Citate", "public" => true); register_post_type ('citate', $ args); add_action ('init', 'quote_post_type'); // Argumentele pentru configurare. $ args = array (// Obțineți tipul "psot" de tipul "psot" 'post_type' => 'citate', // Randomize the order. > 1,); // Instanțiați o nouă instanță de interogare. $ my_query = noua valoare WP_Query ($ args); ?>
O soluție simplă și elegantă.
Am găsit acest exemplu pe Scribu.net și trebuie să spun că ar putea fi cel mai bun WP_Query
truc în acest tutorial. Este un pic mai tehnic decât ceilalți, pentru că poate fi aplicat pe un site web de tip e-commerce care utilizează WordPress în acest context.
Iată fragmentul de cod pe care îl veți utiliza dacă doriți să afișați elemente dintr-un tip de articol particularizat "Produs" și să filtrați rezultatele cu câmpurile personalizate "de preț":
'product', // Configurați "interogarea meta". "meta_query" => array (array (// obțineți câmpul "price") "key" => 'price', // setați valorile prețului. comparati '=>' BETWEEN ', // priviti doar campurile numerice.' type '=>' numeric ',))); // Instanțiați o nouă instanță de interogare. $ my_query = noua valoare WP_Query ($ args); ?>
Un kudos mare pentru Silviu-Cristian Burca!
Iată un exercițiu distractiv - și vom folosi și API-ul Shortcode! În acest exemplu, vom crea un scurtcod care poate încorpora o postare în cadrul unei postări. (Abia m-am abătut de la denumirea codului scurt [Postception]
.) În următorul fragment de cod, creăm o funcție de cod scurt care ne permite să încorporăm postări (sau orice tip de articol personalizat) și ne permite să alegem să afișăm postul complet sau doar un fragment:
'post', 'plin' => true), $ atributele)); // argumente de instalare $ args = array (// Obțineți post tip ("post" implicit) => Introduceți o nouă instanță de interogare $ my_query = new WP_Query ($ args); // Verificați că avem rezultate de interogare dacă ($) my_query-> have_posts ()) // Începeți generarea de marcare $ output = '„; // Începeți cu buclă peste rezultatele interogării. în timp ce ($ my_query-> have_posts ()) $ my_query-> the_post (); // Adăugați titlu la ieșire. $ output = ' „; altceva // Mesaj de ieșire pentru a permite utilizatorului să știe că nu au fost găsite postări. $ output = '„; $ ieșire. = get_the_title (); $ output = '
„; // Descărcați mesajul complet dacă '$ full' este adevărat, în caz contrar, arătați extrasul dacă ('true' === $ plin) // Adăugați întregul conținut la ieșire. $ output = '„; $ ieșire. = get_the_content (); $ output = '„; altceva // Adauga extrasul la ieșire. $ output = '„; $ output = get_the_excerpt (); $ output = '… ". __ ("Vezi post complet", "tutsplus"). '' '; $ output = '„; // Începeți marcarea generatoare. $ output = '„; $ output = ' „; wp_reset_postdata (); returnați outputul $; add_shortcode ('embed_post', 'tutsplus_embedded_post_shortcode'); ?>". __ ("Nu s-au găsit mesaje", "tutsplus"). '
„; $ output = '
Iată o idee: De ce nu afișați niște "perverse" cu privire la mesajele dvs. viitoare către vizitatorii dvs.? Puteți utiliza următoarea funcție pentru a lista postările dvs. programate, cu sau fără extrase după titluri:
* * Utilizare fără extrase: * * * / tutsplus_show_drafts ($ show_excerpts = true) // Argumente de instalare. $ args = array ('post_status' => 'viitor', 'nopaging' => true); // Instanțiați o nouă instanță de interogare. $ my_query = noua valoare WP_Query ($ args); // Verificați că avem rezultate de interogare. dacă ($ my_query-> have_posts ()) // Începeți generarea de marcare. $ output = '„; // Începeți cu buclă peste rezultatele interogării. în timp ce ($ my_query-> have_posts ()) $ my_query-> the_post (); // Titlul postului de ieșire și extrasul (dacă este activat). $ output = ' „; altceva // Lăsați utilizatorul să știe că nimic nu a fost găsit. $ output = '„; $ output = '„; // Marcarea finală a generării. $ output = '". get_the_title (). '
„; $ ieșire. = get_the_title (); $ output = '„; dacă ($ show_excerpts) $ output. = '„; $ output = get_the_excerpt (); $ output = '„; $ output. = '„; $ output = ' „; wp_reset_postdata (); returnați outputul $; ?>". __ ("Nimic găsit", "tutsplus"). '
„; $ output = '
Dacă blogul dvs. este mai vechi de un an și conținutul dvs. este nemuritor (ceea ce înseamnă că o persoană din 2015 și 2025 va găsi articolul relevant), adăugarea unei secțiuni "Postare de la un an în urmă" poate amplifica afișările dvs. de pagină. Iată cum faceți acest lucru:
data ('j'), // luna (1 - 12). 'monthnum' => data ('n'), // An (minus 1). 'year' => date ('Y') - 1, // Arată doar o postare. 'posts_per_page' => 1); // Instanțiați o nouă instanță de interogare. $ my_query = noua valoare WP_Query ($ args); ?>
Utilizați această interogare pentru a crea o buclă care afișează o singură postare din anii trecuți.
Nu aveți altceva decât titlul de subpagini pentru a le pune în pagina "Servicii", "Lucrările noastre" sau "Portalul meu"? Poate un paragraf intro, dar ai dreptate, acele pagini sunt sortite să fie "substituenți". Totuși, este o idee bună să plasați sub-pagini acolo - poate o rețea cu miniaturi pătrată și titluri de mai jos. Să vedem ce interogare ar trebui să utilizăm la crearea unui astfel de șablon de pagină:
$ current_page_id, // Dezactivați paginarea. 'nopaging' => adevărat); // Instanțiați o nouă instanță de interogare. $ my_query = noua valoare WP_Query ($ args); ?>
Sper că v-ați bucurat de aceste exemple la fel de mult ca și când le-am pregătit. Am acordat o atenție deosebită oferindu-i exemple variate atât pentru a fi distractiv, cât și pentru a-ți declanșa creativitatea.
Dacă v-ați gândit la exemple mai bune în timp ce le citiți pe acestea sau dacă aveți întrebări, nu ezitați să scrieți un comentariu mai jos. Și dacă ți-a plăcut articolul, nu uita să îl împarți cu prietenii tăi!
În partea următoare, vom vorbi despre WP_User_Query
, una dintre clasele de soră din WP_Query
. Ne vedem atunci!