Özel Alanlara Dayalı Özel Döngü / Sorgu - CSS Hileleri

Anonim
En son Jason Witt tarafından güncellenmiştir.

WordPress temaları veya eklentileri tasarlar veya geliştirirseniz, bir gün özel meta alanlar için bir sorgu yapmanız gerekme ihtimali yüksektir. Bunlar, herhangi bir gönderiye, sayfaya veya özel gönderi türüne ekleyebileceğiniz tamamen özel anahtar / değer çiftleridir. WordPress, varsayılan olarak onlar için temel bir kullanıcı arayüzüne sahiptir veya bunlardan hoşlanmak için Gelişmiş Özel Alanlar gibi bir şey kullanabilirsiniz. Ancak davlumbazın altında ACF, normal ol 'özel alanlarını kullanır.

Şu anda bakmakta olduğunuz bu pasaj sayfası 1999'da yazılmıştır. O zaman, belirli özel alanlara sahip gönderileri sorgulamak için, "$ wpdb" global değişkenini kullanmanız gerekir. Bu, WordPress WP_Query () sınıfının desteklemediği MySQL sorguları oluşturmak için kullanılabilir. Neyse ki bugün WordPress, özel meta alanları için sorguları destekleyen argümanlara sahip.

Burada, belirli özel alanlara (ve değerlerine) sahip gönderiler için istekte bulunabileceğiniz ve bunlarda döngü oluşturabileceğiniz farklı yolları ele alacağız. Kullandığınız ister bu bilgiyi kullanmak mümkün olacak WP_Querysınıfı query_posts()ya get_posts(). O zamandan beri query_posts()ve sınıf get_posts()için sarmalayıcılar WP_Query. Hepsi aynı argümanları kabul ediyor.

Sorgu Bağımsız Değişkenleri

İşte WordPress Kodeksinden alınan bir WordPress sorgusunun temel bir örneği.

