BU DERSİN BAŞLIKLARI
get_children( mixed $argumanlar = '', string $dizinin_bicimi = OBJECT )
Açıklaması:
WordPress ile, standart olarak oluşturulabilen 5 faklı içerik tipinden ikisi, sayfa ve yazılardır. Sayfa ve yazıların, diğer üç içerik tipinden farklı olarak, ebeveyn olma özellikleri vardır, yani yavrulara sahip olabilirler. Bir sayfanın yavrusu, bir başka sayfa ya da sayfalardır, bir yazının yavrusu ise, o yazıyı düzenlerken yüklenen, bir veya daha fazla ortam dosyasıdır. Bir yazı ya da sayfanın yavrularını getirmek için kullanılabilecek fonksiyonlardan biri de get_children()
fonksiyonudur.
Get_children()
fonksiyonu, get_posts() fonksiyonundan türetilmiştir. Bu yüzden, get_children()
fonksiyonunu anlamak için önce get_posts() fonksiyonunu anlamak gerekir.
Parametreleri:
Get_children()
fonksiyonu, iki parametre alır. Bu parametrelerin ikisi de isteğe bağlıdır. Bunlardan ilki $argumanlar
parametresi, diğeri ise $dizinin_bicimi
parametresidir. Parametreleri yakında inceleyelim:
$argumanlar
(Zorunlu değildir) get_children()
fonksiyonu, get_posts() fonksiyonunun kullandığı argümanları kullanır. Fakat, get_children()
fonksiyonu, get_posts() fonksiyonundan farklı olarak, bazı argümanlar için farklı varsayılan değerleri kullanır. Bu iki fonksiyon arasındaki temel farkı oluşturan bu argümanlar, her iki fonksiyonun kullandığı varsayılan değerleri ile birlikte aşağıda verilmiştir:
Get_children()
fonksiyonundaki varsayılan değerleri:
'numberposts' => -1, // Bütün içerikleri getir
'post_type' => 'any', // Bütün içerik tiplerini getir
'post_status' => 'any', // Durumu ne olursa olsun getir
'post_parent' => 0, // Yavruları getirme
get_posts() fonksiyonundaki varsayılan değerleri:
'numberposts' => 5, // Son beş içeriği getir
'post_type' => 'post', // Sadece tipi "yazı" olanları getir
'post_status' => 'publish', // Yayınlanmışsa getir
'post_parent' => '', // Yavru ya da ebeveyn olabilir
Yukarıda verilen 4 argüman dışında, diğer bütün argümanların kullanımı ve varsayılan değerleri her iki fonksiyonda da aynıdır.
Get_children()
fonksiyonunun, adında vaadettiği gibi, yavru içerikleri getirmesi için, 'post_parent'
argümanı kullanılmalıdır. Bu argümana, yavrularını getirmek istediğimiz içeriğin ID değeri verilmelidir.
Örnek-1
Aşağıdaki örnek, ID değeri 1810 olan bir yazıya ait ortam dosyalarını getirir:
$argumanlar = array(
'post_type' => 'attachment', // sadece resimleri getir
'post_parent' => 1810, // ID değeri 1810 olan içerik için yüklenen resimleri getir
);
$gelen_resimlerin_dizisi = get_children($argumanlar);
Yukarıdaki kod, ID değeri 1810 olan bir içerik için yüklenmiş ortam dosyalarının hepsini getirir ve $gelen_resimlerin_dizisi
değişkenine bir dizi olarak yükler. Bu dizinin, hangi şekilde ve hangi bilgiler ile geldiğini görmek için var_dump()
fonksiyonunu kullanabiliriz. Şöyle ki:
var_dump($gelen_resimlerin_dizisi);
Yukarıdaki var_dump()
fonksiyonu, aşağıdaki diziyi bastıracaktır.(Dizi daha anlaşılır olsun diye, satırlara bölünmüş ve yorumlar eklenmiştir. Sizin çıktınız daha karmaşık görünecektir ve yorumlar olmayacaktır.)
array(2) { // 2 elemanlı bir dizi geldi yani 2 adet ortam dosyası geldi
[2021]=> object(WP_Post)#4338 (24)
{ // 1. elaman: 1. ortam dosyası için oluşturulmuş bir PHP nesnesi şeklinde geldi
["ID"]=> int(2021)
["post_author"]=> string(1) "1"
["post_date"]=> string(19) "2019-06-16 13:16:03"
["post_date_gmt"]=> string(19) "2019-06-16 10:16:03"
["post_content"]=> string(0) ""
["post_title"]=> string(7) "traktor"
["post_excerpt"]=> string(0) ""
["post_status"]=> string(7) "inherit"
["comment_status"]=> string(4) "open"
["ping_status"]=> string(6) "closed"
["post_password"]=> string(0) ""
["post_name"]=> string(7) "traktor"
["to_ping"]=> string(0) ""
["pinged"]=> string(0) ""
["post_modified"]=> string(19) "2019-06-16 13:16:03"
["post_modified_gmt"]=> string(19) "2019-06-16 10:16:03"
["post_content_filtered"]=> string(0) ""
["post_parent"]=> int(1810)
["guid"]=> string(66) "https://sitecenneti.com/wp-content/uploads/2019/06/traktor.jpg"
["menu_order"]=> int(0)
["post_type"]=> string(10) "attachment"
["post_mime_type"]=> string(10) "image/jpeg"
["comment_count"]=> string(1) "0"
["filter"]=> string(3) "raw"
}
[2020]=> object(WP_Post)#4336 (24)
{ // 2. elaman: 2. ortam dosyası için oluşturulmuş bir PHP nesnesi şeklinde geldi
["ID"]=> int(2020)
["post_author"]=> string(1) "1"
["post_date"]=> string(19) "2019-06-16 13:16:02"
["post_date_gmt"]=> string(19) "2019-06-16 10:16:02"
["post_content"]=> string(0) ""
["post_title"]=> string(6) "sera-1"
["post_excerpt"]=> string(0) ""
["post_status"]=> string(7) "inherit"
["comment_status"]=> string(4) "open"
["ping_status"]=> string(6) "closed"
["post_password"]=> string(0) ""
["post_name"]=> string(6) "sera-1"
["to_ping"]=> string(0) ""
["pinged"]=> string(0) ""
["post_modified"]=> string(19) "2019-06-16 13:16:02"
["post_modified_gmt"]=> string(19) "2019-06-16 10:16:02"
["post_content_filtered"]=> string(0) ""
["post_parent"]=> int(1810)
["guid"]=> string(65) "https://sitecenneti.com/wp-content/uploads/2019/06/sera-1.jpg"
["menu_order"]=> int(0)
["post_type"]=> string(10) "attachment"
["post_mime_type"]=> string(10) "image/jpeg"
["comment_count"]=> string(1) "0"
["filter"]=> string(3) "raw"
}
}
Yukarıda görüldüğü gibi, $gelen_resimlerin_dizisi
, ihtiyacımız olan bütün bilgileriyle birlikte, 1810 ID numaralı içerik için yüklenen ortam dosyalarını getirmiştir. Çıktıdan anlıyoruz ki, içerik, 2 tane resme sahiptir, bu yüzden, $gelen_resimlerin_dizisi
dizisi 2 elemanlı olarak gelmiştir.
Peki, 1810 ID numaralı içerik için yüklenmiş bu resimleri, ekrana bastırmak istersek ne yapmalıyız?
Bu sorunun cevabı, tamamen PHP bilgimizde yatıyor. Elimizde bir dizi var, bu dizinin iki elemanı var, bu elemanların her biri bir PHP nesnesi formatında oluşmuş ve her bir nesne, url (["guid"]
) bilgisi de dahil, bir resim ile ilgili bilgiler içeriyor. Yapmamız gereken tek şey, bu bilgilerden ihtiyacımız olanları bir PHP döngüsü yardımı ile almaktır. Aşağıda, bu resimleri ekrana bastırmak için kullanabileceğiniz bir kod örneği verilmiştir:
foreach( $gelen_resimlerin_dizisi as $resim ) {
echo '<div class="resim parent-id-'.$resim->post_parent.' resim-id-'.$resim->ID.'">
<img width="400" src="'.$resim->guid.'" />
</div>';
}
Bazen, ID değerini verdiğiniz içerikte, resim olmasına rağmen, $gelen_resimlerin_dizisi
dizisi boş gelir veya resimlerin hepsini getirmez. Bunun sebebi, resimlerin, o içeriğe, yüklenerek değil, “Ortam kütüphanesi“nden seçilerek eklenmiş olmasıdır. Ortam kütüphanesinden seçilen resimler daha önceden yüklenmiş ve ebeveyn olarak da başka içeriklere atanmıştır. Bu yüzden, içeriğimize eklesek de içeriğimizin yavrusu olarak kabul edilmezler. Çünkü, bir içerik oluştururken, “Yükle” butonu ile değil de, “Ortam kütüphanesi“nden seçtiğimiz veya “Adresten ekle“diğimiz resimlerin ebeveyni o içerik olmaz ve $gelen_resimlerin_dizisi
dizisiyle getirilemez. Bazen de, içerik için yüklediğimiz resimleri kaldırmamıza rağmen, kalıcı olarak silmediysek tabi, $gelen_resimlerin_dizisi
bu resimleri de getirir. Çünkü, get_children()
fonksiyonu, yavru resimleri kütüphaneden bulur getirir, içeriğin güncel halinden değil.

