BU DERSİN BAŞLIKLARI
- 1 Açıklaması:
- 2 Parametreleri:
- 2.1 ‘attachment_id‘
- 2.2 ‘author’
- 2.3 ‘author_name’
- 2.4 ‘author__in’
- 2.5 ‘author__not_in’
- 2.6 ‘cache_results’
- 2.7 ‘cat’
- 2.8 ‘category__and‘
- 2.9 ‘category__in’
- 2.10 ‘category__not_in’
- 2.11 ‘category_name’
- 2.12 ‘comment_count’
- 2.13 ‘comment_status’
- 2.14 ‘comments_per_page’
- 2.15 ‘date_query’
- 2.15.1 ‘column’
- 2.15.2 ‘compare’
- 2.15.3 ‘relation’
- 2.15.4 ‘inclusive‘
- 2.15.5 ‘before’ ve ‘after’ Argürmanları ve Aldıkları Tarih Argümanları
- 2.15.6 ‘before’
- 2.15.7 ‘year’
- 2.15.8 ‘month‘
- 2.15.9 ‘day‘
- 2.15.10 ‘after’
- 2.15.11 Tarih Belirten Diğer Argümanlar
- 2.15.12 ‘week’
- 2.15.13 ‘dayofyear‘
- 2.15.14 ‘dayofweek‘
- 2.15.15 ‘dayofweek_iso‘
- 2.15.16 ‘hour‘
- 2.15.17 ‘minute’
- 2.15.18 ‘second‘
- 2.15.19 ‘date_query‘ Argümanının Kullanımı İle İlgili Örnekler
- 2.15.20 Örnek-1
- 2.15.21 Örnek-2
- 2.15.22 Örnek-3
- 2.15.23 Örnek-4
- 2.15.24 Örnek-5
- 2.15.25 Örnek-6
- 2.15.26 Örnek-7
- 2.16 ‘day’
- 2.17 ‘exact’
- 2.18 ‘fields’
- 2.19 ‘hour’
- 2.20 ‘ignore_sticky_posts’
- 2.21 ‘m’
- 2.22 ‘meta_compare’
- 2.23 ‘meta_compare_key’
- 2.24 ‘meta_key’
- 2.25 ‘meta_query’
- 2.26 ‘meta_value’
- 2.27 ‘meta_value_num’
- 2.28 ‘menu_order’
- 2.29 ‘monthnum’
- 2.30 ‘name’
- 2.31 ‘nopaging’
- 2.32 ‘no_found_rows’
- 2.33 ‘numberposts’
- 2.34 ‘offset’
- 2.35 ‘order’
- 2.36 ‘orderby’
- 2.37 ‘p’
- 2.38 ‘page’
- 2.39 ‘paged’
- 2.40 ‘page_id’
- 2.41 ‘pagename’
- 2.42 ‘perm’
- 2.43 ‘ping_status’
- 2.44 ‘post__in’
- 2.45 ‘post_mime_type’
- 2.46 ‘post__not_in’
- 2.47 ‘post_parent’
- 2.48 ‘post_parent__in’
- 2.49 ‘post_parent__not_in‘
- 2.50 ‘post_type’
- 2.51 ‘post_status’
- 2.52 ‘posts_per_page’
- 2.53 ‘posts_per_archive_page’
- 2.54 ‘post_name__in’
- 2.55 ‘s’
- 2.56 ‘second’
- 2.57 ‘sentence’
- 2.58 ‘suppress_filters’
- 2.59 ‘tag’
- 2.60 ‘tag__and’
- 2.61 ‘tag__in’
- 2.62 ‘tag__not_in’
- 2.63 ‘tag_id‘
- 2.64 ‘tag_slug__and’
- 2.65 ‘tag_slug__in’
- 2.66 ‘tax_query‘
- 2.67 ‘title‘
- 2.68 ‘update_post_meta_cache‘
- 2.69 ‘update_post_term_cache’
- 2.70 ‘lazy_load_term_meta‘
- 2.71 ‘w’
- 2.72 ‘year’
- 3 Döndürdüğü Sonuç:
- 4 Kaynak Kodu:
get_posts( array $argumanlar = null )
Açıklaması:
get_posts()
fonksiyonu, veritabanından, içerik getirmek için kullanılır. Bu fonksiyon ile, dilediğimiz özelliklere sahip olan, yazı, sayfa, ortam dosyası gibi içerik tiplerini (post_type), temamızın dilediğimiz yerine getirebiliriz.
get_posts()
fonksiyonu, parametresiz olarak, yani yalın haliyle kullanıldığında, tipi yazı (post) olan, son 5 içeriğe ait bir dizi döndürür. Bu dizinin herbir elemanı, bir nesnesidir (object). Her bir nesne ise, bir yazının, veritabanında kayıtlı olan bilgilerini barındırır.
Parametreleri:
get_posts()
fonksiyonu, zorunlu olmayan ve dizi (array) tipinde bir adet parametre ile çalışır. Bu dizi, çok sayıda argümana sahiptir. Bu argümanlar sayesinde, getirmek istediğimiz içerikler için, dilediğimiz kadar eleme yapma imkanımız olur.
get_posts()
fonksiyonunun parametresine ait argümanları, alfabetik sıraya göre, daha yakından tanıyalım:
‘attachment_id‘
Getirmek istediğiniz; resim, video, ses dosyası gibi bir ortam dosyasının ID değeridir. Bu argüman, birazdan göreceğimiz, 'post_type'
argümanına 'attachment'
(ortam dosyası) değeri verildiğinde çalışır.
Belli bir yazara ya da yazarlara ait yazıları getirmek için kullanılan argümandır. 'author'
argümanının değeri, getirmek istediğimiz içeriklerin yazarına ait ID değeridir, ya da yazarlara ait ID değerlerinin, aralarında virgül olan bir listesidir.
Aşağıdaki kod, ID değeri 5 olan yazara ait, son 5 yazıyı getirir.
$gelen_yazilarin_dizisi = get_posts( array( 'author' => 5 ) );
Aşağıdaki kod, ID değeri 5 veya 12 olan yazarlara ait, son 5 yazıyı getirir.
$gelen_yazilarin_dizisi = get_posts( array( 'author' => '5, 12' ) );
Eğer bir yazarı hariç tutmak istersek, bu yazarın ID değerlerinin önüne bir eksi (-) işareti koyarız. Aşağıdaki örnek, ID değerleri 5 ve 12 olan yazarlar dışındaki yazarlara ait, son 5 yazıyı getirir:
$gelen_yazilarin_dizisi = get_posts( array( 'author' => '-5, -12' ) );
Yazılarını getirmek istediğimiz yazarın güzel adıdır. Örneğin, Barış MANÇO adında bir yazarın bütün yazılarını getirmek istersek, şu kodu kullanmamız yeterli olur:
$gelen_yazilarin_dizisi = get_posts( array( 'author_name' => 'baris-manco', 'posts_per_page' => -1 ) );
Yazılarını getirmek istediğimiz yazarların ID değerlerinden oluşan basit bir dizidir.
Aşağıdaki kod, ID değeri 5 veya 12 olan iki yazara ait, son 5 yazıyı getirir:
$gelen_yazilarin_dizisi = get_posts( array( 'author_in' => array( 5, 12 )));
Hariç tutmak istediğimiz yazarların ID değerlerinden oluşan basit bir dizidir.
Aşağıdaki kod, ID değeri 5 veya 12 olanlar hariç diğer yazarlara ait, son 5 yazıyı getirir:
$gelen_yazilarin_dizisi = get_posts( array( 'author__not_in' => array( 5, 12 )));
‘cache_results’
(bool) Getirilen yazıların, belleğe (cache) alınacağını ya da alınmayacağını belirler. Varsayılan değeri, true
olarak ayarlanmıştır. Yani, getirilen yazıların bilgileri belleğe alınarak, tekrar lazım olduklarında hemen getirilmek üzere el altında tutulur. Getirdiğiniz içerikleri, belleğe atmak istemiyorsanız bu argümanı false
olarak ayarlamalısınız. (Belleğe alma işlemi için, WordPress’in arka planda yapması gereken bazı işlemler vardır ve bu işlemler, sitenizin hızını düşürebilir.)
‘cat’
Getirmek istediğiniz yazılar sadece belli bir kategoride ya da belli kategorilerde ise, bu argümana bu kategorilerin ID değerlerini girebilirsiniz. Bunu yaptığınızda, get_posts()
fonksiyonu, sadece bu ID değerlerine sahip olan kategorilerdeki yazıları getirir. Aşağıda argümanın kullanım örnekleri verilmiştir:
Sadece ID‘si 5 olan kategoriden, son 5 yazı gelir:
$gelen_yazilarin_dizisi = get_posts( array( 'cat' => 5 ) );
Sadece, ID değeri, 5, 11, veya 24 olan kategorilere ait, son 5 yazı gelir:
$gelen_yazilarin_dizisi = get_posts( array( 'cat' => '5,11,24' ) );
Eğer bazı kategorileri hariç tutmak istersek, bu kategorilerin ID değerlerinin önüne bir eksi (-) işareti koyarız. Aşağıdaki örnek, ID değeri 5, 11 veya 24 olanlar dışındaki kategorilere ait, son 5 yazıyı getirir:
$gelen_yazilarin_dizisi = get_posts( array( 'cat' => '-5,-11,-24' ) );
‘category__and‘
(array) Birden fazla kategoride kayıtlı yazılarınızı getirmek için, kategorilerin ID değerlerinden oluşan basit bir diziyi, bu argümana değer olarak atamanız yeterlidir.
Aşağıdaki kod, hem ID değeri 5 olan kategoride hem de ID değeri 12 olan kategoride kayıtlı olan son 5 yazıyı getirir.
$gelen_yazilarin_dizisi = get_posts( array( 'category__and' => array( 5, 12 )));
Bu argüman, ID değerlerini girdiğiniz kategorilerin alt kategorilerini dikkate almaz. Yani altındaki kategoride kayıtlı olan bir yazıyı, o kategoride de kayıtlı olarak düşünmez.
‘category__in’
(array) Bir kaç kategorinin herhangi birine kayıtlı olması yeter diye düşündüğünüz yazıları getirmek için, o kategorilerin ID değerlerini basit bir dizi haline getirip bu argümana değer olarak atamanız yeterlidir.
Aşağıdaki kod, ID değeri 5 veya 12 olan kategorilere ait olan son 5 yazıyı getirir:
$gelen_yazilarin_dizisi = get_posts( array( 'category__in' => array( 5, 12 )));
‘category__not_in’
(array) Bir kaç kategorinin hiç birine kayıtlı olmasın diye düşündüğünüz yazıları getirmek için, o kategorilerin ID değerlerini basit bir dizi haline getirip bu argümana değer olarak atamanız yeterlidir.
Aşağıdaki kod, ID değeri 5 veya 12 olan kategorilerin dışında kalan kategorilere ait olan son 5 yazıyı getirir:
$gelen_yazilarin_dizisi = get_posts( array( 'category__not_in' => array( 5, 12 )));
‘category_name’
Getirmek istediğiniz yazılar sadece belli bir kategoride ya da belli kategorilerde ise, bu argümana bu kategorilerin link adlarını girebilirsiniz. get_posts()
fonksiyonu sadece bu argümanda belirtilen kategorilerde bulunan yazıları getirir. Aşağıda argümanın kullanım örnekleri verilmiştir:
Sadece link adı ‘kopekler‘ olan kategoriden son 5 yazı gelir:
$gelen_yazilarin_dizisi = get_posts( array( 'category_name' => 'kopekler' ) );
Sadece link adı, ‘kediler‘, ‘kopekler‘, veya ‘koyunlar‘ olan kategorilere ait son 5 yazı gelir:
$gelen_yazilarin_dizisi = get_posts( array( 'category_name' => 'kediler, kopekler, koyunlar' ) );
Link adı, ‘memeli-hayvanlar‘ ve ‘kopekler‘ olan kategorilerin her ikisine de kayıtlı olan son 5 yazı gelir:
$gelen_yazilarin_dizisi = get_posts( array( 'category_name' => 'memeli-hayvanlar+kopekler' ) );
‘comment_count’
(array|int) Aldığı yorum sayısına göre içerik getirmek istiyorsanız, bu argümanı tam size göredir. 'comment_count'
argümanında, value
ve compare
alt argümanlarını kullanarak, yorum sayıları ile ilgili bazı özel koşullar da oluşturabiliriz. Örneklere dikkat edelim:
Örnek-1
20 adet yorum almış son 5 yazıyı getirir:
$gelen_yazilarin_dizisi = get_posts( array( 'comment_count' => 20 ) );
Örnek-2
20 adet ve daha fazla yorum almış son 5 yazıyı getirir:
$gelen_yazilarin_dizisi = get_posts( array(
'comment_count' => array( 'value' => 20, 'compare' => '>=',)
) );
Örnek-3
20 adet ve daha az yorum almış son 5 yazıyı getirir:
$gelen_yazilarin_dizisi = get_posts( array(
'comment_count' => array( 'value' => 20, 'compare' => '<=',)
) );
Örnek-4
20 adet dışında bir miktarda yorum almış son 5 yazıyı getirir:
$gelen_yazilarin_dizisi = get_posts( array(
'comment_count' => array( 'value' => 20, 'compare' => '!=',)
) );
Örnek-5
20 adetten daha fazla yorum almış son 5 yazıyı getirir:
$gelen_yazilarin_dizisi = get_posts( array(
'comment_count' => array( 'value' => 20, 'compare' => '>',)
) );
Örnek-6
20 adetten daha fazla yorum almış bütün yazıları getirir:
$gelen_yazilarin_dizisi = get_posts( array(
'posts_per_page' => -1,
'comment_count' => array( 'value' => 20, 'compare' => '>',)
) );
‘comment_status’
Yorum yapılabilirlik durumuna göre içerik getirmek istiyorsanız, bu argümanı kullanacaksınız demektir. Argümana, 'open'
(yoruma açık) ve 'closed'
(yoruma kapalı) olarak iki değer atanabilir ya da boş bırakılabilir. Varsayılan değeri boştur, yani, get_posts()
fonksiyonu, içerikleri, yorum durumuna dikkat etmeden getirir. Örneklere dikkat edelim:
Örnek-1
Yoruma açık olan son 5 yazıyı getirir:
$gelen_yazilarin_dizisi = get_posts( array( 'comment_status' => 'open' ) );
Örnek-2
Yoruma kapalı olan son 5 yazıyı getirir:
$gelen_yazilarin_dizisi = get_posts( array( 'comment_status' => 'closed' ) );
‘comments_per_page’
(int) get_posts()
fonksiyonunun getirdiği yazılarda, sayfa başına kaç yorum gösterileceğini belirleyen argümandır. Varsayılan değeri, yönetim panelindeki, Ayarlar->Tartışma kısmından ayarlanan sayıdır.
‘date_query’
(array) Getirilecek yazıların tarihleri ile ilgili bilgiler, şartlar bu argüman ile belirlenir.
'date_query'
argümanı, tarih belirtebilmek için bir çok alt argüman kabul eder. Şimdi bu alt argümanları görelim:
‘column’
İçerik bilgilerinin kayıtlı olduğu tablonun, içerik tarihi ile ilgili sütunudur. 'column'
argümanının alabileceği değerler şunlardır:
'post_date'
– Varsayılan'post_date_gmt'
: İçeriğin yayınlanma tarihini; yıl-ay-gün saat:dakika:saniye ( ‘Y-m-d H:i:s’ ) formatında kaydeden sütun- ‘post_modified’: İçeriğin son güncelleme tarihini kaydeden sütun.
- ‘post_modified_gmt’: İçeriğin son güncelleme tarihini; yıl-ay-gün saat:dakika:saniye (
'Y-m-d H:i:s'
) formatında kaydeden sütun 'comment_date'
: Yorumların yapılış tarihini kaydeden sütun'comment_date_gmt'
: Yorumların güncelleme tarihini ; yıl-ay-gün saat:dakika:saniye ('Y-m-d H:i:s'
) formatında kaydeden sütun
‘compare’
Verilen tarih değerinin ya da değerlerinin karşılaştırma operatörüdür yani işaretidir. Alabileceği değerler şunlardır:
'='
– Varsayılan : Belirtilen tarihe eşit olacak demektir.'!='
: Belirtilen tarihe eşit olmayacak demektir.'>'
: Belirtilen tarihten daha yeni olacak demektir.'>='
: Belirtilen tarih de dahil olmak üzere bu tarihten daha yeni olacak demektir.'<'
: Belirtilen tarihten daha eski olacak demektir.'<='
: Belirtilen tarih de dahil olmak üzere, bu tarihten daha eski olacak demektir.'IN'
: Belirtilen tarihin içinde olacak demektir. Bu argümanı kullanırken, bir dizi halinde, birden çok tarih belirtilebilir.'NOT IN'
: Belirtilen tarihin dışında olacak demektir. Bu argümanı kullanırken, bir dizi halinde, birden çok tarih belirtilebilir.'BETWEEN'
: Belirtilen iki tarih arasında olacak demektir. Bu argümanı kullanırken, bir dizi halinde, iki tarih belirtilmelidir.'NOT BETWEEN'
: Belirtilen iki tarih aralığının dışında olacak demektir. Bu argümanı kullanırken, bir dizi halinde, iki tarih belirtilmelidir.
‘relation’
'date_query'
argümanı içinde birden fazla alt dizi (array) varsa bu argüman devreye girer. Bu alt dizilerin arasındaki ilişkiyi 'relation'
argümanı düzenler. Bu argüman iki değer alır:
'or'
– Varsayılan: Alt dizilerde oluşturulan zaman dilimlerinden herhangi birinin içinde olan yazıları getirir.'and'
: Alt dizilerde oluşturulan zaman dilimlerinin her ikisinde birden bulunan yazıları getirir. (Mesela 2019 yılında ve ilk 3 ayında yayınlanmış yazılar gibi…)
‘inclusive‘
(bool) Birazdan bahsedeceğimiz iki argüman olan, 'before'
ve 'after'
argümanlarında belirtilen tarihlerin de dahil olup olmayacağını belirler. true
değerini alırsa, belirtilen tarihleri de hesaba katar, false
değerini alırsa, belirtilen tarihleri hesaba katmaz.
‘before’ ve ‘after’ Argürmanları ve Aldıkları Tarih Argümanları
Belirli bir tarih aralığı belirlemenin kolay yolu, 'before'
(öncesi) ve 'after'
(sonrası) argümanlarını kullanmaktır. Bu iki argüman ve bunlara birlikte kullanabileceğimiz argümanlar şöyledir;
‘before’
Bu argüman, belli bir tarihten önceki yazıları getirmek için kullanılır.
'before'
argümanı, PHP dilinin tanıdığı ve tarih belirten bütün string (text) ifadelerini alır, bir başka deyişle, strtotime()
fonksiyonunun aldığı bütün parametreleri alır. Aşağıda bu ifadelerden bazıları verilmiştir:
Aşağıda, 'before'
argümanının tanıdığı string ifadelerine bazı örnekler verilmiştir:
'now'
: Şu anki zamanı belirtir.'10 September 2005'
: 10 Eylül 2005 tarihini belirtir.'+1 day'
: 1 gün sonrasını belirtir.'-2 weeks'
: 2 hafta öncesini belirtir.'+2 weeks 2 days 4 hours 2 seconds'
: 2 hafta 2 gün 4 saat ve 2 saniye sonrasını belirtir.-
'+2 years -2 months -4 hours 32 seconds'
: 2 yıl sonraki tarihten 2 gün 4 saat öncesi ve 32 saniye sonrasını belirtir. 'next Thursday'
: Bir sonraki Perşembe gününü belirtir.'last Monday'
: Bir önceki Pazartesi gününü belirtir.'first day of next month'
: Bir sonraki ayın ilk günü ve şu anki saati belirtir.-
'first day of +1 month'
: Bir sonraki ayın ilk günü belirtir. 'Saturday this week'
: Bu hafta cumartesiyi belirtir.'midnight first day of last month'
: Geçen ayın ilk gününü ve tam gece yarısını belirtir.
'before'
argümanı, bir dizi şeklinde olmak koşulu ile aşağıdaki tarih değerlerini de alır:
‘year’
(string) Yıl belirten bir string değeridir. ‘YYYY‘ şeklinde, dört haneli bir saydır. Varsayılan değeri boş olarak ayarlanmıştır.
‘month‘
(string|array) Ay belirten bir saydır. 1-12 arasında bir değer alır. String olarak varsayılan değeri boştur, array olarak ise 1’dir.
‘day‘
(string|array) Gün belirten bir saydır. 1-31 arasında bir değer alır. String olarak varsayılan değeri boştur, array olarak ise 1’dir.
‘after’
Bu argüman, belirli bir tarihten sonraki yazıları getirmek için kullanılır ve 'before'
argümanı ile aynı şekilde kullanılır.
Tarih Belirten Diğer Argümanlar
‘week’
(string|array) Hafta belirten bir saydır. 0-51 arasında bir değer alır. String olarak varsayılan değeri boştur.
‘dayofyear‘
(string|array) Yılın gününü belirten bir saydır. 1-366 arasında bir değer alır. String olarak varsayılan değeri boştur.
‘dayofweek‘
(string|array) Haftanın gününü belirten bir saydır. 1-7 arasında bir değer alır. Haftanın 1. gününü Pazar olarak kabul eder. String olarak varsayılan değeri boştur.
‘dayofweek_iso‘
(string|array) Haftanın gününü belirten bir saydır. 1-7 arasında bir değer alır. Haftanın 1. gününü Pazartesi olarak kabul eder. String olarak varsayılan değeri boştur.
‘hour‘
(string|array) Günün saatini belirten bir saydır. 0-23 arasında bir değer alır. String olarak varsayılan değeri boştur.
‘minute’
(string|array) Saatin dakikasını belirten bir saydır. 0-60 arasında bir değer alır. String olarak varsayılan değeri boştur.
‘second‘
(string|array) Dakikanın saniyesini belirten bir saydır. 0-60 arasında bir değer alır. String olarak varsayılan değeri boştur.
Tarih belirten argümanların, bir string mi yoksa bir array olarak mı kullanılacağını 'compare'
argümanına verilen değer belirler. Eğer, 'compare'
(karşılşatırma) argümanı, 'IN'
veya 'NOT IN'
değerini alıyorsa, tarih belirten argümanlar, birer dizi şeklinde olabilir. Eğer, 'compare'
argümanı 'BETWEEN'
veya 'NOT BETWEEN'
değerini alıyorsa, tarih belirten argümanlar, iki elemanlı bir dizi şeklinde olmalıdır.
‘date_query‘ Argümanının Kullanımı İle İlgili Örnekler
Örnek-1
Aşağıdaki örnek, sadece 2019 yılına ait olan son 5 yazıyı getirir:
$tarih_araligi = array(
'year' => 2019,
);
$gelen_yazilarin_dizisi = get_posts( array(
'date_query' => $tarih_araligi,
) );
Örnek-2
Aşağıdaki örnek, son 1 yıl içerisinde eklenen son 10 yazıyı getirir:
$tarih_araligi = array(
array(
'after' => '1 year ago',
)
);
$gelen_yazilarin_dizisi = get_posts( array(
'date_query' => $tarih_araligi,
'posts_per_page' => 10,
));
Örnek-3
Aşağıdaki örnek, 2012 veya 2018 yıllarında yayınlanmış bütün yazıları getirir.
$tarih_araligi = array(
'relation' => 'OR',
array('year' => 2012),
array('year' => 2018),
);
$gelen_yazilarin_dizisi = get_posts( array(
'date_query' => $tarih_araligi,
'posts_per_page' => -1,
));
Örnek-4
Aşağıdaki örnek, 15 Aralık 2012 tarihi ile 15 Ocak 2019 tarihleri arasında yayınlanmış bütün yazıları getirir:
$tarih_araligi = array(
array(
'after' => 'December 15th, 2012',
'before' => 'January 15th, 2019',
),
);
$gelen_yazilarin_dizisi = get_posts( array(
'date_query' => $tarih_araligi,
'posts_per_page' => -1,
));
Örnek-5
Aşağıdaki örnek, 6 ve 9 da dahil olmak üzere, sabahları saat 6 ile 9 arasında yayınlanmış bütün yazıları getirir:
$tarih_araligi = array(
'relation' => 'AND',
array(
'hour' => 6,
'compare' => '>=',
),
array(
'hour' => 9,
'compare' => '<=',
),
);
$gelen_yazilarin_dizisi = get_posts( array(
'date_query' => $tarih_araligi,
'posts_per_page' => -1,
));
Örnek-6
Aşağıdaki örnek; her yılın 1. ve 2. ayları arasında (bu aylar da dahil) yayınlanmış, veya geçtiğimiz iki ay içinde yayınlanmış veya son bir yıldır, pazar günleri hariç diğer günlerde yayınlanmış bütün yazıları getirir.
$tarih_araligi = array(
'relation' => 'OR', // ANA DİZİ-1 veya ANA DİZİ-2 dekileri getir
// ANA DİZİ-1 //
// Yılların 1. ve 2. ayları arasında (bu aylar da dahil) veya son iki ayda yayınlanmış yazılar
array(
'relation' => 'OR', // İÇ DİZİ-1 veya İÇ-DİZİ-2 dekileri getir
// İÇ DİZİ-1
array(
'before' => array( // önce
'month' => 2, // yılın 2. ayından
),
'after' => array( // sonra
'month' => 1, // yılın 1. ayından
),
'inclusive' => true, // 1. ve 2. ay da dahil
),
// İÇ DİZİ-2
array(
'after' => '2 months ago', // son iki ayda
),
),
// ANA DİZİ-2 //
// Son bir yıldır pazar günleri hariç, diğer günlerde yayınlanmış yazılar
array(
'relation' => 'AND', // İÇ DİZİ-3 ve İÇ DİZİ-4 teki şartları taşıyanlar
// İÇ DİZİ-3
array(
'after' => '1 year ago', // son bir yıldır
),
// İÇ DİZİ-4
array(
'dayofweek' => 1, // Haftanın ilk günü yani Pazar günü
'compare' => '!=', // olmayacak
),
),
);
$gelen_yazilarin_dizisi = get_posts( array(
'date_query' => $tarih_araligi,
'posts_per_page' => -1,
));
Örnek-7
Aşağıdaki örnek, üç farklı dizinin belirttiği, üç farklı zaman aralığındaki bütün yazıları getirir:
$tarih_araligi = array(
'relation' => 'OR', // veya: Hepsini getir
array( // En son, 2005'in 5. haftasından sonraki haftalarda, cumalardan ve saat 5:05 ten sonraki bir tarihte güncellenmiş yazılar
'year' => 2005,
'week' => 5,
'dayofweek' => 5,
'dayofweek_iso' => 5,
'hour' => 5,
'minute' => 5,
'compare' => '>',
'column' => 'post_modified',
),
array( // 1 yaşından büyük 2 yaşından küçük yazılar
'before' => '-1 year',
'after' => '-2 years',
),
array( // 5.5.2018 ve öncesi ile 5.5.2016 ve sonrasındaki yazılar
'before' => array(
'year' => 2018,
'month' => 5,
'day' => 5,
),
'after' => array(
'year' => 2016,
'month' => 5,
'day' => 5,
),
'inclusive' => true,
),
);
$gelen_yazilarin_dizisi = get_posts( array(
'date_query' => $tarih_araligi,
'posts_per_page' => -1,
));
‘day’
(int) Ayın gününü belirten sayıdır. 1-31 arasında bir değer alır.
‘exact’
(bool) Getirilecek içeriklerin, belli bir arama kriterine uygun olup olmayacağını belirten argümandır. true
değeri, belli bir arama kriteri kullanılabilir demektir. Arama kriteri olarak kullanılacak olan anahtar kelime, birazdan bahsedilecek olan, 's'
argümanında belirtilir. Varsayılan değeri false
olarak ayarlanmıştır.
‘fields’
(string|array) Veritabanında, içerik bilgilerini tutan tablodan, getirilecek olan satırları ifade eder.
Bu argümana verebileceğimiz ikisi sabit, üç farklı değer vardır. Bunların ilki 'ids'
değeridir ki bu değeri verdiğimizde, get_posts()
fonksiyonu, sadece içeriklerin id değerlerinden oluşan bir dizi döndürür.
Örnek-1
Aşağıdaki örnek, son eklenen 10 adet yazının id değerlerini getirir:
$gelen_yazilarin_dizisi = get_posts( array(
'fields' => 'ids',
'posts_per_page' => 10,
));
Yukarıdaki örnekte, $gelen_yazilarin_dizisi
değişkeni, şu diziyi döndürür:
array(10) { [0]=> int(1922) [1]=> int(1810) [2]=> int(1) [3]=> int(1788) [4]=> int(1785) [5]=> int(1784) [6]=> int(1783) [7]=> int(1787) [8]=> int(1786) [9]=> int(1778) }
'fields'
argümanının aldığı diğer değer ise, 'id=>parent'
değeridir. Bu değeri verdiğimizde, get_posts()
fonksiyonu, içeriğin id değeri ile ebeveyninin id değerinin eşleştiği bir dizi döndürür. Örneğe dikkat edelim:
Örnek-2
Aşağıdaki örnek, son eklenen 10 adet resmin ('post_type' => 'attachment'
) ve bu resimlerin ebeveyni olan içeriklerin id değerlerini getirir:
$gelen_yazilarin_dizisi = get_posts( array(
'post_type' => 'attachment',
'fields' => 'id=>parent',
'posts_per_page' => 10,
));
Yukarıdaki örnekte, $gelen_yazilarin_dizisi
, aşağıdaki diziyi döndürür. Dizi, [anahtar] => degeri
şeklinde bir dizidir ve bu dizideki anahtarlar, resimlerin id‘leri, değerleri ise resimlerin ebeveynlerinin id‘leridir:
array(10) { [1997]=> int(1922) [1996]=> int(1922) [1995]=> int(1922) [1994]=> int(1922) [1993]=> int(1922) [1930]=> int(1966) [1927]=> int(0) [1926]=> int(0) [1919]=> int(0) [1916]=> int(0) }
Ebeveyninin id değeri 0 olan resimlerin bir ebeveyni yok demektir.
'fields'
argümanına bu iki değer dışında atanan diğer değerler, değerin ne olduğuna bakılmaksızın, get_posts()
fonksiyonunun bütün tablo alanlarını döndürmesini sağlar.
‘hour’
(int) Günün bir saatidir, getirilecek içeriklerin hangi saatte oluşturulduğunu gösterir. 0-23 arasında bir değer alır.
‘ignore_sticky_posts’
(int|bool) Bloğun en üstüne sabitlenmiş olan yazıların durumunu yöneten argümandır. 'ignore_sticky_posts'
argümanı, true/false
veya 1/0 değerlerini alır. Argüman, true
veya 1 değerini aldığında, blogun en üstüne sabitlenmiş yazılardan varsa, sorgu içinde olanlar gelir ve normal sıralarında gelir. Argümana false
veya 0 değeri verildiğinde ise, blogun en üstüne sabitlenmiş yazıların hepsi gelir ve ön önce gelir.
'ignore_sticky_posts'
argümanına 'false'
veya 0 değeri verildiğinde, sorgu, 'post__in'
argümanının içinde yer almasa da, blogun en üstüne sabitlenmiş yazıların hepsini, getirir ve en üstte getirir. Bu durum, ‘post__in’ argümanı kullanırken, argüman içinde belirtilen yazılardan daha fazlası ile karşılaşmamıza sebep olabilir.
ignore_sticky_posts
argümanı, get_posts()
fonksiyonu ile kullanıldığında beklenen sonucu vermeyebilir, argüman, WP_Query
nesnesi ile istenilen sonucu verecektir.
‘m’
(int) Yılı ve ayı birlikte gösterir. Aldığı değer, yıl ve ay değerlerinin peş peşe yazılması ile oluşur. Örneğin, 2001 yılının 5. ayında yayınlanmış yazıları getirmek için bu argümana 200105 değerini atamamız yeterlidir.
‘meta_compare’
İçerikler için oluşturduğumuz özel alanların (custom fields) değerlerini ( 'meta_value'
) karşılaştırmak için kullanılan operatörlerdir.
'meta_compare'
argümanının alabileceği değerler şunlardır:
-
'='
– Varsayılan '!='
'>'
'>='
'<'
'<='
'LIKE'
'NOT LIKE'
- ‘
IN
‘ 'NOT IN'
'BETWEEN'
'NOT BETWEEN'
'NOT EXISTS'
'REGEXP'
'NOT REGEXP'
'RLIKE'
‘meta_compare_key’
İçerikler için oluşturduğumuz özel alanların (custom fields) anahtar değerlerini yani ismini ( 'meta_key'
) karşılaştırmak için kullanılan operatörlerdir.
'meta_compare_key'
argümanının alabileceği değerler şunlardır:
-
'='
– Varsayılan '!='
'>'
'>='
'<'
'<='
'LIKE'
'NOT LIKE'
- ‘
IN
‘ 'NOT IN'
'BETWEEN'
'NOT BETWEEN'
'NOT EXISTS'
'REGEXP'
'NOT REGEXP'
'RLIKE'
‘meta_key’
Getirmek istediğimiz içeriklere eklediğimiz, özel alanların (custom fields) anahtar değerlerini yani ismini belirtir.
Örnek-1
Aşağıdaki örnek, ‘product’ (ürün) tipindeki içeriklerimizden, 'urun_rengi'
adında bir özel alan eklenmiş olanlardan son beş tanesini getirir.
$sorgu_argumanlari = array(
'post_type' => 'product',
'meta_key' => 'urun_rengi'
);
$gelen_yazilarin_dizisi = get_posts( $sorgu_argumanlari );
‘meta_query’
İçeriklerin özel alanlarına girdiğimiz verilere göre sorgular oluşturmaya yarar. Bir sayfa veya yazı eklerken, sayfanın alt kısmında karşımıza çıkan bu alanların iki bölümü vardır. Bunlar; isim bölümü ve değer bölümüdür. 'meta_query'
sorgularında İsim bölümü key
ifadesi ile, değer bölümü ise value
ifadesi ile çağırılır.
İçerikler için, özel alanlarına göre sorgu oluştururken, bu içerikler için oluşturduğumuz key
ve value
değerlerini kullanırız.
Özel alanların, isim bölümüne girilen ifadeler, link adı şeklinde olmalıdır. Yani, Türkçe karakter ve boşluk içermemelidir.
Aşağıda verilen örneklere dikkat ederek, meta_query
sorguları oluşturmayı öğrenelim:
Örnek-1
Aşağıdaki örnek, ‘product’ (ürün) tipindeki içeriklerimizin, 'urun_rengi'
adındaki özel alanlarına, Kırmızı değeri girilenlerin son beş tanesini getirir:
$sorgu_argumanlari = array(
'post_type' => 'product',
'meta_query' => array(
array(
'key' => 'urun_rengi',
'value' => 'Kırmızı',
)
)
);
$gelen_yazilarin_dizisi = get_posts( $sorgu_argumanlari );
Örnek-2
Aşağıdaki örnek, ‘product’ (ürün) tipindeki içeriklerimizin, 'urun_rengi'
adındaki özel alanlarına, Kırmızı ifadesi geçmeyen ve aynı zamanda, 'fiyat'
ismindeki özel alanlarında, 20 ile 100 arasında bir değere sahip olan içeriklerden, son beş tanesini getirir:
$sorgu_argumanlari = array(
'post_type' => 'product',
'meta_query' => array(
array(
'key' => 'urun_rengi',
'value' => 'Kırmızı',
'compare' => 'NOT LIKE',
),
array(
'key' => 'fiyat',
'value' => array( 20, 100 ),
'type' => 'numeric',
'compare' => 'BETWEEN',
),
),
);
$gelen_yazilarin_dizisi = get_posts( $sorgu_argumanlari );
Örnek-3
Aşağıdaki örnek, ‘product’ (ürün) tipindeki içeriklerimizin, 'urun_rengi'
adındaki özel alanlarına, Kırmızı ifadesi geçmeyen veya ('relation' => 'OR'
), 'fiyat'
ismindeki özel alanlarında, 20 ile 100 arasında bir değere sahip olan içeriklerden, son beş tanesini getirir:
$sorgu_argumanlari = array(
'post_type' => 'product',
'meta_query' => array(
'relation' => 'OR', // Varsayılan değeri 'AND' olarak ayarlıdır.
array(
'key' => 'urun_rengi',
'value' => 'Kırmızı',
'compare' => 'NOT LIKE',
),
array(
'key' => 'price',
'value' => array( 20, 100 ),
'type' => 'numeric',
'compare' => 'BETWEEN',
),
),
);
$gelen_yazilarin_dizisi = get_posts( $sorgu_argumanlari );
‘meta_value’
Getirmek istediğimiz içeriklere eklediğimiz, özel alanların (custom fields) değerlerini belirtir.
Örnek-1
Aşağıdaki örnek, ‘product’ (ürün) tipindeki içeriklerimizden, Kırmızı değerine sahip herhangi bir özel alanı olanların hepsini getirir.
$sorgu_argumanlari = array(
'post_type' => 'product',
'meta_value' => 'Kırmızı',
'posts_per_page' => -1,
);
$gelen_yazilarin_dizisi = get_posts( $sorgu_argumanlari );
Örnek-2
Aşağıdaki örnek, ‘product’ (ürün) tipindeki içeriklerimizden, değeri Kırmızı olmamak koşuluyla, 'urun_rengi'
ismine sahip herhangi bir özel alanı olanların son beş tanesini getirir.
$sorgu_argumanlari = array(
'post_type' => 'product',
'meta_key' => 'urun_rengi',
'meta_value' => 'Kırmızı',
'meta_compare' => '!='
);
$gelen_yazilarin_dizisi = get_posts( $sorgu_argumanlari );
Örnek-3
Aşağıdaki örnek, ‘product’ (ürün) tipindeki içeriklerimizden, 'gram'
isminde bir özel alana (meta key) sahip olup değeri 22 ve daha az olanlardan, son beş tanesini getirir.
$sorgu_argumanlari = array(
'post_type' => 'product',
'meta_key' => 'gram',
'meta_value' => '22',
'meta_compare' => '<=',
);
$gelen_yazilarin_dizisi = get_posts( $sorgu_argumanlari );
‘meta_value_num’
(int) Özel alanın sayısal değerini belirtir. Fiyat veya benzeri bir sayı girmek için oluşturduğumuz özel alanlarda kullanılabilir.
(int) İçeriğin menüdeki sırasıdır.
‘monthnum’
(int) Ayların, sıra numarasıdır. 1-12 arasında değer alır.
‘name’
İçeriklerin link adıdır (slug).
‘nopaging’
(bool) 'posts_per_page'
argümanı, varsayılan olarak son yayınlanan 5 adet içeriği getirir. Fakat, 'nopaging'
argümanına 'true'
değerini verirsek, son 5 tanesi değil, sorgunun kapsamına giren bütün içerikler gelir.
‘no_found_rows’
(bool) Sorguda bulunan toplam satır sayısının görmezden gelinip gelinmeyeceğini kontrol eder. Varsayılan olarak false
değeri alır, yani görmezden gelinmez. Bu özellik, true
olarak ayarlandığında, performans artabilir fakat sayfalama özelliği çalışmaz.
‘numberposts’
(int) Sayfalanmış sayfalarda, sayfa başına düşen yazı adedini belirten argümandır. Varsayılan değeri 5 olarak ayarlanmıştır. Bütün yazıları tek bir sayfada getirmek için -1 değerini alır.
Bu argüman, WP_Query
nesnesinde kullanılan 'posts_per_page'
argümanının get_posts()
fonksiyonuna uyarlanmış halidir.
‘offset’
(int) Kaydırma işlemi yapar. Örneğin; 'offset'
argümanına 3 değerini verdik diyelim. Bu durumda, get_posts()
fonksiyonu, normalde getirmesi gereken ilk üç yazıyı es geçer, bunların yerine listenin devamından üç tane ekler, getirilen toplam içerik sayısı değişmez, içeriklerde, öncekilerden sonrakilere kayma olur. (Bu argüman, sayfalama scriptleri yazarken oldukça kullanışlıdır.)
'offset'
argümanı, 'posts_per_page'=>-1
(bütün sayfaları getir) argümanı ile birlikte çalışmaz.
‘order’
WordPress sorguları, içerikleri, 'orderby'
argümanında belirtilen özelliğin sırasına göre getirir. Bu içeriklerin, artan bir sıra ile mi yoksa azalan bir sıra ile mi getirileceğini ise 'ortder'
argümanı belirler. 'ASC'
ve 'DESC'
olmak üzere iki adet değer alır. 'ASC'
değerini aldığında, içerikleri artan bir sırada getirir, 'DESC'
değeri aldığında ise azalan bir sıra ile getirir. Varsayılan değeri 'DESC'
olarak ayarlanmıştır.
‘orderby’
WordPress sorguları, içerikleri 'orderby'
argümanında belirtilen özelliğin sırasına göre getirir. Bu argüman şu değerleri alabilir:
'none'
: Hiçbiri'name'
: Link adına (slug) göre'author'
: Yazara göre'date'
– Varsayılan : İçeriğin oluşturulma tarihi.'title'
: Başlığa göre'modified'
: Güncelleme tarihine göre'menu_order'
: Menü sırasına göre'parent'
: Ebeveynine göre'ID'
: ID değerine göre'rand'
: Rastegele'relevance'
: Arama yapılan kelimeye yakınlık durumuna göre.'RAND(x)'
( ‘x’ ifadesi, sayısal çekirdek değeridir.) : Rastgele'comment_count'
: Yorum sayısına göre'meta_value'
: Özel alan değerine göre'meta_value_num'
: Özel alanın sayısal değerine göre'post__in'
: ID değeri belirtilen içeriklerin sırasında'post_name__in'
: Link adı (slug) belirtilen içeriklerin sırasında'post_parent__in'
: Ebeveynlerinin ID numaraları verilen içeriklerin sırasında'meta_query'
sorgularında oluşturulan dizilerin'key'
değeri :'meta_query'
ifadelerindeki dizilerin'key'
değerine göre
'orderby'
argümanının varsayılan değeri, ‘date’ olarak ayarlanmıştır. Yani, sorgular, varsayılan olarak, içerikleri oluşturma zamanına göre sondan başlayarak getirir.
Örnek-1
Aşağıdaki sorgunun getirdiği içerikler, 'product'
(ürün) tipindedir ve ismi 'fiyat'
konulmuş, değerlerine de birer sayı girilmiş özel alanları vardır. Bu sorgu, bu ürünlerin, küçük fiyattan büyüğe doğru ilk 5 tanesini getirir.
$sorgu_argumanlari = array(
'post_type' => 'product',
'meta_key' => 'fiyat',
'orderby' => 'meta_value_num',
'order' => 'ASC'
);
$gelen_yazilarin_dizisi = get_posts( $sorgu_argumanlari );
Örnek-2
Aşağıdaki sorgunun getirdiği içerikler 'product'
tipindedir ve ismi 'renk'
konulmuş özel alanları vardır. Bu sorgu, 'renk'
lerinin alfabetik sırasına göre ilk 5 içeriği getirir.
$sorgu_argumanlari = array(
'post_type' => 'product',
'meta_key' => 'renk',
'orderby' => 'meta_value',
'order' => 'ASC'
);
$gelen_yazilarin_dizisi = get_posts( $sorgu_argumanlari );
Örnek-3
Aşağıdaki sorgunun getirdiği içerikler 'film'
tipindedir. Bu sorgu, ismi 'gosterim_tarihi'
konulmuş özel alanı olan içerikleri, bu alanların değerleri boş bırakılmış olsa bile, eskiden yeniye doğru getirir. Tarihleri aynı olanları, başlıklarına göre alfabetik önceliğe göre sıralar. Sorgu, bu kurallara uyan ilk 10 içeriği getirir:
$sorgu_argumanlari = array(
'post_type' => 'film',
'meta_query' => array(
'relation' => 'OR',
array( // Yıl-ay-gün formatında bir tarih değeri girilenleri getirir
'key' => 'gosterim_tarihi',
'compare' => '=',
'value' => date('Y-m-d')
),
array( // bir tarih değeri yoksa yine de getirsin
'key' => 'gosterim_tarihi',
'value' => date('Y-m-d'),
'compare' => 'NOT EXISTS'
)
),
'meta_key' => 'gosterim_tarihi',
'orderby' => 'meta_value title', // tarihe göre sıralar, tarihler eşitse başlığa göre sırala
'order' => 'ASC', // artan veya eskiden yeniye doğru veya alfabetik sıraya göre
'posts_per_page' => '10', // ilk 10 içerik
);
$gelen_yazilarin_dizisi = get_posts( $sorgu_argumanlari );
‘p’
(int) Yazının ID değeridir. Tek bir yazı getirmek için bu yazının ID değeri bu parametreye girilir.
‘page’
(int) Bu argüman, WordPress temasının ana sayfası için sabit bir sayfa ayarlanmış ise, yani ana sayfa, yazı sayfası değilse çalışır. Yine, bu argümanın çalışması için, ana sayfa olarak ayarlanmış sayfanın kendi içinde sayfalanmış olması gerekir:

Yani, elimizde sabit bir ana sayfa olacak ve bu ana sayfada kendi içinde sayfalara bölünmüş olacak. Peki biz, sitemize ilk girildiğinde, yani ana sayfamız ilk defa açıldığında, ziyaretçimizi, ana sayfanın 3. sayfasının karşılamasını istiyorsak ne yapmalıyız?
İşte bu durumda, 'page'
argümanı devreye girer. 'page'
argümanına verdiğimiz sayı, ana sayfamızın ilk girişte, kaçıncı sayfası ile açılacağını belirler. Aşağıdaki kod ile, ana sayfamızın 3. sayfasını giriş sayfası olarak ayarlıyoruz:
$sorgu_argumanlari = array(
'page' => 3,
);
$gelen_yazilarin_dizisi = get_posts( $sorgu_argumanlari );
Bu kod ile sitemiz, ziyaretçilerimizi, ana sayfamızın 3. sayfası ile karşılayacaktır:

Bu argümanı kullanmanız gerektiğinde, dinamik bir değer vermek en doğrusudur. Aşağıda bu argümana dinamik bir değer verilmiştir:
'page' => get_query_var('page'),
UYARI! Arkadaşlar, bu argüman için yaklaşık iki gün araştırma yaptım ve bu işe yaradığını buldum. Ancak, şöyle bir sorun ile karşılaştım: Bu argüman sabit bir değer aldığında, mesela, 'page' => 3
olarak ayarlandığında, ana sayfa 3. sayfası ile açılıyor fakat diğer sayfalara geçmiyor. Yani ana sayfadaki bütün sayfalama linkleri 3. sayfaya götürüyor. Bu sorunun nasıl çözüleceğini bilen arkadaşların, yorum atması veya backlink vermesi beni mutlu eder. Şimdiden teşekkür ederim.
‘paged’
(int) Sayfalanmış bir blog veya arşiv sayfasında, ekrandaki sayfanın numarasıdır.
Tıpkı 'page'
argümanı gibi, temamızın, sayfalanmış olan blog/arşiv sayfası, ilk defa açıldığında 'paged'
argümanına verdiğimiz değer kaç ise o sayfa ile karşılar. Bu argümanı kullanmak durumda kaldığınızda, sabit bir değer yerine dinamik bir değer vermek sorun yaşamamak için daha doğru bir tercihtir. Aşağıdaki kod, bu argümana dinamik olarak değer atar:
if ( get_query_var('paged') ) {
$paged = get_query_var('paged');
} elseif ( get_query_var('page') ) { // Sabit ana sayfalarda 'paged' argümanı yerine 'page' argümanı kullanılır
$paged = get_query_var('page');
} else {
$paged = 1;
}
$sorgu_argumanlari = array(
'paged' => $paged,
);
$gelen_yazilarin_dizisi = get_posts( $sorgu_argumanlari );
‘page_id’
(int) Getirilmek istenen sayfanın ID değeridir.
‘pagename’
Getirilmek istenen sayfanın link adıdır.
‘perm’
Getirilecek yazıları kimlerin görebileceğini belirler. Biri 'readable'
diğeri 'editable'
olmak üzere iki değer alır. 'readable'
değeri, herkes görebilir demektir, 'editable'
değeri de sadece yazıları düzenleme yetkisi olanlar görebilir demektir.
Aşağıdaki kod, sadece taslak (draft) olarak kaydedilmiş yazıları, sadece düzenleme yetkisi olanlar için (editor) getirir:
$sorgu_argumanlari = array(
'post_status' => 'draft',
'perm' => 'editable',
);
$gelen_yazilarin_dizisi = get_posts( $sorgu_argumanlari );
‘ping_status’
Yazıları ping durumuna göre çağırmak için kullanılır. 'open'
ve 'closed'
olarak iki farlı değer alır. 'open'
demek pingi açık olan yazılar, 'closed'
demek, pingi kapalı olan yazılar demektir.
Aşağıdaki kod, ping durumu kapalı olan yazıları getirir:
$sorgu_argumanlari = array(
'ping_status' => 'closed',
);
$gelen_yazilarin_dizisi = get_posts( $sorgu_argumanlari );
Sayfa tipindeki içeriklerin pingleri olmaz.
‘post__in’
(array) Getirilmek istenen yazıların ID değerlerinden oluşan basit bir dizidir.
Yukarıda bahsettiğimiz, 'ignore_sticky_posts'
argümanına 'false'
veya 0 değeri verildiğinde, 'post__in'
dizisi içinde yer almasa da, blogun en üstüne sabitlenmiş yazıların hepsini, getirir ve en üstte getirir. Bu durum, 'post__in'
argümanı kullanırken, dizi içindeki yazılardan daha fazlası ile karşılaşmamıza sebep olabilir.
‘post_mime_type’
Getirmek istediğimiz ortam dosyalarının mime tipleridir (mime type).
Aşağıda; pdf, ses, resim, text ve video dosyalarının mime type/sub-type (mime tipleri ve alt tipleri) değerleri verilmiştir.
Mime Type/sub-type | Dosya Uzantısı |
---|---|
application/pdf | |
audio/basic | au |
audio/basic | snd |
audio/mid | mid |
audio/mid | rmi |
audio/mpeg | mp3 |
audio/x-aiff | aif |
audio/x-aiff | aifc |
audio/x-aiff | aiff |
audio/x-mpegurl | m3u |
audio/x-pn-realaudio | ra |
audio/x-pn-realaudio | ram |
audio/x-wav | wav |
image/bmp | bmp |
image/cis-cod | cod |
image/gif | gif |
image/ief | ief |
image/jpeg | jpe |
image/jpeg | jpeg |
image/jpeg | jpg |
image/pipeg | jfif |
image/svg+xml | svg |
image/tiff | tif |
image/tiff | tiff |
image/x-cmu-raster | ras |
image/x-cmx | cmx |
image/x-icon | ico |
image/x-portable-anymap | pnm |
image/x-portable-bitmap | pbm |
image/x-portable-graymap | pgm |
image/x-portable-pixmap | ppm |
image/x-rgb | rgb |
image/x-xbitmap | xbm |
image/x-xpixmap | xpm |
image/x-xwindowdump | xwd |
message/rfc822 | mht |
message/rfc822 | mhtml |
message/rfc822 | nws |
text/css | css |
text/h323 | 323 |
text/html | htm |
text/html | html |
text/html | stm |
text/iuls | uls |
text/plain | bas |
text/plain | c |
text/plain | h |
text/plain | txt |
text/richtext | rtx |
text/scriptlet | sct |
text/tab-separated-values | tsv |
text/webviewhtml | htt |
text/x-component | htc |
text/x-setext | etx |
text/x-vcard | vcf |
video/mpeg | mp2 |
video/mpeg | mpa |
video/mpeg | mpe |
video/mpeg | mpeg |
video/mpeg | mpg |
video/mpeg | mpv2 |
video/quicktime | mov |
video/quicktime | qt |
video/x-la-asf | lsf |
video/x-la-asf | lsx |
video/x-ms-asf | asf |
video/x-ms-asf | asr |
video/x-ms-asf | asx |
video/x-msvideo | avi |
video/x-sgi-movie | movie |
Aşağıdaki örnek, gif uzantılı resimleri getirir.
$sorgu_argumanlari = array(
'post_type' => 'attachment', // resimler gelsin
'post_status' => 'inherit', // ebeveyni neyse o
'post_mime_type' => 'image/gif', // gif uzunatılılar gelsin
);
$gelen_yazilarin_dizisi = get_posts( $sorgu_argumanlari );
‘post__not_in’
(array) Getirmek istemediğimiz yazıların ID değerlerinden oluşan basit bir dizidir.
‘post_parent’
(int) Yavrularını getirmek istediğiniz yazının ID değeridir. Sadece herhangi bir ebeveyni olmayan, en üst seviyedeki içerikleri getirmek için, bu argümana 0 değeri verilmelidir.
‘post_parent__in’
(array) Yavrularını getirmek istediğimiz yazıların ID değerlerinden oluşan basit bir dizidir.
‘post_parent__not_in‘
(array) Yavrularını getirmek istemediğimiz yazıların ID değerlerinden oluşan basit bir dizidir.
‘post_type’
(string|array) Getirmek istediğimiz içeriğin tipidir. Varsayılan değeri 'post'
(yazı) olarak ayarlanmıştır. Fakat, aynı zamanda, birazdan göreceğimiz 'tax_query'
argümanını da kullanırsak, bu argümanın varsayılan değeri otomatikman 'any'
(hepsi) olur.
Aşağıdaki kod, sadece sayfaları getirir:
$sorgu_argumanlari = array(
'post_type' => 'page',
);
$gelen_yazilarin_dizisi = get_posts( $sorgu_argumanlari );
Aşağıdaki kod, revizyonlar (sürümler) ve ‘exclude_from_search’
argümanı true
olarak ayarlanmış içerikler dışındaki son 5 içeriği getirir:
$sorgu_argumanlari = array(
'post_type' => 'any',
);
$gelen_yazilarin_dizisi = get_posts( $sorgu_argumanlari );
Aşağıdaki kod, dizi içinde isimleri verilen içerik tiplerinden herhangi birine ait son 5 içeriği getirir:
$sorgu_argumanlari = array(
'post_type' => array( 'post', 'page', 'movie', 'book' )
);
$gelen_yazilarin_dizisi = get_posts( $sorgu_argumanlari );
‘post_status’
(string|array) Getirilmek istenen yazıların yayınlanma durumudur. Varsayılan değeri 'publish'
(yayında olanlar) olarak ayarlanmıştır. Fakat, kullanıcı, üye girişi yaptığında varsayılan değere 'private'
değeri de eklenir. Ayrıca, bu argümanın içinde olduğu sorgu, bir yönetici sayfasında çalıştırılır ise varsayılan değerlere 'future'
, 'draft'
ve 'pending'
değerleri de eklenir.
'post_status'
argümanının alabileceği değerler şunlardır:
- ‘
publish
‘ – yayınlanmış bir yazı veya sayfa.
‘pending
‘ – onay bekleyen bekleyen içerik.
‘draft
‘ – taslak olarak kaydedilmiş yazı.
‘auto-draft
‘ – henüz yeni oluşturulmuş boş içerik.
‘future
‘ – yayınlanma tarihi ileri bir tarihe ayarlanmış içerik.
‘private
‘ – üye girişi yapmamış kullanıcıların göremediği içerik.
‘inherit
‘ – bir sürüm.
‘trash
‘ – çöp kutusundaki içerik. (2.9 versiyonundan beri).
‘any
‘ – revizyonlar (sürümler) ve‘exclude_from_search’
argümanıtrue
olarak ayarlanmış içerikler (örnek:'trash'
ve'auto-draft'
durumundakiler) dışındaki bütün içerikleri getirir.
Aşağıdaki kod; onay bekleyen, taslak olarak kaydedilmiş, ve ileri bir tarihte yayınlanmak üzere ayarlanmış bütün yazıları getirir:
$sorgu_argumanlari = array(
'post_status' => array( 'pending', 'draft', 'future' ),
);
$gelen_yazilarin_dizisi = get_posts( $sorgu_argumanlari );
‘posts_per_page’
(int) Sayfalanmış sayfalarda, sayfa başına düşen yazı adedini belirten argümandır. Varsayılan değeri 5 olarak ayarlanmıştır. Bütün yazıları tek bir sayfada getirmek için -1 değerini alır.
‘posts_per_archive_page’
(int) WordPress’in, sayfalama özelliğini kullanırken, blog sayfalarınız için ayrı bir sayfalama kriteri, arşiv sayfalarınız için ayrı bir sayfalama kriteri getirmek isteyebilirsiniz. Bu argümana verdiğiniz değer, arşiv ve arama sonuçları için kullanılan şablonlarda, 'posts_per_page'
argümanının yerine kullanılır. Bir başka ifade ile is_archive()
ve is_search()
koşullu ifadelerinin true
değerini döndürdüğü durumlarda, 'posts_per_page'
argümanının yerine kullanılır.
‘post_name__in’
(array) Getirilecek yazıların link adlarından oluşan basit bir dizidir.
‘s’
Arama yapmak istediğiniz kelime(ler)dir. Getirmek istediğiniz içeriklerde, geçmesini istediğiniz keleme ya da kelimeler varsa bu argümanda belirtebilirsiniz. Bunun gibi, geçmesini istemediğiniz kelimeleri de bu argümanda belirtebilirsiniz. Argümanı daha iyi anlamak için aşağıdaki örneğe dikkat edelim:
$sorgu_argumanlari = array(
's' => 'araba -opel',
);
$gelen_yazilarin_dizisi = get_posts( $sorgu_argumanlari );
Yukarıdaki kod, içinde ‘araba‘ kelimesi geçen fakat ‘opel‘ kelimesi geçmeyen bütün yazıları getirir. ‘opel‘ kelimesi geçen içerikleri istemediğimizi, kelimenin önüne eksi (-) işareti koyarak belirttik. İstemediğimiz kelimeleri ifade etmek için, başka bir işaret kullanmak isterseniz, bunu, 'wp_query_search_exclusion_prefix'
kancası yardımı ile ayarlayabilirsiniz.
Aşağıdaki kod bu işareti çarpı (x) işareti ile değiştirir:
function wp_query_search_exclusion_prefix_degistir( $var ) {
$var = 'x';
return $var;
};
add_filter( 'wp_query_search_exclusion_prefix', 'wp_query_search_exclusion_prefix_degistir', 10, 1 );
‘second’
(int) Getirmek istediğimiz içeriğin oluşturulduğu saniyedir. 0-60 arasında değer alır.
‘sentence’
(bool) Arama ifadesi ('s' => 'arama ifadesi burada olur'
) birden fazla kelime ise, arama işleminin, ifadenin tamamının eşleşmesi ile yapılmasını istiyorsak bu argümana true
değeri veririz, ya da ifadedeki kelimeler için ayrı ayrı yapılmasını istiyorsak bu argümana false
değerini veririz. Varsayılan değeri false
olarak ayarlanmıştır.
Örnek-1
$sorgu_argumanlari = array(
's' => 'opel corsa',
'sentence' => true
);
$gelen_yazilarin_dizisi = get_posts( $sorgu_argumanlari );
Yukarıdaki kod, ‘opel corsa‘ ifadesinin bir bütün olarak geçtiği son beş yazıyı getirir, yani ‘opel‘ ve ‘corsa‘ kelimeleri için ayrı eşleşmeler aramaz.
‘suppress_filters’
(bool) Filtreleme işlemini durdur demektir.
WP_Query
sorgularında, varsayılan değeri false
, get_posts()
fonksiyonunda ise varsayılan değeri true
olarak ayarlanmıştır.
‘tag’
Getirilmek istenen içeriğin etiketinin link adıdır. Aşağıdaki şekillerde kullanılabilir:
Örnek-1
Aşağıdaki kod, link adı ‘kirmizi‘ olan bir etikete sahip son beş içeriği getirir:
$sorgu_argumanlari = array(
'tag' => 'kirmizi',
);
$gelen_yazilarin_dizisi = get_posts( $sorgu_argumanlari );
Örnek-2
Aşağıdaki kod, link adı ‘kirmizi‘ veya ‘yesil‘ olan etiketlerden en az bir tanesine sahip, son beş içeriği getirir:
$sorgu_argumanlari = array(
'tag' => 'kirmizi, yesil',
);
$gelen_yazilarin_dizisi = get_posts( $sorgu_argumanlari );
Örnek-3
Aşağıdaki kod, link adı ‘kirmizi‘ ve ‘yesil‘ olan etiketlerin her ikisine birden sahip, son beş içeriği getirir:
$sorgu_argumanlari = array(
'tag' => 'kirmizi+yesil',
);
$gelen_yazilarin_dizisi = get_posts( $sorgu_argumanlari );
‘tag__and’
(array) Getirmek istediğimiz yazılarda, mutlaka olmasını istediğimiz etiketlerin ID değerlerinden oluşan basit bir dizidir. Örneğe dikkat edelim:
Örnek-1
Aşağıdaki kod, ID değeri 12, 44 ve 56 olan etiketlerin hepsine birden sahip, son beş içeriği getirir:
$sorgu_argumanlari = array(
'tag__and' => array(12, 44, 56),
);
$gelen_yazilarin_dizisi = get_posts( $sorgu_argumanlari );
‘tag__in’
(array) Getirmek istediğimiz yazılarda, en az birinin olmasını istediğimiz etiketlerin ID değerlerinden oluşan basit bir dizidir. Örneğe dikkat edelim:
Örnek-1
Aşağıdaki kod, ID değeri 12 veya 44 veya 56 olan etiketlerden en az birine sahip, son beş içeriği getirir:
$sorgu_argumanlari = array(
'tag__in' => array(12, 44, 56),
);
$gelen_yazilarin_dizisi = get_posts( $sorgu_argumanlari );
‘tag__not_in’
(array) Getirmek istediğimiz yazılarda, bulunmasını istemediğimiz etiketlerin ID değerlerinden oluşan basit bir dizidir. Örneğe dikkat edelim:
Örnek-1
Aşağıdaki kod, ID değeri 12 veya 44 veya 56 olan etiketlerden hiçbirine sahip olmayan, son beş içeriği getirir:
$sorgu_argumanlari = array(
'tag__not_in' => array(12, 44, 56),
);
$gelen_yazilarin_dizisi = get_posts( $sorgu_argumanlari );
‘tag_id‘
(int|stirng) Getirmek istediğimiz yazılarda, bulunmasını istediğimiz etiketin ID değeridir ya da bu etiketlerin aralarına virgül konulmuş ID değerleri listesidir. Örneğe dikkat edelim:
Örnek-1
Aşağıdaki kod, ID değeri 12 olan etikete sahip içeriği getirir:
$sorgu_argumanlari = array(
'tag_id' => 12,
);
$gelen_yazilarin_dizisi = get_posts( $sorgu_argumanlari );
Örnek-2
Aşağıdaki kod, ID değeri 12 veya 44 veya 56 olan etikete sahip içeriği getirir:
$sorgu_argumanlari = array(
'tag_id' => '12, 44, 56',
);
$gelen_yazilarin_dizisi = get_posts( $sorgu_argumanlari );
‘tag_slug__and’
(array) Getirmek istediğimiz yazılarda, mutlaka olmasını istediğimiz etiketlerin, link adı değerlerinden oluşan basit bir dizidir. Örneğe dikkat edelim:
Örnek-1
Aşağıdaki kod, link adı ‘kirmizi‘ ve ‘yesil‘ olan etiketlerin her ikisine de sahip, son beş içeriği getirir:
$sorgu_argumanlari = array(
'tag_slug__and' => array('kirmizi', 'yesil'),
);
$gelen_yazilarin_dizisi = get_posts( $sorgu_argumanlari );
‘tag_slug__in’
(array) Getirmek istediğimiz yazılarda, en az bir tanesinin olmasını istediğimiz etiketlerin, link adı değerlerinden oluşan basit bir dizidir. Örneğe dikkat edelim:
Örnek-1
Aşağıdaki kod, link adı ‘kirmizi‘ veya ‘yesil‘ olan etiketlerden, en az bir tanesine sahip, son beş içeriği getirir:
$sorgu_argumanlari = array(
'tag_slug__in' => array('kirmizi', 'yesil'),
);
$gelen_yazilarin_dizisi = get_posts( $sorgu_argumanlari );
‘tax_query‘
(array) WordPress’in sınıflandırma (taxonomy) sorgusuna ait ifadelerden oluşan ve 'anahtari' => 'degeri'
formatında olan bir dizidir.
Bu argüman, bazı alt argümanlar alır ve bu alt argümanlar da ayrı bir dizi içinde oluşturulur. Yani 'tax_query'
aslında dizi içinde dizilerden oluşan bir argümandır.
Aşağıda, 'tax_query'
argümanında kullanılan alt argümanlar açıklanmıştır:
‘relation’
'tax_query'
argümanı içinde, birden fazla dizi (array) tanımlayarak bu diziler içinde, getirmek istediğimiz içerikler için alt argümanlar düzenleyebiliriz. Bu durumda, bu diziler arasındaki ilişkiyi 'relation'
argümanı düzenler. Bu argüman iki değer alır:
'or'
– Varsayılan: Oluşturulan dizilerden herhangi birindeki argümanların değerlerini taşıyan yazıları getirir.'and'
: Oluşturulan dizilerden her ikisindeki argümanların birden değerlerini taşıyan yazıları getirir.
‘taxonomy’
Sınıflandırma yönteminin adıdır.
Mesela, WordPress kurulumu ile birlikte gelen kategori sistemi bir çeşit sınıflandırma yöntemidir ve bu sınıflandırma yönteminin adı da 'category'
dir. Etiket sistemi de diğer bir sınıflandırma yöntemidir. WordPress temalarında, kategori ve etiket sistemi ile sınırlı kalmayıp dilediğimiz kadar özel sınıflandırma yöntemi oluşturabiliriz.
‘field’
Sınıflandırma yöntemine ait sınıfın (term) hangi kritere göre seçileceğini belirler. Aşağıdaki değerleri alır:
‘term_id’
– Varsayılan : Sınıf (term), id değerine göre seçilir.‘name’
: Sınıf (term), isim değerine göre seçilir.‘slug’
: Sınıf (term), link adı değerine göre seçilir.‘term_taxonomy_id’
: Sınıf (term), sınıflandırma yöntemine ait id değerine göre seçilir.
‘terms’
(int|string|array) Biraz önce bahsettiğimiz, 'field'
argümanında belirlenen kritere göre, getirmek istediğimiz içeriğin sınıfını veya sınıflarını seçer.
Özel sınıflandırma yöntemleri, kodlayarak oluşturulur (register_taxonomy()
fonksiyonu ile). Oluşturduğumuz özel bir sınıflandırma yöntemine ait sınıflar ise, yönetim panelinden oluşturulur. Örneğin kategori sistemi bir sınıflandırma yöntemidir, yönetim panelinden eklenen her bir kategori de bu sınıflandırma yöntemi ait bir sınıftır.
‘include_children’
(bool) Hiyerarşik bir sınıflandırma yöntemi ile çalışıyorsak, seçtiğimiz sınıfın alt sınıfları olabilir. Bu argüman, alt sınıftaki içerikleri de getirmek (true
) ya da hariç tutmak (false
) için kullanılır. Varsayılan değeri true
olarak ayarlanmıştır.
‘operator’
Argümanlar için verdiğimiz değerlerin nasıl değerlendireceğini belirleyen argümandır. Aşağıdaki değerleri alır:
‘IN’
– Varsayılan: Seçilen sınıfın içinde olanları getir.‘NOT IN’
: Seçilen sınıfın içinde olmayanları getir.‘AND’
: Seçilen sınıfların hepsinin içinde olanları getir.‘EXISTS’
: Alt sorguda bulunanları getir.‘NOT EXISTS’
: Alt sorguda bulunmayanları getir.
Aşağıda, 'tax_query'
argümanının kullanımı ile ilgili bazı örnekler verilmiştir.
Örnek-1
Aşağıdaki kod, ‘arabalar‘ adlı sınıflandırma yönteminde oluşturulmuş, ID numarası 11 olan sınıfa ait, son beş yazıyı getirir.
$sorgu_argumanlari = array(
'tax_query' => array(
array(
'taxonomy' => 'arabalar',
'terms' => '11' //
)
)
);
$gelen_yazilarin_dizisi = get_posts( $sorgu_argumanlari );
Örnek-2
Aşağıdaki kod, ‘arabalar‘ adlı sınıflandırma yönteminde oluşturulmuş, link adı (slug) ‘opel‘ olan sınıfa ait, son beş yazıyı getirir.
$sorgu_argumanlari = array(
'tax_query' => array(
array(
'taxonomy' => 'arabalar',
'field' => 'slug', // 'term' argümanını, slug (link adı) değerine göre seçeceğimizi belirttik
'terms' => 'opel',
)
)
);
$gelen_yazilarin_dizisi = get_posts( $sorgu_argumanlari );
Örnek-3
Aşağıdaki kod, 'yemek-tarifleri'
sınıflandırmasında, 'ana-yemekler'
ve 'etli-yemekler'
sınıflarının her ikisine birden kaydedilmiş olan ve aynı zamanda, 'pisirme-yontemleri'
sınıflandırmasında 'firin'
veya 'ocak'
sınıflarından en az birine kaydedilmiş olan, son 20 yazıyı getirir.
$sorgu_argumanlari = array(
'posts_per_page' => 20, // son 20 yazıyı getirir
'tax_query' => array(
'relation' => 'AND', // Her iki dizideki özelliklerin hepsini taşıyanları getirir
array( // 'ana-yemekler' ve 'etli-yemekler' sınıflarına kayıtlı olan 'yemek-tarifleri' ni getirir
'taxonomy' => 'yemek-tarifleri',
'field' => 'slug',
'terms' => array( 'ana-yemekler', 'etli-yemekler' ),
'operator' => 'AND'
),
array( // 'pisirme-yontemleri', 'firin' veya 'ocak' olanları getirir.
'taxonomy' => 'pisirme-yontemleri',
'field' => 'slug',
'terms' => array( 'firin', 'ocak'),
)
)
);
$gelen_yazilarin_dizisi = get_posts( $sorgu_argumanlari );
‘title‘
Getirilmek istenen yazının başlığıdır.
‘update_post_meta_cache‘
(bool) Yazı ile ilgili olarak, cache belleğe kayıtlı olan meta bilgilerini günceller (true
) ya da bu bilgileri cache belleğe aktarmaz (false
).
‘update_post_term_cache’
(bool) Yazı ile ilgili olarak, cache belleğe kayıtlı olan sınıf (term) bilgilerini günceller (true
) ya da bu bilgileri cache belleğe aktarmaz (false
).
‘lazy_load_term_meta‘
(bool) İçerik ile ilgili olarak, cache belleğe kayıtlı olan bilgileri tembel yükler ('lazy_load_term_meta' => true
) yani sadece lazım olan kadarını yükler, ya da hepsini birden yükler ('lazy_load_term_meta' => false
). Bu argümanın varsayılan değeri 'update_post_term_cache'
argümanına atanan değer olarak ayarlanmıştır.
‘w’
(int) Haftanın sene içindeki numarasıdır. 0-53 arasında değer alır.
‘year’
(int) Getirilmek istenen içeriğin oluşturulduğu senedir. Dört haneli herhangi bir sayıdır.
Döndürdüğü Sonuç:
get_posts()
fonksiyonu, getirdiği içeriklere ait bir dizi döndürür. Bu dizinin her bir elemanı, bir içeriğe ait bir nesnedir. Fonksiyon, parametre girilmeden kullanıldığında, bloğumuzdaki son 5 yazıya ait bir dizi getirir.
Kaynak Kodu:
Dizini: wp-includes/post.php
function get_posts( $args = null ) {
$defaults = array(
'numberposts' => 5,
'category' => 0,
'orderby' => 'date',
'order' => 'DESC',
'include' => array(),
'exclude' => array(),
'meta_key' => '',
'meta_value' => '',
'post_type' => 'post',
'suppress_filters' => true,
);
$r = wp_parse_args( $args, $defaults );
if ( empty( $r['post_status'] ) ) {
$r['post_status'] = ( 'attachment' == $r['post_type'] ) ? 'inherit' : 'publish';
}
if ( ! empty( $r['numberposts'] ) && empty( $r['posts_per_page'] ) ) {
$r['posts_per_page'] = $r['numberposts'];
}
if ( ! empty( $r['category'] ) ) {
$r['cat'] = $r['category'];
}
if ( ! empty( $r['include'] ) ) {
$incposts = wp_parse_id_list( $r['include'] );
$r['posts_per_page'] = count( $incposts ); // only the number of posts included
$r['post__in'] = $incposts;
} elseif ( ! empty( $r['exclude'] ) ) {
$r['post__not_in'] = wp_parse_id_list( $r['exclude'] );
}
$r['ignore_sticky_posts'] = true;
$r['no_found_rows'] = true;
$get_posts = new WP_Query;
return $get_posts->query( $r );
}
yish.oi says:
Üstünde çok durulmuş başarılı bir yazı 🙂 tebrik ederim
Muzaffer KAYA says:
Teşekkür ederim.
recep says:
gördüğüm en detaylı yazı mükemmelsiniz her detayına inmişsiniz