have_posts() ) ( echo '
    '; while ( $the_query->have_posts() ) ( $the_query->the_post(); echo '
  • ' . get_the_title() . '
  • '; ) echo '
'; ) else ( // no posts found ) /* Restore original Post Data */ wp_reset_postdata();

Buradaki $argsönemli kısım. Bunun istediğimiz gibi çalışmasını sağlamak için farklı argümanlar ileteceğiz.

Özel meta için sorgulama yaparken, kullanabileceğiniz iki bağımsız değişken "grubu" vardır. Bir grup, basit bir özel meta alan sorgusu ve diğer grup daha karmaşık özel meta alan sorguları içindir. Basit grupla başlayalım.

Meta Anahtarı

Bağımsız meta_keydeğişken, alan için kaydedilmiş bir değer olup olmadığına bakılmaksızın, veritabanına kaydedilmiş özel alan meta kimliğine sahip herhangi bir gönderiyi sorgulayacaktır. meta_keyEğer meta alanlarına verdikleri kimliğidir. Böyle:

Bu örnek, "alan1" kimliğine sahip özel meta alanına sahip herhangi bir gönderiyi sorgulayacaktır.

$args = array( 'meta_key' => 'field1' );

meta_value

Bağımsız meta_valuedeğişken, tanımladığınız değere sahip postayı sorgular. meta_valueDizge, değerleri için kullanılır. Bu örnek, "data1" değerine sahip özel bir meta alanına sahip tüm gönderileri sorgulayacaktır.

$args = array( 'meta_value' => 'data1' );

Ayrıca ikisini birleştirebilirsiniz. Bu örnek, yalnızca "data1" değerine sahip "field1" kimliğine sahip özel meta alanına sahip gönderileri sorgulayacaktır.

$args = array( 'meta_key' => 'field1', 'meta_value' => 'data1' );

meta_value_num

Meta_value_num bağımsız değişkeni, "meta_value" bağımsız değişkenine benzer. Bağımsız meta_valuedeğişken, dizgi değerleri için ment meta_value_numolduğunda, sayısal değerler içindir.

Bu örnek, "10" değerine sahipse "alan1" özel meta alanının nasıl sorgulanacağını gösterir.

$args = array( 'meta_key' => 'field1', 'meta_value_num' => '10', );

meta_compare

meta_compareArgüman anlaşıldığı gibidir aynen yapar. "Meta_value" ve "meta_value_num" bağımsız değişkenleriyle karşılaştırıcılar kullanmanıza izin verir. Kullanabileceğiniz karşılaştırıcılar '=', '! =', '>', '> =', '<', '<=', 'GİBİ', 'GİBİ DEĞİL', 'GİRİŞ', 'İÇİNDE DEĞİL' , 'ARASINDA', 'ARASINDA DEĞİL', 'MEVCUT DEĞİL', 'REGEXP', 'REGEXP DEĞİL' veya 'RLIKE'. "Data1" değerine sahip olmayan herhangi bir gönderinin nasıl sorgulanacağını gösteren bir örnek aşağıda verilmiştir.

$args = array( 'meta_key' => 'field1', 'meta_value' => 'data1', 'meta_compare' => '!=', );

Daha Karmaşık Sorgular

meta_query

Karmaşık sorgular için kullanacağınız ana argüman meta_query. Bu argüman kendi başına hiçbir şey yapmaz. Sadece WordPress'e özel meta alanlar için bir sorgu yapmak istediğinizi söyler. meta_querySorguyu tanımlamak için kullanılacak ek bağımsız değişkenler ekleyeceksiniz .

anahtar, değer ve karşılaştırma

Argümanlar key, valueolarak çalışan, aynı şekilde meta-key, meta-valueyukarıda anlatıldığı gibi. Karmaşık yukarıdaki comparebasitle benzerdir compare, ancak farklı bir karşılaştırıcı listesi alır. Karmaşık compare'=', '! =', '>', '> =', '<', '<=', 'GİBİ', 'GİBİ DEĞİL', 'GİRİŞ', 'İÇİNDE DEĞİL', 'ARASINDA ',' ARASINDA DEĞİL ',' VAR 'veya' MEVCUT DEĞİL '. valuebir dizi olabilir, ancak yalnızca karşılaştırma 'IN', 'NOT IN', 'BETWEEN' veya 'NOT BETWEEN' kullandığında.

İle birlikte 'VAROLAR' veya 'MEVCUT DEĞİL' kullanırsanız compare, bir valuebağımsız değişken belirtmenize gerek yoktur .

Burada, "veri1" değerine sahip "alan1" ve "veri2" olmayan değere sahip "alan2" varsa gönderileri sorgulayacak bir örnek verilmiştir.

$args = array( 'meta_query' => array( array( 'key' => 'field1', 'value' => 'data1' ), array( 'key' => 'field2', 'value' => 'data2', 'compare' => '!=', ) ) );

ilişki

relationEğer mantıklı bir ilişki kullanarak sorgu özel meta veri istediğinizde kullanılır. Sen kullanabilir ANDya OR. Örneğin AND, veri1 ve veri2'nin ölçütleri karşılayıp karşılamadığını karşılaştırmak için, ORveri1 veya veri2 ölçütleri karşılıyorsa kullanırsınız .

Bu argüman bağımsızdır. Tek bir özel meta alan parametrelerinde görünmediği anlamına gelir. Bir örneğe bakalım. Bu örnek yalnızca "veri1" değerine sahip "alan1" ve "veri2" değerine sahip "alan2" içeren gönderileri sorgulayacaktır.

$args = array( 'meta_query' => array( 'relation' => 'AND' array( 'key' => 'field1', 'value' => 'data1', ), array( 'key' => 'field2', 'value' => 'data2', ), ) );

relation"VEYA" olarak değiştirdiyseniz . Daha sonra, "alan1", "veri1" değerine sahipse veya "alan2", "veri2" değerine sahipse, herhangi bir gönderiyi sorgular.

tip

Bağımsız typedeğişken, sorgulanacak veri türünü seçmenize izin verir. "NUMERIC", "BINARY", "CHAR", "DATE", "DATETIME", "DECIMAL", "SIGNED", "TIME" veya "UNSIGNED" kullanabilirsiniz.

"TARİH" türü, compareyalnızca tarih biçimi "YYYYAAGG" ise "BETWEEN" ile kullanılabilir .

Bu örnek, "alan1" değerinin sayısal olduğu her gönderiyi sorgulayacaktır.

$args = array( 'meta_query' => array( array( 'key' => 'field1', 'value' => 'data1', 'type' => 'NUMERIC' ) ) );

Gerçek Dünya Örneği

Şimdiye kadar sadece gelişigüzel veri ve alanlarla örnekler verdim. Şimdi, size özel meta alanlarını sorgulamanın gerçek dünyasından bir örnek göstermek istiyorum.

Senaryo

Özel bir etkinlik gönderi türü oluşturdunuz. Etkinlik gönderisi türünün kimliğine sahip bir tarih özel alanı vardır event_date. Önümüzdeki 30 gün içinde geçerli tarihte başlayacak tüm olayları gösteren bir sorgu oluşturmak istiyorsunuz.

Biz kullanacağız meta_queryKullandığımız istediğimiz gibi argümanı type“TARİH” veri türü olarak “EVENT_DATE” alanını tanımlamak için argüman.

Bu sorgu:

$args = array( 'post_type' => 'post', 'posts_per_page' => -1, 'post_status' => 'publish', 'meta_query' => array( array( 'key' => 'event_date', 'value' => array( date( 'Ymd', strtotime( '-1 day' ) ), date( 'Ymd', strtotime( '+31 days' ) ) ), 'compare' => 'BETWEEN', 'type' => 'DATE' ) ) ); $event_query = new WP_Query( $args );

valueGeçerli tarih bir dizidir - 1 gün ile güncel tarihten 31 gün. "BETWEEN" karşılaştırıcısını kullandığımız için, yalnızca değer dizisi arasındaki gönderiler sorgulanacaktır, bu nedenle onları bir gün telafi etmek istiyoruz.

Bu sorgu ile önümüzdeki 30 gün içinde meydana gelen tüm olayları görüntüleyeceksiniz.

Sonuç

WP_QuerySınıf özel sorguları çok sayıda oluşturmanıza olanak tanıyacak çok esnek bir sınıftır. Sorgular için kullanabileceğiniz farklı argümanlar hakkında daha fazla bilgi edinmek istiyorsanız, WP_Querykodeks sayfasına bakmanızı öneririm .