İçindekiler
WordPress php işlemleri; get_posts
, geliştiricilerin içerik parçalarını WordPress veritabanından almasına izin veren güçlü bir işlevdir . Hangi yayınları, sayfaları ve özel yayın türlerini aradığınızı en ince ayrıntısına kadar belirleyebilir , özel sonuç kümenizi alabilir, sonra bir PHP / MySQL ninja gibi öğeleri filtreleyebilir ve sipariş edebilirsiniz.
Ancak PHP uzmanı değilseniz korkmayın. İşlev basit veya gelişmiş sorgular oluşturmaya izin veren bir dizi parametre tutarken , web sitenizde görüntülenecek özel gönderi listeleri oluşturmak için biraz PHP bilgisine ihtiyacınız vardır get_posts
.
WordPress kullanmak get_posts
iki adımlı bir işlemdir:
SELECT
ifade yazmazsınız. Sadece bir dizi parametre tanımlamanız ve onu get_posts
işleve iletmeniz yeterlidir . WordPress bu diziyi gerçek ve güvenli bir MySQL sorgusuna dönüştürür , veritabanına karşı çalıştırır ve bir dizi yayın döndürür.get_posts
bir foreach döngüsü ile döndürülen sonuç kümesini geçmeniz gerekir .Bununla birlikte, bu yazıda, öncelikle yukarıda belirtilen anahtar kavramlara, özellikle nasıl get_posts
çalıştığına, özel bir sorgunun nasıl oluşturulacağına ve ön sitede verilerin nasıl gösterileceğine dalacağız.
Daha sonra, testleriniz ve geliştirmeniz için hazırlama ortamınızda yakalayabileceğiniz, düzenleyebileceğiniz ve kullanabileceğiniz bir kod pasajı ile gerçek dünya örneği sunacağım.
Not: Genellikle yayınlar, sayfalar ve özel yayın türleri arasında ayrım yaparız. Bu makalede, normal blog gönderileri, sayfalar ve özel gönderi türleri için ‘gönderiler’ terimini kullanıyoruz . Tüm bu gönderi türleri veritabanının ‘wp_posts’ tablosunda saklanır . Gönderi türleri arasındaki temel fark ‘post_type’ alanının değeridir . Bir geliştiricinin bakış açısından, yayınlar, sayfalar ve özel yayın türlerinin tümü yayınlardır .
Codex açıklar işlevi aşağıdaki gibi:get_posts
En son gönderilerin bir dizisini veya verilen ölçütlerle eşleşen gönderileri alır.
get_posts
Bu şekilde kullanabiliriz :
$args = array( 'numberposts' => 20, 'category' => 4 ); $my_posts = get_posts( $args ); if( ! empty( $my_posts ) ){ $output = '
Yukarıdaki işlev, belirtilen kategorideki (varsayılan olarak 'post_type'
is 'post'
) en son 20 blog gönderisini alır ve bir $post
nesne dizisi döndürür . Mesajları ekranda görüntülemek için dizi üzerinde yineleme yapabilirsiniz. Oldukça kolay, değil mi?
get_posts
kullanımlarıWP_Query
sonrası öğeleri almak ve aynı parametreler kullanılabilir in bir dizi tutar WP_Query
(birkaç istisna dışında). Bu nedenle, özel sorgularımızı oluşturmak için kullanabileceğimiz çok sayıda değişken listemiz var. Bu parametreler aşağıdaki 15 kategoride gruplanmıştır :
Yukarıdaki listeye hızlı bir bakış, WordPress veritabanında oluşturabileceğiniz ve çalıştırabileceğiniz özel sorguların çeşitliliği hakkında bir fikir verebilir. Şimdi sorgu parametrelerine daha derinlemesine bakalım ve yayın listemizi oluşturmaya başlayalım.
Her parametre kategorisi aynı bilgi parçasına ilişkindir. Örneğin, yazarı kimlik veya isim adına göre tanımlayarak, belirtilen yazar (lar) dan yayınları almak veya belirtilen yazar (lar) ı hariç tutmak için bir sorgu oluşturabiliriz. Aynı şekilde, kategorilere, etiketlere, sınıflandırmalara, tarihe, özel alanlara ve daha fazlasına göre yayınlar getiren sorgular oluşturabiliriz.
Birçok parametre, ait oldukları kategoriye bakılmaksızın oldukça benzer bir şekilde kullanılabilir. Örneğin, aşağıdaki parametreler veritabanını posta yazarlarına göre sorgulamaya izin verir:
author
( int ) – yazar kimliğiauthor_name
( string ) – yazarınuser_nicename
author__in
( dizi ) – birden fazla yazarın kimliğinden oluşan bir diziauthor__not_in
( dizi ) – sonuç kümesinden hariç tutulacak birden fazla yazar kimliğinden oluşan bir diziBu parametreleri nasıl kullanabiliriz?
Aşağıdaki örnekte parametre 'author'
, yazarın ID = 1 ile yazdığı en son blog gönderilerini istediğimizi belirtir:
$my_posts = get_posts( array( 'author' => 1 ) );
Aynı ‘author’ parametresi veritabanını farklı şekillerde sorgulamaya izin verir:
// return an array of posts from specific authors $my_posts = get_posts( array( 'author' => '1,5,12' ) );
// return an array of posts excluding the specified author $my_posts = get_posts( array( 'author' => -1 ) );
Bu nedenle, parametrenin değerine bağlı olarak, tek bir yazardan (tamsayı), birden çok yazardan (virgülle ayrılmış değerler listesi) veya bir yazarı (negatif değerler) hariç tuttuğunuz bir sonuç kümeniz olur.
Diğer parametreler ek esneklik sağlar. Örneğin, get_posts
birden çok yazardan en son blog yayınlarının bir dizisini döndürmek için aşağıdaki çağrı :
// return an array of posts from multiple authors $my_posts = get_posts( array( 'author__in' => array( 1, 5, 12 ) ) );
Ayrıca birden fazla yazarı da hariç tutabiliriz:
// return an array of posts from multiple authors $my_posts = get_posts( array( 'author__not_in' => array( 1, 5, 12 ) ) );
Benzer şekilde, bazı özel farklılıklarla kategori parametreleri, etiket parametreleri, post tipi parametreler de kullanabiliriz. Örnek olarak, kategori parametrelerine bakın:
cat
( int )category_name
( dize )category__and
( dizi )category__in
( dizi )category__not_in
( dizi )Her neyse, tüm parametrelerin kullanımı bu parametreler kadar kolay değildir. Ayrıca, kategori parametrelerini, yazı tipi parametrelerini, mime tipi parametrelerini vb. Tek bir sorguda kullanabiliriz. Bu, sonuç kümesindeki öğeler üzerinde ayrıntılı bir kontrole sahip olduğumuz anlamına gelir ve yazı türlerine, özel sınıflandırmalara ve özel alanlara dayalı olarak daha gelişmiş sorgular oluşturabiliriz.
Hadi daha derine dalalımmı!
Özel gönderi türlerine ve özel sınıflandırmaya dayalı daha gelişmiş bir sorgu ile bir adım ileri gidelim. Aşağıdaki yayın türüne sahip olduğunuzu varsayalım:
name : kitap
sınıflandırması name : book_category, book_author
desteği : başlık, editör, küçük resim, alıntı, özel alanlar
Belirtilen book_category
özel sınıflandırmadaki en son kitapların bir listesini istediğinizi varsayalım . İşte argümanlar dizisi:
$args = array( 'post_type' => 'book', 'tax_query' => array( array( 'taxonomy' => 'book_category', 'field' => 'slug', 'terms' => 'sci-fi' ) ), );
Yukarıdaki argümanlar WordPress’e içindeki tüm kitapları almasını söyler 'sci-fi'
'book_category'
.
'tax_query'
Parametre bağımsız değişken dizilerinin (diziler içeren bir dizi IE) ‘nin bir dizi alır. Bu iç içe diziler, aşağıdaki örnekte gösterildiği gibi, birden çok taksonomiye dayanan çok karmaşık sorgular oluşturulmasına izin verir:
$args = array( 'numberposts' => 10, 'post_type' => 'book', 'relation' => 'AND', 'tax_query' => array( array( 'taxonomy' => 'book_category', 'field' => 'slug', 'terms' => 'sci-fi' ), array( 'taxonomy' => 'book_author', 'field' => 'term_id', 'terms' => 22 ) ) );
Bu parametreler , # 22 numaralı kimliğiyle yazılmış en son 10 'book'
gönderi türünün bir listesini almamızı sağlar . Parametre listelenen her taksonomisi arasındaki mantıksal ilişkiyi belirler . Yukarıda değerini # 22 olarak yazdığımız kategoriye ait tüm kitapları almamız gerektiğinden değerini ayarladık .'sci-fi'
'book_category'
'book_author'
'relation'
'tax_query'
AND
'sci-fi'
AND
Bazen, belirli bir özel alan anahtarına ve / veya değerine dayalı olarak gönderi listeleri oluşturmanız gerekebilir.
$args = array( 'meta_key' => 'cover', 'meta_value' => 'paperback', 'meta_compare' => '=' );
Bu parametreler, tüm yayınları özel alan anahtarı ve değerine göre almamızı sağlar. parametrenin 'meta_compare'
değerini test etmek için gereken operatörü ayarlar 'meta_value'
. İşte 'meta_value'
, '='
aynı zamanda varsayılan değerdir.
Mevcut değerlerdir '='
, '!='
, '>'
, '>='
, '<'
, '<='
, 'LIKE'
, 'NOT LIKE'
, 'IN'
, 'NOT IN'
, 'BETWEEN'
, 'NOT BETWEEN'
, 'NOT EXISTS'
, 'REGEXP'
, 'NOT REGEXP'
veya 'RLIKE'
.
Bu oldukça kolay bir örnek, ancak daha gelişmiş sorgular oluşturabiliriz. Bir sonraki örnekte, 2010’dan sonra yayınlanan fantezi kitaplar için veritabanını sorguluyoruz:
$args = array( 'post_type' => 'book', 'meta_key' => 'year_published', 'meta_value_num' => 2010, 'meta_compare' => '>', 'tax_query' => array( array( 'taxonomy' => 'book_category', 'field' => 'slug' 'terms' => 'fantasy' ) ) );
Ve daha da ileri gidebiliriz. Bir sonraki örnekte, bir yazı türünü özel bir sınıflandırma ve iki özel alanla karıştırıyoruz:
$args = array( 'post_type' => 'book', 'tax_query' => array( array( 'taxonomy' => 'book_category', 'field' => 'slug' 'terms' => array( 'fantasy' ) ) ), 'meta_query' => array( 'relation' => 'AND', array( 'key' => 'year_published', 'value' => 2010, 'type' => 'numeric', 'compare' => '>', ), array( 'key' => 'price', 'value' => array( 10, 25 ), 'type' => 'numeric', 'compare' => 'BETWEEN', ) ) );
Burada, 2010’dan sonra yayınlanan BETWEEN
ve 10 $ ve 25 $ maliyeti olan fantezi kitaplarının bir listesini almak için bir dizi parametre ayarladık .
'meta_query'
Parametrenin , parametre gibi çalıştığını görebilirsiniz 'tax_query'
. Birden çok meta anahtar / değer çiftine dayalı gelişmiş sorguları oluşturmamıza izin veren bir dizi diziyi tutar. Sorgu parametrelerinin kapsamlı bir listesi ve çok sayıda örnek için WP_Query
belgelere bakın .
get_posts
Fonksiyonu ile aynı argümanları alır WP_Query::parse_query()
( Kodeksi bakınız ), ancak bazı özel parametreler bir göre biraz farklıdır yapmak WP_Query
nesne.
Belki 'numberposts'
sorgunuzda parametreyi kullanmadınız ve neden listenizde yalnızca 5 öğe gördüğünüzü merak ediyorsunuz.
Varsayılan olarak, Ayarlar → Okuma yöneticisi sayfasında ayarladığınız yayın sayısı, bir WordPress sorgusu tarafından alınacak yayın sayısını belirler. Neyse, için özel bir değer belirtmek yoksa 'numberposts'
ya 'posts_per_page'
, get_posts
mesajların farklı bir sayıyı döndürür.
'numberposts'
alınacak toplam yayın sayısıdır. Bu bir takma 'posts_per_page'
içinde WP_Query
, ama ikisi arasında bir fark var: varsayılan olarak, mesajların sayısı kullanırken almak için get_posts
5’tir iken 'posts_per_page'
de WP_Query
WordPress blog sayfa başına mesajların sayısı ile varsayılan. Bağımsız değişkenler dizisi için 'numberposts'
veya 'posts_per_page'
içinde bir özel değer ayarlayarak varsayılan değeri geçersiz kılabilirsiniz .Buna ek olarak 'numberposts'
, aşağıdaki parametreler spesifiktir get_posts
:
'category'
kategori kimliklerinin virgülle ayrılmış listesidir. İçindeki 'cat'
parametrenin takma adıdır WP_Query
.'include'
, virgülle ayrılmış posta kimlikleri listesidir. Bu, içindeki 'post__in'
parametrenin takma adıdır WP_Query
.'exclude'
, virgülle ayrılmış posta kimlikleri listesidir.'suppress_filters'
filtrelerin bastırılıp bastırılmayacağını belirtir. Bu parametre varsayılan olarak true
in get_posts
iken, varsayılan olarak false
in olur WP_Query
( bkz. Parça üzerinde ).get_posts
Fonksiyon tanımlanır wp-includes/post.php
. Track (WordPress 5.2) veya yerel WordPress kurulumunuzdaki get_posts
kaynak kodunu kontrol ederek nasıl çalıştığını derinlemesine inceleyebilirsiniz .
'orderby'
ve 'order'
sonuç kümesindeki öğeleri sıralayın. Tarafından Araban sıralama mesajlar 'ID'
, 'author'
, 'title'
, 'name'
, 'type'
, 'date'
, 'modified'
, 'parent'
, 'rand'
, 'comment_count'
ve diğer birçok şekilde, artan veya azalan sırada.
Basit bir sorgunuz varsa 'order'
ve için bir değer ayarlamanız yeterlidir 'orderby'
. Aşağıdaki örnekte yayınlar, artan sırada posta adına göre sıralanmıştır:
$args = array( 'author' => '1,5,12', 'orderby' => 'name', 'order' => 'ASC' );
Bu oldukça basit. Peki ya gelişmiş bir sorunuz varsa? Yani: Gelişmiş bir meta sorgusunda öğeleri bir veya daha fazla özel alan değerine göre sıralayabilir miyiz?
WordPress 4.0 ve WordPress 4.2 önemli iyileştirmeler getiren etmek 'orderby'
ve 'meta_query'
parametreler. Artık meta sorgunun belirli yan tümcelerine göre sipariş vermek için yeni bir sözdizimimiz var. Yeni sözdizimi sayesinde, 'orderby'
parametreden meta sorgunun belirli maddelerine referanslar oluşturmak için dizinleri kullanabiliriz .
Bu geliştirmeler sayesinde, yukarıdaki örnekte yer alan meta sorgu aşağıdaki gibi yazılabilir:
$args = array( 'meta_query' => array( 'relation' => 'AND', 'year_clause' => array( 'key' => 'year_published', 'value' => 2010, 'type' => 'numeric', 'compare' => '>', ), 'price_clause' => array( 'key' => 'price', 'value' => array( 10, 25 ), 'type' => 'numeric', 'compare' => 'BETWEEN', ) ), 'orderby' => 'price_clause', );
Yukarıdaki örnekte öğeleri sıraladık 'price_clause'
.
WordPress php konularında daha fazlasını da yapabiliriz. WordPress 4.0’dan itibaren , get_posts
aşağıdaki örnekte görüldüğü gibi, tek bir dizin yerine bir dizi meta sorgu dizini geçirebiliriz :
$args = array( 'meta_query' => array( 'relation' => 'AND', 'year_clause' => array( 'key' => 'year_published', 'value' => 2010, 'type' => 'numeric', 'compare' => '>', ), 'price_clause' => array( 'key' => 'price', 'value' => array( 10, 25 ), 'type' => 'numeric', 'compare' => 'BETWEEN', ) ), 'orderby' => array( 'price_clause' => 'ASC', 'year_clause' => 'DESC' ), );
Tebrikler, gelişmiş bir meta sorgu oluşturdunuz ve sonuçları önce 'price_clause'
artan sırada, sonra 'year_clause'
azalan sırada sıraladınız .
Kodeks’deki sıralama seçeneklerinin tam listesine bakın .
Verileri ön sayfada görüntülememizin zamanı geldi.
Önerilen okuma: Kolayca bir phpinfo Sayfası Oluşturma ve Kullanma .
WordPress , veritabanı tablosunda depolanan seçili her gönderi için bir dizi değişkene erişmemizi sağlayan get_posts
bir dizi WP_Post
nesne döndürür wp_posts
:
İD
post_author
posta adı
yazı tipi
yazı başlığı
Posta tarihi
post_date_gmt
Mesaj İçeriği
post_excerpt
post_status
comment_status
ping_status
post_password
post_parent
post_modified
post_modified_gmt
Yorum sayısı
menu_order
phpMyAdmin’de wp_posts tablo yapısı
Bu verilere foreach
aşağıdaki gibi bir döngü ile kolayca erişebilirsiniz :
$custom_posts = get_posts( $args ); if( ! empty( $custom_posts ) ){ $output = '
Eğer get_posts
en az bir yazı bulundu, biz Yayın başlığını ve orijinal yayına bir bağlantı göstermek için çapraz öğelerin dizisi döndürür. Bu get_permalink
işlevi , karşılık gelen bir WP_Post
değişkenimiz olmadığından yayın kalıcı bağlantısını almak için kullandık .
Bu oldukça kolay, ancak bu kodu nasıl uygulayabilir ve WordPress kullanarak özel yayın listelerimizi nasıl oluşturabiliriz get_posts
?
Sayfalarınızdaki yayın listelerini çeşitli yollarla gösterebilirsiniz.
İçeriğinize ekleyebileceğiniz hızlı ve kolay bir kısa kodun nasıl oluşturulacağını göstereceğim. Her neyse, daha önceki bir blog gönderisinde bu konuyu zaten ele aldığımız için kısa kodlara derinlemesine dalmayacağım .
Öncelikle, yerel WordPress kurulumunuzunwp-content/plugins
klasöründe veya bir hazırlama ortamında yeni bir dizin oluşturun . Bu örnekte, ortam-shortcodes dizinini adlandırdım .
Gelen yeni dizine aynı adı taşıyan bir .php dosyası oluşturmak: .wp-content/plugins/ortam-shortcodes/ortam-shortcodes.php
Yeni dosyayı favori metin düzenleyicinizde açın ve aşağıdaki başlığı ekleyin:
Şimdi yepyeni bir eklentimiz var, ancak hala hiçbir şey yapmıyor. İçin Gözat eklentiler sizin yönetici ekranında WordPress dashboard ve yeni eklenti emin olduğunuz yapım etkinleştirmek
WP_DEBUG
için ayarlanmıştrue
sizin dewp-config.php
dosyaya.Korumalı alanınız artık saldırılara hazırdır. Bir sonraki adım, özel bir kısa kod için bir kanca kaydetmektir:
/** * Add a hook for a shortcode tag */ function ortam_shortcodes_init(){ add_shortcode( 'ortam_get_posts', 'ortam_get_posts_cb' ); } add_action('init', 'ortam_shortcodes_init');
ortam_get_posts
kısa kod adıdır veortam_get_posts_cb
aşağıda tanımlanan geri arama:/** * Register a shortcode * * @param array $atts Array of shortcode attributes */ function ortam_get_posts_cb( $atts ){ // safely extract custom arguments and set default values extract( shortcode_atts( array( 'numberposts' => 3, 'post_type' => 'post', 'book_category' => 'fantasy', 'year_published' => 1900, 'price_min' => 0, 'price_max' => 50 ), $atts, 'ortam_get_posts' ) ); // define the array of query arguments $args = array( 'numberposts' => $numberposts, 'post_type' => $post_type, 'tax_query' => array( array( 'taxonomy' => 'book_category', 'field' => 'slug', 'terms' => $book_category, ) ), 'meta_query' => array( 'relation' => 'AND', 'year_clause' => array( 'key' => 'year_published', 'value' => $year_published, 'type' => 'numeric', 'compare' => '>', ), 'price_clause' => array( 'key' => 'price', 'value' => array( $price_min, $price_max ), 'type' => 'numeric', 'compare' => 'BETWEEN', ) ), 'orderby' => array( 'price_clause' => 'ASC' ) ); $custom_posts = get_posts( $args ); if( ! empty( $custom_posts ) ){ $output = '
Sonunda WordPress php get_posts
işlevine iletilen bir parametre dizisini tanımlamak için kullandığımız altı kısa kod özniteliğini ayarladık . $custom_posts
Boş değilse , foreach
döngü, öğelerin sırasız bir listesinin HTML'sini oluşturur.
Artık siz ve blogunuzun yazarları aşağıdakine benzer bir kısa kod kullanarak yayınların listesini ekleyebilirsiniz:
[ortam_get_posts post_type = "kitap" book_category = "bilimkurgu" sayı direkleri = "4" price_min = 1 price_max = 250]
Elbette, argüman dizisini istediğiniz gibi değiştirebilir ve testlerinizi geliştirme web sitenizin herhangi bir yazısında veya sayfasında çalıştırabilirsiniz.
WordPress php Get_posts işleviyle oluşturulan gelişmiş yayın listesiWordPress'te yayınlar, sayfalar veya özel yayın türleri listeleri mi oluşturmanız gerekiyor? Get_posts işleviyle nasıl yapılacağını öğrenin!
WordPress php get_posts , geliştiricilerin WordPress web sitenizin ön ucundaki herhangi bir yere gönderi listelerini eklemelerini sağlayan güçlü bir işlevdir. Kullanır, WP_Query
ancak kullanımı daha kolaydır ve WP_Query
sadece yayın listelerine ihtiyacınız olduğunda tercih edilir . Neyse, doğrudan referans için WP_Query
bir de mesajları görüntülemek için gerektiğinde önerilir döngü .
Bu nedenle, listelerinizi oluşturun, kodunuzu test edin ve iyi çalıştığından emin olduğunuzda, (ve ancak o zaman) canlı web sitenize itin (ancak önce bir yedek çalıştırın ).
Şimdi sizden haber almak istiyoruz. WordPress php get_posts
işleviyle ilgili deneyiminiz nedir ? Bizimle paylaşmak için herhangi bir kullanım durumunuz var mı? Aşağıdaki yorumlarda bunu yapın!