BU DERSİN BAŞLIKLARI
wp_get_attachment_metadata( int $ortam_dosyasinin_id_degeri, bool $filtrelenmesin = false )
Açıklaması:
wp_get_attachmet_metadata()
fonksiyonu, ID değeri bilinen bir ortam dosyası için, veritabanında kayıtlı olan meta bilgilerini getirir.
Parametreleri:
Fonksiyon, biri zorunlu iki parametre ile çalışmaktadır. Bu parametreleri daha yakından inceleyelim:
$ortam_dosyasinin_id_degeri
(int – Zorunludur) Meta verilerini getirmek istediğimiz ortam dosyasının ID değeridir.
$filtrelenmesin
(bool – Zorunlu değildir) Bu argümana true
değeri verirsek, döndürdüğü değeri, add_filter()
fonksiyonu ile filtreleme işlemlerine kapatmış oluruz. Varsayılan değeri false
olarak ayarlanmıştır.
Döndürdüğü Değer:
wp_get_attachment_metadata()
fonksiyonu, verilen ID değerine ait bir içerik bulamazsa false
değerini döndürür. Herşey yolunda giderse, fonksiyon, 5 elemanlı bir dizi döndürür.
Bir ortam dosyası için döndürdüğü değeri tanımak amacıyla, ID numarası 1020 olan bir resim için, wp_get_attachment_metadata()
fonksiyonu, şu şekilde ekrana bastırılmıştır:
var_dump( wp_get_attachment_metadata(1020) );
Sonuçta, bir resim dosyası için, wp_get_attachment_metadata()
fonksiyonunun getirdiği bilgiler şöyledir (Yorum kısımları sonradan eklenmiştir.):
array(5) {
// Gerçek boyut bilgileri
["width"]=> int(4128)
["height"]=> int(2322)
["file"]=> string(32) "2019/06/benim-guzel-fotom.jpeg"
["sizes"]=> array(5) {
["thumbnail"]=> array(4) { // Küçük resim boyutu bilgileri
["file"]=> string(32) "benim-guzel-fotom-150x150.jpeg"
["width"]=> int(150) ["height"]=> int(150)
["mime-type"]=> string(10) "image/jpeg" }
["medium"]=> array(4) { // Orta boyut bilgileri
["file"]=> string(32) "benim-guzel-fotom-300x169.jpeg"
["width"]=> int(300)
["height"]=> int(169)
["mime-type"]=> string(10) "image/jpeg" }
["medium_large"]=> array(4) { // Orta-büyük boyut bilgileri
["file"]=> string(32) "benim-guzel-fotom-768x432.jpeg"
["width"]=> int(768)
["height"]=> int(432)
["mime-type"]=> string(10) "image/jpeg" }
["large"]=> array(4) { // Büyük boyut bilgileri
["file"]=> string(33) "benim-guzel-fotom-1024x576.jpeg"
["width"]=> int(1024) ["height"]=> int(576)
["mime-type"]=> string(10) "image/jpeg" }
["post-thumbnail"]=> array(4) {
["file"]=> string(33) "benim-guzel-fotom-1568x882.jpeg"
["width"]=> int(1568)
["height"]=> int(882)
["mime-type"]=> string(10) "image/jpeg" }
}
["image_meta"]=> array(12) { // Meta bilgileri
["aperture"]=> string(1) "2"
["credit"]=> string(0) ""
["camera"]=> string(8) "SM-A700F"
["caption"]=> string(0) ""
["created_timestamp"]=> string(10) "1546948256"
["copyright"]=> string(0) ""
["focal_length"]=> string(3) "4.2"
["iso"]=> string(3) "200"
["shutter_speed"]=> string(16) "0.03030303030303"
["title"]=> string(0) ""
["orientation"]=> string(1) "6"
["keywords"]=> array(0) { } }
}
Kaynak Kodu:
Dizini: wp-includes/post.php
function wp_get_attachment_metadata( $attachment_id = 0, $unfiltered = false ) {
$attachment_id = (int) $attachment_id;
if ( ! $post = get_post( $attachment_id ) ) {
return false;
}
$data = get_post_meta( $post->ID, '_wp_attachment_metadata', true );
if ( $unfiltered ) {
return $data;
}
/**
* Filters the attachment meta data.
*
* @since 2.1.0
*
* @param array|bool $data Array of meta data for the given attachment, or false
* if the object does not exist.
* @param int $attachment_id Attachment post ID.
*/
return apply_filters( 'wp_get_attachment_metadata', $data, $post->ID );
}
Örnek Kullanım:
Örnek kullanıma geçmeden önce, ortam dosyaları ile ilgili hatırlatmak istediğim bir kaç bilgi var:
Ortam Ayarları
WordPress, gerek editör ile gerekse yönetim panelinden Ortam->Yeni ekle sayfasını kullanarak, yeni bir resim yüklendiğinde, bu resmi 5 farklı boyutta kaydeder. Bu boyutların isimleri ve varsayılan genişlik (width) ve yükseklik (height) değerleri şöyledir:
- Küçük resim boyutu (
'thumbnail'
) – Genişlik: 150px, Yükseklik:150px - Orta boyut (
'medium'
) – Genişlik: 300px , Yükseklik: 300px - Orta-büyük boyutu (
'medium_large'
) – Genişlik: 768px, Yükseklik: esnek - Büyük boyut (
'large'
) – Genişlik: 1024px, Yükseklik: 1024px - Gerçek boyut (
'full'
) – Orijinal genişlik ve yükseklik değerleri
Peki bütün bu pixeller nereden geliyor ve nasıl değiştirilebilirler?
WordPress yönetim panelinde Ayarlar->Ortam sayfasına gidilerek, küçük resim boyutu, orta boyut ve büyük boyut için genişlik ve yükseklik değerlerini değiştirebiliriz:
Dikkatini çekmiştir, bu sayfada, orta-büyük resimler için bir ayar yok. Orta-büyük resimlerin boyutlarını değiştirmek için, temanızın functions.php
dosyasına şu kodu ekleyebilirsiniz:
update_option( 'medium_large_size_w', '768', true ); // Orta-büyük resimlerin genişlik değerini ayarlar
update_option( 'medium_large_size_h', '768', true ); // Orta-büyük resimlerin yükseklik değerini ayarlar
Herhangi bir resim boyutunu getirmek isterseniz, şu kodları kullanabilirsiniz:
get_option('thumbnail_size_w'); // Küçük boyuttaki resimlerin genişlik değerini getirir
get_option('thumbnail_size_h'); // Küçük boyuttaki resimlerin yükseklik değerini getirir
get_option('medium_size_w'); // Orta boyuttaki resimlerin genişlik değerini getirir
get_option('medium_size_h'); // Orta boyuttaki resimlerin yükseklik değerini getirir
get_option('medium_large_size_w'); // Orta-büyük boyuttaki resimlerin genişlik değerini getirir
get_option('medium_large_size_h'); // Orta-büyük boyuttaki resimlerin yükseklik değerini getirir
get_option('large_size_w'); // Büyük boyuttaki resimlerin genişlik değerini getirir
get_option('large_size_h'); // Büyük boyuttaki resimlerin yükseklik değerini getirir
Aşağıdaki örnek kodlar, WordPress localhost kurulumunda test edilmiştir. Kodlarda göreceğiniz url değerlerinin, “localhost/benimsitem/” kısmının sebebi budur. Bu url değerleri, sizin temanızda farklı olacaktır.
Döngü içinde kullanımı:
wp_get_attachment_metadata()
fonksiyonunun, WordPress döngüsü içindeki kullanımına örnekler verilmiştir.
Örnek-1
Döngü içinde, sırası gelen yazı için yüklenmiş bütün resimlerin gerçek boyutları ile bir foto galeri oluşturuyoruz:
<?php if ( have_posts() ) : ?>
<?php while ( have_posts() ) : the_post(); ?>
<!-- wp_get_attachment_metadata() İçin Döngü İçinde Kullanım Örneği -FOTO GELERİ -->
<?php
// Döngüde sırası gelen yazı için yüklenen ortam dosyalarının dizisini oluşturuyoruz
$argumanlar = array(
'post_parent' => get_the_ID(),
'post_type' => 'attachment',
);
$resimlerin_dizisi = get_posts( $argumanlar );
?>
<?php
// WordPress ortam dosyalarını uploads klasörüne yükler. Bu klasörün, yüklenme tarihine göre url değerine şu şekilde ulaşılır:
$ortam_dosyalarinin_yuklendigi_klasor = wp_upload_dir();
$ortam_dosyalarinin_yuklendigi_klasor = $ortam_dosyalarinin_yuklendigi_klasor['baseurl'];
?>
<?php if ( $resimlerin_dizisi ) { ?>
<div class="galeri yazi-id-<?php the_ID(); ?>">
<?php foreach ( $resimlerin_dizisi as $resim ) { ?>
<?php $meta_data = wp_get_attachment_metadata( $resim->ID, false ); ?>
<div class="resim">
<img src="<?php echo $ortam_dosyalarinin_yuklendigi_klasor.'/'.$meta_data["file"]; ?>" />
</div><!-- /.resim -->
<?php } ?>
</div> <!-- /.galeri -->
<?php } ?>
<!-- /FOTO GALERİ -->
<?php endwhile; ?>
<?php endif; ?>
Yukarıdaki kod, temanızda aşağıdaki HTML kodunu üretir:
<!-- 1922 sayısı ekrandaki yazının ID değeridir -->
<div class="galeri yazi-id-1922">
<div class="resim">
<img src="http://localhost/benimsitem/wp-content/uploads/2019/06/tarla.jpg">
</div><!-- /.resim -->
<div class="resim">
<img src="http://localhost/benimsitem/wp-content/uploads/2019/06/sera.jpg">
</div><!-- /.resim -->
<div class="resim">
<img src="http://localhost/benimsitem/wp-content/uploads/2019/06/balonlar-3.jpg">
</div><!-- /.resim -->
<div class="resim">
<img src="http://localhost/benimsitem/wp-content/uploads/2019/06/balonlar-2.jpg">
</div><!-- /.resim -->
<div class="resim">
<img src="http://localhost/benimsitem/wp-content/uploads/2019/06/balonlar.jpg">
</div><!-- /.resim -->
</div> <!-- /.galeri -->
Örnek-2
Döngü içinde, sırası gelen yazı için yüklenmiş bütün resimlerin küçük boyutları ('thumbanil'
) ile bir foto galeri oluşturuyoruz:
<?php if ( have_posts() ) : ?>
<?php while ( have_posts() ) : the_post(); ?>
<!-- wp_get_attachment_metadata() İçin Döngü İçinde Kullanım Örneği -FOTO GELERİ -->
<?php
// Döngüde sırası gelen yazı için yüklenen ortam dosyalarının dizisini oluşturuyoruz
$argumanlar = array(
'post_parent' => get_the_ID(),
'post_type' => 'attachment',
);
$resimlerin_dizisi = get_posts( $argumanlar );
?>
<?php
// WordPress ortam dosyalarını uploads klasörüne yükler. Bu klasörde, yüklenme tarihine göre, alt kalsörlerin url değerine şu şekilde ulaşılır:
$ortam_dosyalarinin_yuklendigi_klasor = wp_upload_dir();
$ortam_dosyalarinin_yuklendigi_klasor = $ortam_dosyalarinin_yuklendigi_klasor['url'];
?>
<?php if ( $resimlerin_dizisi ) { ?>
<div class="galeri yazi-id-<?php the_ID(); ?>">
<?php foreach ( $resimlerin_dizisi as $resim ) { ?>
<?php $meta_data = wp_get_attachment_metadata( $resim->ID, false ); ?>
<div class="resim">
<img src="<?php echo $ortam_dosyalarinin_yuklendigi_klasor.'/'.$meta_data["sizes"]["thumbnail"]["file"]; ?>" />
</div><!-- /.resim -->
<?php } ?>
</div> <!-- /.galeri -->
<?php } ?>
<!-- /FOTO GALERİ -->
<?php endwhile; ?>
<?php endif; ?>
Yukarıdaki kod, temanızda aşağıdaki HTML kodunu üretir:
<!-- 1922 sayısı ekrandaki yazının ID değeridir -->
<div class="galeri yazi-id-1922">
<div class="resim">
<img src="http://localhost/benimsitem/wp-content/uploads/2019/06/tarla-150x150.jpg">
</div><!-- /.resim -->
<div class="resim">
<img src="http://localhost/benimsitem/wp-content/uploads/2019/06/sera-150x150.jpg">
</div><!-- /.resim -->
<div class="resim">
<img src="http://localhost/benimsitem/wp-content/uploads/2019/06/balonlar-3-150x150.jpg">
</div><!-- /.resim -->
<div class="resim">
<img src="http://localhost/benimsitem/wp-content/uploads/2019/06/balonlar-2-150x150.jpg">
</div><!-- /.resim -->
<div class="resim">
<img src="http://localhost/benimsitem/wp-content/uploads/2019/06/balonlar-150x150.jpg">
</div><!-- /.resim -->
</div> <!-- /.galeri -->
Döngü dışında kullanım:
Döngü içinde kullandığımızda, wp_get_attachment_metadata()
fonksiyonu ve beraberinde kullandığımız bütün kodlar, her bir yazı için ayrı ayrı uygulanacaktır. Bunu istemiyorsak, belli bir yazı için yüklenen bir resmin ya da resimlerin gösterilmesini istiyorsak, bu fonksiyonu aşağıdaki şekilde kullanabiliriz:
Örnek-1
Döngü dışında, ID numarası 1922 olan yazı için yüklenmiş bütün resimlerin orta boyutları ('medium'
) ile bir foto galeri oluşturuyoruz:
<!-- Döngü dışındakullanım örneği -->
<?php
// Döngüde sırası gelen yazı için yüklenen ortam dosyalarının dizisini oluşturuyoruz
$argumanlar = array(
'post_parent' => 1922,
'post_type' => 'attachment',
);
$resimlerin_dizisi = get_posts( $argumanlar );
?>
<?php
// WordPress ortam dosyalarını uploads klasörüne yükler. Bu klasörde, yüklenme tarihine göre, alt kalsörlerin url değerine şu şekilde ulaşılır:
$ortam_dosyalarinin_yuklendigi_klasor = wp_upload_dir();
$ortam_dosyalarinin_yuklendigi_klasor = $ortam_dosyalarinin_yuklendigi_klasor['url'];
?>
<?php if ( $resimlerin_dizisi ) { ?>
<div class="galeri yazi-id-1922">
<?php foreach ( $resimlerin_dizisi as $resim ) { ?>
<?php $meta_data = wp_get_attachment_metadata( $resim->ID, false ); ?>
<div class="resim">
<img src="<?php echo $ortam_dosyalarinin_yuklendigi_klasor.'/'.$meta_data["sizes"]["medium"]["file"]; ?>" />
</div> <!-- /.resim -->
<?php } ?>
</div> <!-- /.galeri -->
<?php } ?>
Yukarıdaki kod, temanızda aşağıdaki HTML kodunu üretir:
<!-- 1922 sayısı ekrandaki yazının ID değeridir -->
<div class="galeri yazi-id-1922">
<div class="resim">
<img src="http://localhost/benimsitem/wp-content/uploads/2019/06/tarla-150x150.jpg">
</div><!-- /.resim -->
<div class="resim">
<img src="http://localhost/benimsitem/wp-content/uploads/2019/06/sera-150x150.jpg">
</div><!-- /.resim -->
<div class="resim">
<img src="http://localhost/benimsitem/wp-content/uploads/2019/06/balonlar-3-150x150.jpg">
</div><!-- /.resim -->
<div class="resim">
<img src="http://localhost/benimsitem/wp-content/uploads/2019/06/balonlar-2-150x150.jpg">
</div><!-- /.resim -->
<div class="resim">
<img src="http://localhost/benimsitem/wp-content/uploads/2019/06/balonlar-150x150.jpg">
</div><!-- /.resim -->
</div> <!-- /.galeri -->