Tutoriale WordPress de încredere, atunci când aveți cea mai mare nevoie.
Ghidul începătorului pentru WordPress
Cupa WPB
25 de milioane+
Site-uri web care folosesc plugin-urile noastre
16+
Ani de experiență WordPress
3000+
Tutoriale WordPress de la experți

Cum să afișați o postare WordPress doar dacă are un câmp personalizat specific

Știi când trebuie să afișezi o postare WordPress doar dacă are un câmp personalizat specific? Am trecut și noi prin asta.

Când am început cu WordPress, orice fragment de cod părea intimidant, mai ales când tot ce voiam era să afișăm postări cu informații specifice.

Dar iată vestea bună: după ce am ajutat mii de începători WordPress, am constatat că chiar și ceva ce sună tehnic, cum ar fi filtrarea câmpurilor personalizate, nu trebuie să fie înfricoșător.

De fapt, vă vom ghida printr-o metodă simplă de cod pentru a face acest lucru.

Această soluție funcționează perfect, indiferent dacă publicați postări obișnuite de blog sau tipuri de postări personalizate bazate pe criterii specifice.

Cum să afișați o postare WordPress doar dacă are un câmp personalizat specific

💡 Pe scurt: Poți afișa doar postări WordPress care au un câmp personalizat specific folosind un WP_Query personalizat în fișierele temei tale (cum ar fi index.php) pentru a filtra acele postări.

📌 Notă rapidă: Acest tutorial este pentru afișarea postărilor WordPress dacă au o valoare introdusă într-un câmp personalizat specific. Dacă dorești să afișezi câmpuri personalizate pe partea frontală a unei postări WordPress, atunci poți citi ghidul nostru despre cum să afișezi câmpuri personalizate în temele WordPress.

De ce să afișezi postări WordPress cu un câmp personalizat specific?

Când creați o postare pe site-ul dvs. WordPress, puteți utiliza câmpuri personalizate pentru a adăuga metadate suplimentare postării.

Metadatele sunt informații suplimentare pe care le puteți adăuga unei postări. De exemplu, dacă ați scrie o recenzie de carte, ați putea adăuga câmpuri personalizate pentru „Numele autorului” sau „Evaluare în stele”.

Câmpurile personalizate sunt un concept avansat WordPress și există multe moduri de a adăuga câmpuri personalizate în WordPress. Veți găsi o mulțime de sfaturi utile despre cum să utilizați și să afișați câmpuri personalizate în postarea noastră, WordPress Custom Fields 101: Sfaturi, Trucuri și Hacks.

Poți adăuga metadate la o postare folosind câmpuri personalizate

Unul dintre utilizatorii noștri ne-a întrebat cum să afișăm postări WordPress doar dacă un anumit câmp personalizat era prezent. Acest lucru poate fi util dacă doriți să creați o pagină personalizată care listează toate postările care conțin un anumit câmp personalizat și/sau valoare.

După ce am răspuns cu soluția, am crezut că ar fi cel mai bine să o împărtășim cu toată lumea, astfel încât comunitatea mai largă WordPress.org să beneficieze și ea de pe urma ei.

Editarea fișierelor temei WordPress: Ce trebuie să aveți în vedere

Înainte de a începe, există câteva lucruri importante pe care ar trebui să le ai în vedere atunci când lucrezi cu fișierele temei.

Dacă adaugi cod direct în fișierele temei tale, atunci modificările tale se vor pierde la următoarea actualizare a temei.

De aceea recomandăm utilizarea unui plugin precum WPCode pentru a adăuga în siguranță cod PHP personalizat fără a edita tema. Dacă preferi să editezi fișierele temei, atunci asigură-te că folosești o temă copil, astfel încât modificările tale să fie păstrate.

