Felipe Elia sfaturi pentru WordPress

WordPress este un CMS și, prin urmare, manipularea conținutului este unul dintre pilonii principali ai instrumentului. În acest post veți înțelege procesul utilizat de WP pentru a prelua ceea ce trebuie afișat și, de asemenea, modul în care este posibil să schimbați acest proces.

scopul acestui text nu este nicidecum un substitut pentru documentația oficială, care trebuie consultată întotdeauna. Scopul tău este să pui într-un singur loc ceea ce începătorii ar trebui să știe înainte de a începe să caute mai multe informații.

ce este o interogare WordPress?

interogare în engleză înseamnă interogare și este de obicei termenul folosit pentru a se referi la o declarație în SQL (Structured Query Language). În WordPress numim interogări interogările pentru conținutul realizat prin clasa wp_query.

ce este WP_Query?

WP_Query este clasa PHP din spatele tuturor căutărilor de conținut în WordPress. Acceptă mai mulți parametri în construcția sa, inclusiv tipuri de postări, meta date, taxonomii și date, precum și posibilitatea de a crea parametri personalizați.

clasa wp_query este declanșată la toate solicitările făcute către site-ul dvs., cu excepția, probabil, a unor excepții foarte rare pentru adresele controlate de Plugin care întrerup fluxul normal. De fiecare dată când numim o pagină, o postare, un termen de taxonomie etc. WordPress interpretează adresa solicitată prin API-ul rewrite și creează un WP_Query bazat pe argumentele interpretate.

etichete condiționale și WP_Query

crearea propriilor bucle: WP_Query și get_posts ()

când ne referim la bucla din WordPress vorbim despre iterație (fără n) de către postările selectate. De obicei, avem doar o buclă, care seamănă întotdeauna cu codul de mai jos:

dacă există postări, iterați peste ele. Prima afirmație din while este the_post(), care îi spune WordPress să pună variabilele următoarei postări a buclei în variabila globală $post, prin metoda setup_postdata() a clasei wp_query.

aceasta este apariția buclei principale, adică iterația prin setul de postări pe care WordPress le-a găsit la decodarea cererii și căutarea conținutului corespunzător. Dacă avem nevoie de un alt set de postări (conținut similar, conținut dintr-o anumită categorie în afara fișierului dvs. sau postări publicate după ceea ce este afișat, de exemplu) putem face acest lucru în două moduri: crearea unui nou obiect wp_query sau apelarea funcției get_posts (). Amândoi fac același lucru, dar vă vor întoarce lucruri diferite.

crearea unei bucle cu WP_Query

un exemplu simplu de a crea o buclă cu WP_Query:

observați cum testul și iterația pe have_posts() rămân acolo, la fel ca the_post(), dar de data aceasta ca metode ale variabilei pe care am creat-o.

funcția wp_reset_postdata () servește pentru a restabili variabila globală $post la starea sa înainte de interogarea noastră, adică va pune înapoi în global $post postul global $wp_query, pe care îl vom vedea mai târziu.

crearea unei bucle cu get_posts()

același exemplu folosind funcția get_posts():

funcția get_the_title () acceptă ca parametru un post diferit de ceea ce este în variabila globală $post. Dacă trebuie să utilizați funcția the_content (), de exemplu, va trebui să o schimbați pe cea globală, după cum urmează:

diferența dintre WP_Query și get_posts ()

diferența de bază este la ce veți avea acces. Folosind WP_Query aveți acces la numărul de postări găsite în total ($query->found_posts) și la numărul de pagini posibile ($query->max_num_pages), de exemplu. Funcția get_posts(), pe de altă parte, aduce câteva argumente deja completate, pe lângă faptul că, în mod implicit, este puțin mai rapidă: trece parametrul no_found_rows ca fiind adevărat, împiedicând interogarea finală să aibă opțiunea SQL_CALC_FOUND_ROWS și, cu aceasta, scutind MySQL de la trecerea cantității totale de rânduri găsite.

Global WordPress WP_Query și WordPress Wp_the_query

în acest proces de interpretare a cererii și generarea obiectului de clasă WP_Query WordPress creează două variabile globale: $wp_query, pe care probabil l-ați văzut undeva și $wp_the_query, care va fi întotdeauna copia originală a ceea ce a fost solicitat de utilizator. Dacă cineva se încurcă cu $wp_query, cel puțin îl putem readuce la starea sa normală cu $wp_the_query. Aceasta este exact ceea ce face funcția wp_reset_query ().

de ce nu ar trebui să query_posts() fi utilizate în fișierele tematice?

acesta este fluxul implicit al unei solicitări către o adresă a site-ului dvs. din afara tabloului de bord:

nu ar trebui să utilizați query_posts (), deoarece a fost numit înainte. Apelând-o din nou, veți duplica procesarea (solicitând WordPress să facă o altă interogare) și, în plus, puteți ignora ceea ce au folosit deja unele pluginuri.

paginarea este un alt exemplu al modului în care utilizarea query_posts() vă poate perturba munca. Dacă doriți să afișați 15 postări pe pagină într-o anumită categorie și să încercați să suprascrieți suma WP implicită prin query_posts() veți avea o situație în care primul element de pe a doua pagină ar trebui să fie al 16-lea, dar de fapt este doar al 11-lea.

cum se schimbă interogarea principală? Utilizarea pre_get_posts

utilizarea query_posts() nu este recomandată de ceva timp. De atunci, mulți au explicat de ce și i-au încurajat pe dezvoltatori să folosească acțiunea pre_get_posts, cu accent special pe Leo Bahiano, care a poreclit afectuos acțiunea preguetinho (utilizarea jocurilor de cuvinte cu preguetinho do Leo Bahiano este autorizată în comentarii).

utilizarea este simplă. Pentru a elimina paginarea În căutare, de exemplu, puteți utiliza următorul cod în tema dvs. functions.php :

codul atribuie funcția sa hook pre_get_posts, astfel încât funcția sa va fi executată de fiecare dată când o interogare este procesată. În cadrul acestuia trebuie să ne asigurăm că vom lucra doar la interogările necesare, așa că testăm dacă suntem cu adevărat în partea „frontală” a site-ului (în acest fel nu deranjăm nimic din panou), dacă suntem în interogarea principală a paginii, adică dacă interogarea în cauză este $wp_the_query și dacă toate acestea sunt adevărate, schimbăm atributul posts_per_page la -1, ceea ce înseamnă fără limită de postări.

un alt exemplu: ștergeți o categorie din lista postărilor de blog

dacă aveți nevoie de multe modificări, le puteți alătura tuturor într-o singură funcție:

concluzie



+