Kueri Advanced Post – WP_QUERY WordPress nesnelerini anlamak
Son zamanlarda, WordPress MetaTATA API’sı kullanılarak depolanan değere dayanarak özel bir yazı türünden birkaç filtreleme gerektiren bir projeye atandım. Popüler, yayınlama için ek verileri (ve özel yayın türleri) saklamak için meta verileri nasıl kullandığından, filtrelemenin bu meta verilerde nasıl çalıştığı hakkında bazı ayrıntıları paylaşmanın yararlı olacağını düşünüyorum. Bu makalede, yayınların çoğuna atıfta bulunacağım, ancak teori özel yazı türleri için de geçerlidir. WordPress ortamında meta verilere kısa bir giriş olan meta veriler, ek tablolar kaydetmeye gerek kalmadan belirli WordPress nesnelerinde ek bilgileri depolamanın ve almanın bir yoludur. Bunun en basit örneği, WordPress yayınlarına özel alanlar ekleme yeteneğidir.
Yapıldığında, bu özel alan (WP_ varsayılan tablosunun varsayıldığı varsayılarak) WP_Postmeta tablosunda saklanan meta veri tohumu tablosunda saklanır. WordPress eklentisi geliştiricileri, özel alan değerlerini depolamak için genellikle meta verileri kullanır, çünkü veritabanında herhangi bir değişiklik yapmaları gerekmez. WP_Query Nesnesi: Nedir ve onunla ne yapabilirsiniz? Meta verilere göre filtreleyebilmek için önce WP_Query nesnesini karşılamalısınız. WP_Query nesnesi, WordPress web sitesine olan varlık isteklerinin giriş ve çıkışlarıyla ilgilidir. Aslında, WP_Query ile tanışabileceğiniz ve etkileşime girebileceğiniz en yaygın yer, yayınların veya sayfaların bir listesini görüntülerken döngüdedir.
WP_Query tarafından yapılan şey, işlenen sorgu türünü belirlemek ve istenen gönderiyi almaktır. Kategori arşivlerini, tarihli arşivleri, yemleri veya aramayı iyi bir örnek olarak düşünün. Ayrıca, örneğin sayfalandırma yaparken başka bir zamanda çizilebilen talep hakkında çok fazla bilgi depolar. WP_Query nesnesini kullanmak, bir dizi belirtilen argümana dayanarak özel filtrelenmiş yayınlardan oluşan bir koleksiyon oluşturmanıza ve erişmenize olanak tanır. Bu nedenle, bu yayını ve ilgili verileri ihtiyacınız olan her şekilde göstermenize olanak tanır. WordPress’teki tüm varsayılan varlık verileri yayınlara (sayfalar, ürünler, özel yayın türleri) dayandığından, WP_Query nesneleri muhtemelen en yaygın olarak kullanılan en sınıftır. WordPress web sitesinin tamamı. WP_Query’yi çalışırken göreceğiniz en yaygın sayfa blog sayfanızda. Orada, ne kadar görüntülenen (genellikle 10) sınırlandıran ve yayınların toplam gönderisini geri yükleyen bir yazı listesini aldı, böylece sayfalandırma işlevi hangi sayfalama bağlantılarının görüntüleneceğini belirleyebilir. Bir sonraki WordPress projeniz için yardıma mı ihtiyacınız var? Jonathan Bossenger’ı işe alın ve hemen onunla çalışmaya başlayın!
Post/Post_Type Sonuçlarınızı filtrelemek için Posta ve WP_Query Parametrelerini Kullanma Parametrelere göre yayınlarınızı veya yayın türlerinizi nasıl filtreleyebileceğiniz hakkında bazı basit WP_Query örneklerine bakalım. [kod lang = ‘php’] $ args = array (‘Posts_per_page’ => 10); $ the_query = yeni wp_query ($ args); [/Kod] Bu, yalnızca ‘Posts_per_page’ argümanlarını içeren oldukça basit bir sorgu, devam eden argümanlardır. Bu kuyruk tüm yayınları almalı, ancak yayın sayısını 10 ile sınırlamalıdır. Öyleyse bu sorgu için gerçek SQL sorgularının ne olduğunu görelim. .posts.post_type = ‘post’ ve (wp_posts.post_status = ‘yayın’ veya wp_posts.post_status = ‘süresi doldu’ veya wp_posts ‘. Aslında SQL sorgularından daha büyük detaylar, varsayılan olarak wp_qury tarafından yapılan her şeyi görmek için biraz teknik, düzgün bir şekilde düzgün olsa da (SQL_CALC_FOUND_ROWS kullanarak Post_STATUS gibi şeyleri kontrol edin, Post_Date’e dayalı sipariş)
Şimdi WP_Query argümanımızı biraz daha genişletelim. [kod lang = ‘php’] $ args = array (‘posts_per_page’ => 10, ‘sipariş’ => ‘başlık’, ‘sipariş’ => ‘asc’); [/Code] Şimdi sorgunun sonuçlarının başlığın başlığına ve sıralama sırasına göre sıralanmasını bekliyoruz. Yeterince elbette, SQL sorguları güncellendi: [kod lang = ‘sql’] seçin SQL_CALC_ROW_ROWS WP_POSTS.ID 1 = 1 ve wp_posts.posts.post_type = ‘post’ ve (wp_posts.posts.tatus = ‘yayın’ veya wp_posts = ‘süresi dolmuş’ veya wp_posts ‘. [/limit kodu] Oldukça standart olan şeyler, ancak wp_query’nin gücünün sadece bazı sorgu bağımsız değişkenlerini uygulayarak nasıl olduğunu görmek ilginç. WP_Query CODEX WordPress’teki belgeler, mevcut tüm sorgu parametrelerini içerir. Bu, okumak için oldukça geniş ve çok kullanışlı bir belgedir. Post/Post_Type sonuçlarınızı şimdiye kadar meta postanın anahtar/değeri ile filtrelemek için özel bir düzlem parametresi kullanmak, parametre WP_Posts tablosundaki alanı temsil ettiğinden, şimdiye kadar doğrudan yazı ile ilgili parametrelere odaklandım. Şimdi biraz daha derine bakmamız ve meta verilere göre direkleri nasıl filtreleyeceğimizi anlamamız gerekiyor.
Basit bir örnekle başlayalım.Ürün (‘ürün’ salyangozu olan) adlı özel bir yazınız var ve ürün için tek bir renk dizesi (örneğin beyaz, sarı, mavi) sakladığınız ‘renk’ adlı özel bir düzlemi var.Artık mavi olan tüm ürünleri almak istiyorsunuz.Sorguyu wp_query argümanınızın üzerindeki genişletmek şimdi şuna benzeyecektir: [kod lang = ‘php’] $ args = array (‘post_type’ => ‘ürün’, ‘Post_per_page’ => 10, ‘orderby’ => ” Başlık ‘,’ sipariş ‘=>’ asc ‘,’ meta_key ‘=>’ renk ‘,’ meta_value ‘=>’ mavi ‘);[/kod]
Dikkat edilmesi gereken ilk şey, ‘Post_Type’ bağımsız değişkenini nasıl eklediğimizdir, böylece sadece ürün direğine filtre oluruz. Eklediğimiz ikinci şey Meta_key ve Meta_Value argümanı. Şimdi, ürüne göre filtreye güncellenen sorguları görmeyi ve meta verilerin depolandığı meta veri tablosuna bir kombinasyon eklemeyi ve meta_key ‘renk’ ile filtrelemeyi umuyorum: [kod lang = ‘sql’] sql_posts.id’ten wp_posts.id’i seçmeyi umuyorum. iç birleşir wp_postmeta Active (wp_posts .id = wp_postmeta.post_id) burada 1 = 1 ve (wp_postmeta.meta_key = ‘postcolor’ ve wp_p_p_post_type = ‘ürün’ ve (wp_posts.postss.postss.postss.postss.postss.posts.posts.posts.post süresi doldu ‘veya wp_posts.post_status =’ future ‘veya wp_posts.post_status =’ taslak ‘veya wp_posts’ veya wp_posts.posts.post_status = ‘süresi doldu’ veya wp_posts.posts.post_status = ‘private’) limit 0, 10 [/]]]
Tabii ki, hepsi bu. Öyleyse biraz daha ileri gidelim. Ürününüzde ‘Mevcut_from_date’ ve ‘Mevcut_to_Date’ meta anahtarınız olduğunu varsayalım. Kullanıcıların o tarihte ‘kullanılabilir’ ürünleri arayabilecekleri bir arama formu oluşturmak istersiniz. Kullanıcılar tarihi ve tarihi seçecek ve yayınınızı bu alana göre filtrelemek istersiniz. Sorgu bağımsız değişkeninde meta_key ve meta_value alanlarını güncelleyemezsiniz, sorgularınızı daha fazla ayarlamak için Meta_query argüman argümanını kullanmanız gerekir. [kod lang = ‘php’] $ args = Array (‘Post_type’ => ‘ürün’, ‘Post_per_page’ => 10, ‘sipariş’ => ‘başlık’, ‘sipariş’ => ‘asc’, ‘meta_query’ => Array (‘ilişki’ => ‘ve’, dizi (‘anahtar’ => ‘mevcut_from_date’, ‘değer’ => dizi ($ from_date, $ to_date), ‘karşılaştır’ => ‘arasındaki’, ‘türü’ => ‘Tarih’,), dizi (‘Key’ => ‘Mevcut_to_date’, ‘değer’ => dizi ($ from_date, $ to_date), ‘=>’ arasındaki ‘,’ type ‘=>’ tarih ‘ ,),)); [/Code] ($ from_date değişkeni ve $ to_date üzerindeki örnekte not kullanıcı formunu göndermekten açıklanmış olmalıdır) SQL seviyesinde neler olduğuna bakalım. [Kod lang = ‘sql’] wp_posts iç wp_postmetmeta aktif (wp_postmeta.post_id) iç skl_calc_found_rows wp_posts.id seç
Ve ‘2017-10-01’ ve ‘2017-10-01’ arasında) ve (mt1.meta_key = ‘mevcut_to_date’ ve cast (mt1.meta_value ‘2017-10- arasında tarih olarak) 01 ‘ve’ 2017-10-01 ‘)) ve wp_posts.post_type =’ post ‘ve (wp_posts.posts_status =’ yayın ‘veya wp_posts.posts =’ süresi dolmuş ‘veya wp_posts.posts.posts_status =’ ‘ wp_posts.posts.posts.posts = ‘taslak’ veya wp_posts.post_status = ‘potedasyon’ veya wp_posts.posts_status = ‘son kullanma’ veya wp_posts.posts_status = ‘kişisel’) wp_posts.Id siparişi Kabul edilecek çok fazla ama kısaca sorguya aşağıdakileri ekleyin: Meta_key’in değerini tarih olarak (genellikle metin olarak saklanır) yayınlamak, tarihin tarihinin gerçekleşmesine izin vermek için
Mevcut_to_date anahtarının gönderilen iki tarih arasında olduğu filtreleme yayınları
Ayrıca, Mevcut_to_Date tuşunun gönderilen iki tarih arasında olduğu bir gönderiyi filtreleyin
Sorgu argümanınıza sadece bir ek argüman eklemek için yeterince büyük bir SQL sorgusu! WP_Query’yi neden çoğu zaman daha iyi tanımanız gerekir, bir WordPress web sitesi oluştururken, asla WP_QUY nesneleri hakkında kullanmaya veya endişelenmenize gerek kalmayacaktır. Bir tema, bir çocuğun teması (veya basit eklenti) oluşturuyorsanız, yayınlarınızın veya sayfalarınızın bir listesini almak ve oluşturmak için WP_Query kullanmanız gerekebilir, ancak yalnızca gerçekten derinlemesine ayarlamaya ihtiyacınız varsa. WP_Query nesnelerinin çoğu kapsamdadır ve basit sınav ‘(HAVE_POSTS ())’ döngüyü kullanmak için ihtiyacınız olan her şey ise. Bununla birlikte, daha spesifik bir şey inşa ediyorsanız (daha sofistike bir eklenti, özel bir yazı veya bir çocuğun teması kullanıyor), sadece yayınları veya sayfaları almaktan ve listelemekten daha fazlasını yapması gereken bir noktada, kullanmanız gerekir. WP_Query nesnesi. WP_Query nesnesini nasıl kullanacağını bilmek (veya sadece bilen birini işe almak) geliştirme sürenizi kaydedecek ve yalnızca ürün kodunuzu değil, aynı zamanda WordPress standartlarına ve uygulamalarına uygun olduğundan emin olacaktır. Bu aynı zamanda, ürününüzü yapmaya devam etmek için ek WordPress geliştiricileri kullanmanız gerekiyorsa, kuyruğunuzu bir anda alıp güncelleyebilecekleri anlamına gelir. Yukarıda yayınladığım orijinal meta veri örneğine geri dönelim (tarihin tarihi olan). WP_Query kullanmadan sorgu yapmanız ve sonuçları üretmeniz gerekip gerekmediğini düşünün. Global $ WBDB;
$ query = “SEÇ SEY SEÇ SEÇ SEÇ SELECT WP_POSTS İç WP_POSTMETA Active (wp_posts.id = wp_postmeta.post_id) iç wp_postmeta AS MT1 Active (wp_posts.id = wp_pmeta wheptait = mt1. tarih) $ from_date ve $ to_date) ve (mt1.meta_key = ‘mevcut_to_date’ ve döküm (mt1.meta_value tarih olarak) ‘ve (wp_posts.post_status =’ yayınlama ‘veya wp_posts.post_status =’ expred ‘veya wp_pss.post_status =’ expired ‘ ‘Future’ veya wp_posts.posts.posts = ‘taslak’ veya wp_posts.posts.posts.status = ‘porthed’ veya wp_posts. Post_status = ‘kişisel’) wp_postss.Id siparişlerine göre wp_posts_title asc sınırı 0, 10 “$ sonuç = $ wpdb-> get_results ($ query, nesne); Tüm SQL’leri yazmak (ve test etmek) yerine wp_query kullanarak, kodunuz aşağıdaki örnek gibi görünebilir: [kod lang = ‘php’] $ args = array (‘post_type’ => ‘ürün’, ‘Posts_per_page’ = > 10, ‘sipariş’ => ‘başlık’, ‘sipariş’ => ‘ASC’, ‘meta_query’ => dizi (‘ilişkiler’ => ‘ve’, dizi (‘anahtar’ => ‘mevcut_from_date’, ‘değer ‘=> Array ($ from_date, $ to_date),’ karşılaştır ‘=>’ arasında ‘,’ type ‘=> tarih’,), dizi (‘anahtar’ => mevcut_to_date ‘,’ değer ‘=> dizi ($ from_date , $ to_date), ” => ‘arasındaki’, ‘type’ => ‘tarih’,),));