Pentru a putea urma acest tutorial corect, iată câteva lucruri pe care ar trebui să le ai în vedere:

  1. Acest tutorial implică adăugarea de cod pe site-ul tău WordPress, deci nu este cel mai potrivit pentru începătorii complet. Dacă ești nou în acest domeniu, atunci va trebui să citești ghidul nostru despre cum să copiezi și să lipești cod în WordPress.
  2. Vă recomandăm să faceți backup site-ului dvs. și/sau să utilizați un mediu de staging, astfel încât site-ul dvs. live să nu fie afectat atunci când apare o eroare. Acest lucru se datorează faptului că veți adăuga cod în fișierele temei dvs., ceea ce poate fi riscant.
  3. Vă recomandăm să înțelegeți cum funcționează ierarhia șabloanelor WordPress, astfel încât să știți unde să adăugați codul ulterior.
  4. De asemenea, va trebui să vă familiarizați cu modul în care funcționează buclele WordPress, deoarece vom apela acești parametri într-o interogare WordPress.

📍Notă importantă: Acest tutorial funcționează doar cu temele WordPress clasice. Teme de tip bloc folosesc Editorul de Site și o abordare diferită pentru a afișa conținutul, deci această metodă de editare a fișierelor șablon nu se va aplica.

Acestea fiind spuse, să vedem cum să afișăm o postare WordPress doar dacă are un câmp personalizat specific.

Pasul 1: Instalează un plugin pentru fragmente de cod

Unele tutoriale îți vor spune să deschizi fișierul index.php al temei tale și să rescrii complet bucla WordPress folosind ceva numit WP_Query. Nu recomandăm acest lucru.

Modificarea fișierelor șablon principale poate strica aspectul site-ului tău, poate cauza interogări duplicate în baza de date care încetinesc site-ul și poate strica complet paginarea (butoanele „Pagina Următoare”).

În schimb, cea mai sigură și eficientă modalitate de a face acest lucru este prin utilizarea hook-ului de acțiune pre_get_posts. Acesta îi spune WordPress-ului să filtreze postările *înainte* ca șablonul paginii să fie încărcat.

Pentru a adăuga acest cod personalizat, recomandăm utilizarea unui plugin precum WPCode. Acesta îți permite să adaugi în siguranță cod PHP fără a atinge direct fișierele temei tale, ceea ce înseamnă că site-ul tău nu va fi stricat dacă faci o greșeală și modificările tale nu se vor pierde atunci când tema ta se actualizează.

Pasul 2: Adaugă codul interogării personalizate

După ce ai instalat și activat WPCode, navighează la Fragmente de cod » Adaugă fragment în tabloul de bord WordPress și selectează „Adaugă propriul cod personalizat (Fragment nou)”.

Adăugați fragment personalizat în WPCode

Asigură-te că „Tipul codului” este setat la Fragment PHP.

Apoi, lipiți următorul cod:

<?php
add_action( 'pre_get_posts', 'wpb_filter_posts_by_custom_field' );

function wpb_filter_posts_by_custom_field( $query ) {

    // Only modify the main query on the front-end homepage
    if ( ! is_admin() && $query->is_main_query() && $query->is_home() ) {

        // Tell WordPress to only get posts with the custom field key 'color'
        $query->set( 'meta_key', 'color' );

    }
}

Mai întâi, codul verifică pentru a se asigura că modifică doar interogarea principală pe partea frontală a site-ului dvs. (în special pagina de pornire a blogului), lăsând tabloul de bord de administrare WordPress complet neatins.

Apoi, folosește $query->set pentru a spune WordPress să preia doar postările care au câmpul personalizat „color” atașat.

Deoarece acest cod modifică interogarea înainte ca pagina să se încarce, paginarea implicită a temei dvs. va funcționa perfect, fără niciun cod suplimentar! Pur și simplu comutați comutatorul WPCode la Activ și faceți clic pe butonul „Salvare fragment” pentru a-l activa.

Pasul 3: Filtrează după valoarea meta specifică (Opțional)

Ce se întâmplă dacă doriți să găsiți postări unde câmpul personalizat „color” are o valoare specifică, cum ar fi „blue”? Pentru a face acest lucru, trebuie doar să adăugați o regulă meta_value la codul dvs.

Fragmentul dvs. actualizat va arăta astfel:

<?php
add_action( 'pre_get_posts', 'wpb_filter_posts_by_custom_field_value' );

function wpb_filter_posts_by_custom_field_value( $query ) {

    if ( ! is_admin() && $query->is_main_query() && $query->is_home() ) {

        $query->set( 'meta_key', 'color' );
        $query->set( 'meta_value', 'blue' );

    }
}