$dizinin_bicimi
(Zorunlu değildir) Bu argüman, get_children()
fonksiyonunun getirdiği içerikleri bize nasıl sunacağını belirler. get_children()
fonksiyonu, içerikleri, her zaman bir dizi şeklinde getirir. $dizinin_bicimi
parametresi bu kuralı değiştiremez fakat dizinin biçimini değiştirebilir. Bu argüman üç farklı değer alır. Bu değerler şunlardır:
-
OBJECT
– Varsayılan : Dizinin her bir elemanı yani, gelen her bir içerik bir PHP nesnesi (object) şeklinde gelir. -
ARRAY_A
: Dizinin her bir elemanı'anahtari' => 'degeri'
şeklinde gelir. -
ARRAY_N
: Dizinin her bir elemanı[0] => 'degeri'
şeklinde, numaralı gelir.
Örnek-1
$dizinin_bicimi
parametresi için, OBJECT
değerinin kullanımına örnek olarak aşağıdaki kod verilmiştir:
$argumanlar = array(
'post_type' => 'attachment', // sadece resimleri getir
'post_parent' => 1810, // ID değeri 1810 olan içerik için yüklenen resimleri getir
);
// OBJECT değeri, varsayılan ve isteğe bağlı olduğu için, aşağıdaki iki dizi birbiriyle aynıdır.
$gelen_resimlerin_dizisi = get_children($argumanlar, OBJECT);
// veya
$gelen_resimlerin_dizisi = get_children($argumanlar);
OBJECT
parametresi ile oluşturulan $gelen_resimlerin_dizisi
dizisi, şöyle bir dizi olarak gelir:
array(2) { // 2 elemanlı bir dizi geldi yani 2 adet ortam dosyası geldi
[2021]=> object(WP_Post)#4338 (24) { // 1. elaman: 1. ortam dosyası için oluşturulmuş bir PHP nesnesi şeklinde geldi
["ID"]=> int(2021)
["post_author"]=> string(1) "1"
["post_date"]=> string(19) "2019-06-16 13:16:03"
["post_date_gmt"]=> string(19) "2019-06-16 10:16:03"
["post_content"]=> string(0) ""
["post_title"]=> string(7) "traktor"
["post_excerpt"]=> string(0) ""
["post_status"]=> string(7) "inherit"
["comment_status"]=> string(4) "open"
["ping_status"]=> string(6) "closed"
["post_password"]=> string(0) ""
["post_name"]=> string(7) "traktor"
["to_ping"]=> string(0) ""
["pinged"]=> string(0) ""
["post_modified"]=> string(19) "2019-06-16 13:16:03"
["post_modified_gmt"]=> string(19) "2019-06-16 10:16:03"
["post_content_filtered"]=> string(0) ""
["post_parent"]=> int(1810)
["guid"]=> string(66) "https://sitecenneti.com/wp-content/uploads/2019/06/traktor.jpg"
["menu_order"]=> int(0)
["post_type"]=> string(10) "attachment"
["post_mime_type"]=> string(10) "image/jpeg"
["comment_count"]=> string(1) "0"
["filter"]=> string(3) "raw"
}
[2020]=> object(WP_Post)#4336 (24) { // 2. elaman: 2. ortam dosyası için oluşturulmuş bir PHP nesnesi şeklinde geldi
["ID"]=> int(2020)
["post_author"]=> string(1) "1"
["post_date"]=> string(19) "2019-06-16 13:16:02"
["post_date_gmt"]=> string(19) "2019-06-16 10:16:02"
["post_content"]=> string(0) ""
["post_title"]=> string(6) "sera-1"
["post_excerpt"]=> string(0) ""
["post_status"]=> string(7) "inherit"
["comment_status"]=> string(4) "open"
["ping_status"]=> string(6) "closed"
["post_password"]=> string(0) ""
["post_name"]=> string(6) "sera-1"
["to_ping"]=> string(0) ""
["pinged"]=> string(0) ""
["post_modified"]=> string(19) "2019-06-16 13:16:02"
["post_modified_gmt"]=> string(19) "2019-06-16 10:16:02"
["post_content_filtered"]=> string(0) ""
["post_parent"]=> int(1810)
["guid"]=> string(65) "https://sitecenneti.com/wp-content/uploads/2019/06/sera-1.jpg"
["menu_order"]=> int(0)
["post_type"]=> string(10) "attachment"
["post_mime_type"]=> string(10) "image/jpeg"
["comment_count"]=> string(1) "0"
["filter"]=> string(3) "raw"
}
}
Gelen resimleri, şablon dosyalarımızda kullanmak için, fikir vermesi açısından, şu kodu kullanabiliriz:
$argumanlar = array(
'post_type' => 'attachment',
'post_parent' => 1810,
);
$gelen_resimlerin_dizisi = get_children($argumanlar);
foreach( $gelen_resimlerin_dizisi as $resim ) {
echo '<div class="resim parent-id-'.$resim->post_parent.' resim-id-'.$resim->ID.'">
<img width="400" src="'.$resim->guid.'" />
</div>';
}
Örnek-2
$dizinin_bicimi
parametresi için, ARRAY_A
değerinin kullanımına örnek olarak aşağıdaki kod verilmiştir:
$argumanlar = array(
'post_type' => 'attachment', // sadece resimleri getir
'post_parent' => 1810, // ID değeri 1810 olan içerik için yüklenen resimleri getir
);
$gelen_resimlerin_dizisi = get_children($argumanlar, ARRAY_A);
ARRAY_A
parametresi ile oluşturulan $gelen_resimlerin_dizisi
dizisi, şöyle bir dizi olarak gelir:
array(2) {
[2021]=> array(24)
{
["ID"]=> int(2021)
["post_author"]=> string(1) "1"
["post_date"]=> string(19) "2019-06-16 13:16:03"
["post_date_gmt"]=> string(19) "2019-06-16 10:16:03"
["post_content"]=> string(0) ""
["post_title"]=> string(7) "traktor"
["post_excerpt"]=> string(0) ""
["post_status"]=> string(7) "inherit"
["comment_status"]=> string(4) "open"
["ping_status"]=> string(6) "closed"
["post_password"]=> string(0) ""
["post_name"]=> string(7) "traktor"
["to_ping"]=> string(0) ""
["pinged"]=> string(0) ""
["post_modified"]=> string(19) "2019-06-16 13:16:03"
["post_modified_gmt"]=> string(19) "2019-06-16 10:16:03"
["post_content_filtered"]=> string(0) ""
["post_parent"]=> int(1810)
["guid"]=> string(66) "https://sitecenneti.com/wp-content/uploads/2019/06/traktor.jpg"
["menu_order"]=> int(0)
["post_type"]=> string(10) "attachment"
["post_mime_type"]=> string(10) "image/jpeg"
["comment_count"]=> string(1) "0"
["filter"]=> string(3) "raw"
}
[2020]=> array(24)
{
["ID"]=> int(2020)
["post_author"]=> string(1) "1"
["post_date"]=> string(19) "2019-06-16 13:16:02"
["post_date_gmt"]=> string(19) "2019-06-16 10:16:02"
["post_content"]=> string(0) ""
["post_title"]=> string(6) "sera-1"
["post_excerpt"]=> string(0) ""
["post_status"]=> string(7) "inherit"
["comment_status"]=> string(4) "open"
["ping_status"]=> string(6) "closed"
["post_password"]=> string(0) ""
["post_name"]=> string(6) "sera-1"
["to_ping"]=> string(0) ""
["pinged"]=> string(0) ""
["post_modified"]=> string(19) "2019-06-16 13:16:02"
["post_modified_gmt"]=> string(19) "2019-06-16 10:16:02"
["post_content_filtered"]=> string(0) ""
["post_parent"]=> int(1810)
["guid"]=> string(65) "https://sitecenneti.com/wp-content/uploads/2019/06/sera-1.jpg"
["menu_order"]=> int(0)
["post_type"]=> string(10) "attachment"
["post_mime_type"]=> string(10) "image/jpeg"
["comment_count"]=> string(1) "0"
["filter"]=> string(3) "raw"
}
}
Gelen resimleri, şablon dosyalarımızda kullanmak için, fikir vermesi açısından, şu kodu kullanabiliriz:
$argumanlar = array(
'post_type' => 'attachment',
'post_parent' => 1810,
);
$gelen_resimlerin_dizisi = get_children($argumanlar, ARRAY_A);
foreach( $gelen_resimlerin_dizisi as $resim ) {
echo '<div class="resim parent-id-'.$resim['post_parent'].' resim-id-'.$resim['ID'].'">
<img width="400" src="'.$resim['guid'].'" />
</div>';
}
Örnek-3
$dizinin_bicimi
parametresi için, ARRAY_N
değerinin kullanımına örnek olarak aşağıdaki kod verilmiştir:
$argumanlar = array(
'post_type' => 'attachment', // sadece resimleri getir
'post_parent' => 1810, // ID değeri 1810 olan içerik için yüklenen resimleri getir
);
$gelen_resimlerin_dizisi = get_children($argumanlar, ARRAY_N);
ARRAY_N
parametresi ile oluşturulan $gelen_resimlerin_dizisi
dizisi, şöyle bir dizi olarak gelir:
array(2) {
[2021]=> array(24)
{
[0]=> int(2021)
[1]=> string(1) "1"
[2]=> string(19) "2019-06-16 13:16:03"
[3]=> string(19) "2019-06-16 10:16:03"
[4]=> string(0) ""
[5]=> string(7) "traktor"
[6]=> string(0) ""
[7]=> string(7) "inherit"
[8]=> string(4) "open"
[9]=> string(6) "closed"
[10]=> string(0) ""
[11]=> string(7) "traktor"
[12]=> string(0) ""
[13]=> string(0) ""
[14]=> string(19) "2019-06-16 13:16:03"
[15]=> string(19) "2019-06-16 10:16:03"
[16]=> string(0) ""
[17]=> int(1810)
[18]=> string(66) "https://sitecenneti.com/wp-content/uploads/2019/06/traktor.jpg"
[19]=> int(0)
[20]=> string(10) "attachment"
[21]=> string(10) "image/jpeg"
[22]=> string(1) "0"
[23]=> string(3) "raw"
}
[2020]=> array(24)
{
[0]=> int(2020)
[1]=> string(1) "1"
[2]=> string(19) "2019-06-16 13:16:02"
[3]=> string(19) "2019-06-16 10:16:02"
[4]=> string(0) ""
[5]=> string(6) "sera-1"
[6]=> string(0) ""
[7]=> string(7) "inherit"
[8]=> string(4) "open"
[9]=> string(6) "closed"
[10]=> string(0) ""
[11]=> string(6) "sera-1"
[12]=> string(0) ""
[13]=> string(0) ""
[14]=> string(19) "2019-06-16 13:16:02"
[15]=> string(19) "2019-06-16 10:16:02"
[16]=> string(0) ""
[17]=> int(1810)
[18]=> string(65) "http://localhost/benimsitem/wp-content/uploads/2019/06/sera-1.jpg"
[19]=> int(0)
[20]=> string(10) "attachment"
[21]=> string(10) "image/jpeg"
[22]=> string(1) "0"
[23]=> string(3) "raw"
}
}
Gelen resimleri, şablon dosyalarımızda kullanmak için, fikir vermesi açısından, şu kodu kullanabiliriz:
$argumanlar = array(
'post_type' => 'attachment',
'post_parent' => 1810,
);
$gelen_resimlerin_dizisi = get_children($argumanlar, ARRAY_N);
foreach( $gelen_resimlerin_dizisi as $resim ) {
echo '<div class="resim parent-id-'.$resim[17].' resim-id-'.$resim[0].'">
<img width="400" src="'.$resim[18].'" />
</div>';
}
Döndürdüğü Sonuç:
Get_children()
fonksiyonu, bir dizi döndürür. Dizinin biçimi, ikinci parametresine bağlıdır.
Kaynak Kodu:
Dizini: wp-includes/post.php
function get_children( $args = '', $output = OBJECT ) {
$kids = array();
if ( empty( $args ) ) {
if ( isset( $GLOBALS['post'] ) ) {
$args = array( 'post_parent' => (int) $GLOBALS['post']->post_parent );
} else {
return $kids;
}
} elseif ( is_object( $args ) ) {
$args = array( 'post_parent' => (int) $args->post_parent );
} elseif ( is_numeric( $args ) ) {
$args = array( 'post_parent' => (int) $args );
}
$defaults = array(
'numberposts' => -1,
'post_type' => 'any',
'post_status' => 'any',
'post_parent' => 0,
);
$r = wp_parse_args( $args, $defaults );
$children = get_posts( $r );
if ( ! $children ) {
return $kids;
}
if ( ! empty( $r['fields'] ) ) {
return $children;
}
update_post_cache( $children );
foreach ( $children as $key => $child ) {
$kids[ $child->ID ] = $children[ $key ];
}
if ( $output == OBJECT ) {
return $kids;
} elseif ( $output == ARRAY_A ) {
$weeuns = array();
foreach ( (array) $kids as $kid ) {
$weeuns[ $kid->ID ] = get_object_vars( $kids[ $kid->ID ] );
}
return $weeuns;
} elseif ( $output == ARRAY_N ) {
$babes = array();
foreach ( (array) $kids as $kid ) {
$babes[ $kid->ID ] = array_values( get_object_vars( $kids[ $kid->ID ] ) );
}
return $babes;
} else {
return $kids;
}
}