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_Query
sı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_key
değ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_key
Eğ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_value
değişken, tanımladığınız değere sahip postayı sorgular. meta_value
Dizge, 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_value
değişken, dizgi değerleri için ment meta_value_num
olduğ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_compare
Argü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_query
Sorguyu 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
, value
olarak çalışan, aynı şekilde meta-key
, meta-value
yukarıda anlatıldığı gibi. Karmaşık yukarıdaki compare
basitle 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 '. value
bir 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 value
bağı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
relation
Eğer mantıklı bir ilişki kullanarak sorgu özel meta veri istediğinizde kullanılır. Sen kullanabilir AND
ya OR
. Örneğin AND
, veri1 ve veri2'nin ölçütleri karşılayıp karşılamadığını karşılaştırmak için, OR
veri1 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 type
değ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ü, compare
yalnı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_query
Kullandığı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 );
value
Geç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_Query
Sı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_Query
kodeks sayfasına bakmanızı öneririm .