Pasul 4: Filtrează după comparația meta (Opțional)

Puteți duce filtrarea dvs. și mai departe cu parametrul meta_compare. Acesta vă permite să găsiți postări care nu corespund unei valori.

De exemplu, pentru a afișa toate postările unde culoarea NU este „blue”, interogarea dvs. ar arăta astfel:

<?php
add_action( 'pre_get_posts', 'wpb_filter_posts_by_meta_compare' );

function wpb_filter_posts_by_meta_compare( $query ) {

    if ( ! is_admin() && $query->is_main_query() && $query->is_home() ) {

        $query->set( 'meta_key', 'color' );
        $query->set( 'meta_value', 'blue' );
        $query->set( 'meta_compare', '!=' );

    }
}

!= îi spune WordPress-ului să găsească toate postările unde câmpul „culoare” există, dar nu este egal cu „albastru”.

Există mulți alți operatori de comparație pe care îi puteți utiliza, pe care îi puteți găsi în documentația oficială pentru dezvoltatori WordPress.

Pasul 5: Filtrează postările după câmpuri personalizate multiple (meta_query)

Pentru scenarii mai complexe în care trebuie să filtrați postările pe baza mai multor câmpuri personalizate sau să combinați condiții (cum ar fi ȘI/SAU), veți folosi tabloul meta_query.

Acest lucru vă permite să definiți un tablou de condiții, fiecare vizând un câmp personalizat sau o valoare diferită.

De exemplu, pentru a afișa postări cu culoarea „blue” ȘI dimensiunea „large”, codul dvs. ar arăta astfel:

<?php
add_action( 'pre_get_posts', 'wpb_filter_posts_by_multiple_fields' );

function wpb_filter_posts_by_multiple_fields( $query ) {

    if ( ! is_admin() && $query->is_main_query() && $query->is_home() ) {

        $meta_query = array(
            'relation' => 'AND', // or 'OR'
            array(
                'key'     => 'color',
                'value'   => 'blue',
                'compare' => '=',
            ),
            array(
                'key'     => 'size',
                'value'   => 'large',
                'compare' => '=',
            ),
        );

        $query->set( 'meta_query', $meta_query );

    }
}

Această interogare va prelua postările care au atât câmpul personalizat „color” setat la „blue”, CÂT ȘI câmpul personalizat „size” setat la „large”.

Puteți ajusta parametrul 'relation' la „OR” pentru a găsi postări care corespund cel puțin uneia dintre condiții.

Exemplu din lumea reală: Afișează doar recenzii de 5 stele

Să spunem că aveți un site WordPress de recenzii de cărți și folosiți un câmp personalizat numit star_rating pentru a stoca scorurile recenziilor.

Puteți afișa cu ușurință doar postările care au o evaluare de 5 stele pe pagina de pornire a blogului dvs. folosind această interogare:

<?php
add_action( 'pre_get_posts', 'wpb_show_only_five_star_reviews' );

function wpb_show_only_five_star_reviews( $query ) {

    if ( ! is_admin() && $query->is_main_query() && $query->is_home() ) {

        $query->set( 'meta_key', 'star_rating' );
        $query->set( 'meta_value', '5' );

    }
}

Acest lucru este extrem de util dacă doriți să vă asigurați că fluxul dvs. principal prezintă doar conținutul dvs. cel mai bine cotat.

Întrebări Frecvente Despre Afișarea unei Postări Dacă Are un Câmp Personalizat Specific

Iată câteva întrebări pe care cititorii noștri le pun frecvent despre afișarea unei postări dacă are doar un câmp personalizat specific:

Întrebări Frecvente Despre Afișarea unei Postări Dacă Are un Câmp Personalizat Specific

Iată câteva întrebări pe care cititorii noștri le pun frecvent despre afișarea unei postări dacă are doar un câmp personalizat specific:

Există o modalitate de a face acest lucru fără a edita fișierele temei?

Da! De fapt, metoda pre_get_posts pe care o prezentăm în acest tutorial este concepută special pentru a nu fi nevoie să editați fișierele temei dvs. Folosind un plugin de fragmente precum WPCode, puteți aplica în siguranță acest filtru site-ului dvs. fără a atinge o singură linie din codul de bază al temei dvs.

Pot filtra postările după mai multe câmpuri personalizate?

Puteți. Cârligul pre_get_posts acceptă argumente complexe. Ați folosi un tablou „meta_query”, care vă permite să construiți o listă de condiții pentru a potrivi mai multe câmpuri personalizate simultan.

Metoda aceasta funcționează cu temele de bloc?

În timp ce cârligul pre_get_posts poate interacționa tehnic cu temele de blocuri, blocul nativ WordPress Query Loop nu are o interfață încorporată pentru filtrarea câmpurilor personalizate din cutie. Dacă utilizați o temă de blocuri Full Site Editing, cea mai ușoară abordare este să utilizați un plugin care adaugă filtrarea câmpurilor personalizate la blocul Query Loop, mai degrabă decât să scrieți PHP personalizat.

Care este diferența dintre „meta_key” și „meta_value”?

Gândiți-vă la „meta_key” ca la numele etichetei, cum ar fi „Culoare” sau „Stare”. „meta_value” este datele efective introduse în acel câmp, cum ar fi „Albastru” sau „Publicat”.

Utilizarea cheii găsește orice postare cu acel câmp personalizat atașat, în timp ce utilizarea valorii o filtrează pentru a găsi doar postările cu acea informație specifică.

Află mai multe moduri de a-ți personaliza site-ul WordPress

Iată mai multe modalități prin care vă puteți personaliza paginile WordPress:

Sperăm că acest tutorial v-a ajutat să învățați cum să afișați o postare WordPress doar dacă are un câmp personalizat specific. De asemenea, ați putea dori să vedeți ghidul nostru complet despre cum să editați un site WordPress și selecțiile noastre experte ale celor mai bune plugin-uri Figma pentru WordPress.

Dacă v-a plăcut acest articol, atunci vă rugăm să vă abonați la Canalul nostru de YouTube pentru tutoriale video despre WordPress. Ne puteți găsi, de asemenea, pe Twitter și Facebook.

Dezvăluire: Conținutul nostru este susținut de cititori. Acest lucru înseamnă că dacă faceți clic pe unele dintre linkurile noastre, putem câștiga un comision. Vedeți cum este finanțat WPBeginner, de ce contează și cum ne puteți susține. Iată procesul nostru editorial.

Cel mai bun instrumentar WordPress

Obține acces GRATUIT la instrumentarul nostru - o colecție de produse și resurse legate de WordPress pe care fiecare profesionist ar trebui să le aibă!

Interacțiuni cu cititorii

11 CommentsLeave a Reply

  1. am o întrebare domnule, dacă vreau să afișez un singur post și câmpuri personalizate, ce ar trebui să fac.
    nu vreau să afișez postarea cu câmpuri personalizate specifice. vreau să afișez toate câmpurile personalizate ale postării

  2. Salut, mulțumesc pentru tutorialul util. Am o întrebare, pe un site WordPress am setat o valoare meta numită "meta_country" și apoi am setat fiecare postare cu țara articolului, cum ar fi "us", "uk", "fr"... Acum încerc să adaug undeva pe pagina principală a blogului un link care să afișeze lista tuturor postărilor cu o anumită țară și o anumită etichetă. De exemplu, toate postările "UK" etichetate "APPLE".
    Nu înțeleg cum să fac asta, mă poate ajuta cineva?

  3. Nu am putut genera niciun rezultat decât dacă am inclus parametrul „post_type” în interogare.

    adică: $the_query = new WP_Query(‘post_type=page&meta_key=color’);

  4. Salut,

    Cum aș putea afișa postări care NU au un Câmp Personalizat specific? Aveți vreo idee?

    Mulțumesc!!!

    • Din câte știu din php, ar trebui să fie meta_key!=’your key’

      ;doar trebuie să știți că „!” înseamnă „nu”

Lasă un răspuns

Mulțumim că ai ales să lași un comentariu. Te rugăm să reții că toate comentariile sunt moderate conform politicii noastre de comentarii, iar adresa ta de e-mail NU va fi publicată. Te rugăm să NU folosești cuvinte cheie în câmpul nume. Să avem o conversație personală și semnificativă.