Yazılarla ilgili özel bilgilerin (önizleme, okunma sayısı vs.) takibinde kullanılan eklentilerin çoğu özel alanları kullanmaktadır. Eklentiler değerleri özel alanlara kaydetmekte ve buralardan alıp, kullanmaktadırlar. Bunun en büyük faydası WP'nin önbellekleme sisteminden yararlanabilmektir şüphesiz. Yazımda özel alanları eklentimiz içerisinde nasıl ekleyebilir, silebilir ve güncelleyebilirizin cevabını bulabilirsiniz.
Eklentinizde özel alanları kullanırken üç işlem yaparız bunlar; özel alanı ekleme, silme ve güncellemedir. Bu işlemler için WordPress bize üç fonksiyon sunmaktadır, bunlar add_post_meta(), delete_post_meta() ve update_post_meta() fonksiyonlarıdır. Aşağıda bu fonksiyonlarla ve kullanımlarıyla ilgili bilgiye ulaşabilirsiniz.
add_post_meta()
ID'si bilinen bir yazıya özel alan eklemek için kullanılır. Genel kullanımı:
- <?php add_post_meta($post_id, $meta_key, $meta_value, $unique); ?>
Örnek Kullanımlar
Varsayılan Kullanım
- <?php add_post_meta(68, 'onizleme', 'yazi68_onizleme.jpg'); ?>
Yazı ID'si 68 olan yazıya 'onizleme' anahtarıyla, değeri 'yazi68_onizleme.jpg' olan bir özel anahtar ekler.
Tekil Bir Özel Alan Eklemek
Eğer eklemek istediğiniz özel alan daha önce varsa ve bu özel alandan bir tane daha eklemek istemiyorsanız (hatırlayınız, aynı özel alandan bir yazıya birden fazla eklenebilir), bu durumda add_post_meta fonksiyonuna dördüncü bir parametre ($unique) daha girmelisiniz.
- <?php add_post_meta(7, 'okunmasayisi', 55, true); ?>
Eğer daha önceden 7 ID'li yazıya ait 'okunmasayisi' isimli bir özel alan varsa, bu durumda yeni bir 'okunmasayisi' alanı eklenmeyecektir, ayrıca da güncelleme yapılmayacaktır. Bu nedenle eklentilerinizde hataya yol açmamak için aşağıdaki kodu kullandığınızda 'okunmasayisi' alanını her yazı için bir kere oluşturabilirsiniz.
- if (!update_post_meta(7, 'okunmasayisi', 55)) add_post_meta(7, 'okunmasayisi', 55))
Bu kod ile eğer 7 ID'li yazının 'okunmasayisi' isimli alanı varsa bunun değerini 55 olacak şekilde güncelledik. Eğer yazının böyle bir alanı yoksa (güncelleme işlemi başarısız olmasından anladık) değeri 55 olan 'okunmasayisi' alanını eklemiş olduk.
Yazının Özel Alanına Birden Fazla Değer Eklemek
Bu işlem için tek yapmanız gereken, fonksiyonu birden fazla kez çalıştırmaktır.
- <?php add_post_meta(68, 'ozelalan', '47'); ?>
- <?php add_post_meta(68, 'ozelalan', '682'); ?>
- <?php add_post_meta(68, 'ozelalan', 'Ne olacak bu yazının hali'); ?>
- ...
Gizli Bir Özel Alan Eklemek
Yukarıdaki yöntemlerle eklediğiniz özel alanlar, yazı yazma ekranındaki, özel alanlar sekmesindeki açılır kutuda listeleneceklerdir. Eğer eklediğiniz özel alanın burada listelenmesini istemiyorsanız, fonksiyonu kullanırken özel alan adlarının başına _ (alt çizgi) eklemeniz yeterli olacaktır. Yani 'ozelalan' isimli alanın adını '_ozelalan' olarak yazarsanız, bu özel alan açılır listede görüntülenmeyecektir.
- <?php add_post_meta(68, '_ozelalan', 'Alanın değeri', true); ?>
Koduyla, tekil, gizli, '_ozelalan' isimli bir özel alan eklemiş olduk.
Fonksiyon Parametreleri
$post_id: Özel alan eklenmek istenen yazının ID'si. Loop içerisinde $post->ID değişkeni kullanılabilir.
$meta_key: Özel alanın anahtar adı.
$meta_value: Özel alanın değeri.
$unique: Parametre true ya da false değerlerini alabilir. True değeri verildiğinde, eğer daha önceden yazıya ait böyle bir özel alan varsa, bu durumda yenisi eklenmeyecektir. Varsayılan false.
delete_post_meta()
ID'si bilinen bir yazının, istenilen özel alanlarını silmek için kullanılır. Genel kullanımı:
- <?php delete_post_meta($post_id, $key, $value); ?>
Örnek Kullanımlar
Varsayılan Kullanım
- <?php delete_post_meta(76, 'onizleme', 'yazi76_onizleme.jpg'); ?>
Yazı ID'si 76 olan yazının 'yazi76_onizleme.jpg' değerine sahip, 'onizleme' isimli özel alanını siler. Eğer aynı isimde ancak farklı değerde özel alanlar olsaydı, diğerleri silinmeyecekti.
Yazıdan Özel Alanın Tamamını Silmek
- delete_post_meta(88, 'iliskiliyazilar');
ID'si 88 olan yazının 'iliskiliyazilar' isimli bütün özel alanlarını siler.
Belli Özel Alanları Bütün Yazılardan Silmek
Özel alanları kullanan bir eklenti yazıyorsunuz ve eklentinize Kaldırma (Uninstall) özelliği (WP 2.7 ile birlikte eklentilerde kullanmamız gerekebilecek) katmak istiyorsunuz. Bu işlemin aşamalarından birisi de bütün yazılardan, eklentinin, eklediği bütün özel alanları silmek olsun. Bunu gerçekleştirmek için aşağıdaki kod yapısını kullanabilirsiniz.
- <?php
- $allposts = get_posts('numberposts=0&post_type=post&post_status=');
- //Bütün yazıların bilgilerini al
- foreach( $allposts as $postinfo) {
- //Her bir yazı için aşağıdaki işlemleri yap.
- delete_post_meta($postinfo->ID, 'ozelalan1');
- delete_post_meta($postinfo->ID, 'ozelalan2');
- }
- ?>
Eğer 'ozelalan2' özel alanının değeri 'Ömer Seyfettin' olanları dışındakileri silmek istiyorsanız bu durumda kodu aşağıdaki gibi kullanmalısınız.
- <?php
- $allposts = get_posts('numberposts=0&post_type=post&post_status=');
- foreach( $allposts as $postinfo) {
- delete_post_meta($postinfo->ID, 'ozelalan1');
- $yazarlar = get_post_meta( $postinfo->ID, 'ozelalan2' );
- foreach( $yazarlar as $yazar ) {
- if( $yazar != "Ömer Seyfettin" )
- delete_post_meta($postinfo->ID, 'post_inspiration', $value);
- }
- }
- ?>
Yaptığınız eklentide yazılarla ilişkili diğer yazıların ID'lerini özel alan olarak yazıya eklediniz ve diyelim ki ID'si 185 olan yazıyı sildiniz ve şimdi de bütün yazılardan değeri 185 olan 'iliskiliyazilar' özel alanını sileceksiniz. Bunun için aşağıdaki kodu kullanabilirsiniz:
- <?php
- $allposts = get_posts('numberposts=0&post_type=post&post_status=');
- foreach( $allposts as $postinfo) {
- delete_post_meta($postinfo->ID, 'iliskiliyazilar', '185');
- }
- ?>
Fonksiyon Parametreleri
$post_id: Özel alanı silinecek yazı ID'si.
$key: Silinecek özel alanın anahtar adı.
$value: (opsiyonel) Silinmek istenen özel alanın değeri. Eğer boş bırakılırsa, anahtar adı verilen bütün özel alanlar silinir. Sadece değeri bilinen bir özel alan silinmek isteniyorsa, bu değer buraya yazılmalıdır.
update_post_meta()
Yazıların varolan özel alanlarının değerlerini güncellemek için kullanılır. Eğer güncelleme başarılı olmuşsa true olmamışsa false (genelde olmayan alanlar güncellenmek istendiğinde) değerini döndürür. Genel kullanımı:
- <?php update_post_meta($post_id, $meta_key, $meta_value, $prev_value); ?>
Örnek Kullanımlar
Varsayılan Kullanım
- <?php update_post_meta(76, 'onizleme', 'yazi76_yeni_onizlemeresmi.jpg'); ?>
Yazı ID'si 76 olan yazının 'onizleme' isimli özel alanının değerini 'yazi76_yeni_onizlemeresmi.jpg' olarak değiştirir.
Diğer Kullanımlar
Diyelim ki 76 ID'li yazının 4 tane özel alanı var, isim ve değerleri ise şöyle olsun;
[alan1] => 'Mahmut'
[alan1] => 'Armut'
[alan2] => 'Mehmet'
[onizleme] => 'onizleme_resmi.jpg'
'alan2' nin değerini 'Ahmet' olarak değiştirmek için;
- <?php update_post_meta(76, 'alan2', 'Ahmet'); ?>
Değeri 'Armut' olan 'alan1' özel alanının değerini 'Angut' ile değiştirmek için;
- <?php update_post_meta(76, 'alan1', 'alan1', 'Armut'); ?>
Özel alanların son hali şu şekilde olacak;
[alan1] => 'Mahmut'
[alan1] => 'Angut'
[alan2] => 'Ahmet'
[onizleme] => 'onizleme_resmi.jpg'
Not: Bu fonksiyon verilen kriterlere uyan ilk özel alanı günceller.
Yazıya (ID=76) ait 'alan1' isimli özel alanın bütün değerlerini 'İsim Yok' yapmak için aşağıdaki kodu kullanabilirsiniz.
- <?php
- $alan1_degerleri = get_post_custom_values('alan1', 76);
- foreach ( $alan1_degerleri as $deger )
- update_post_meta(76, 'alan1', 'İsim Yok', $deger);
- ?>
Fonksiyon Parametreleri
$post_id: Özel alanın ait olduğu yazı ID.
$meta_key: Değiştirilecek alanın anahtar adı.
$meta_value: Alanın yeni değeri.
$prev_value: (Opsiyonel) Alanın önceki değeri. Yazıya ait aynı isimde birden fazla özel alan varsa ve değerini bildiğiniz bir özel alanı güncellemek istiyorsanız, bu durumda bu parametreyi de girmelisiniz, aksi halde ismi uyan ilk özel alan güncellenir.
Kaynaklar: add_post_meta(), delete_post_meta(), update_post_meta()
Bu yazının kısa bağlantısı http://www.yakupgovler.com/?p=393.
Yazılarımı RSS aboneliği ile takip edebilir, yeni yazılarıma kolaylıkla ulaşabilirsiniz. Bunun için ise RSS adresimi kullanabilirsiniz.
Tarih: 26 Ekim 2008 Saat: 10:50
[...] eklentiler içerisinde yönetilmelerini sağlayacak bazı fonksiyonlar da vardır. Bunlar: add_post_meta, delete_post_meta, [...]
Tarih: 29 Ekim 2008 Saat: 16:58
[...] Kodlar içerisinde geçen WordPress fonksiyonlarıyla ilgili bilgilere; add_action, get_post_meta, add_post_meta, update_post_meta, delete_post_meta bağlantılarını inceleyebilirsiniz. Kodların tamamını [...]
Tarih: 19 Şubat 2009 Saat: 04:33
Çok güzel anlatmışsınız teşekkürler fakat xx özel alanındaki veriyi sayfaya nasıl echo edebilirim? değiştirmeden silmeden eklemeden sadece o değeri nasıl gösteririm get_post_meta yı bir fonksiyona eşitlemem yeterli olurmu ?
Tarih: 19 Şubat 2009 Saat: 04:38
evet yeterli oluyormuş. 🙂 postratings kullanıyorum avarage değeri yıldızlar olmadan rakam olarak göstermeyi düşünüyordum artık yapabilirim. Hatta eklentilerin sabit özelliklerini kullanmadan bir dolu şey yapılırmış bu metalarla.. iyi ki öğrendim, çok işime yarayacak. tekrar teşekkürler.
Tarih: 18 Mart 2009 Saat: 23:42
ID'si belirli olan yazılar yerine herhangi bir kategoride ki 5 yada 10 yazı için kullanamaz mıyız ?
Tarih: 18 Mart 2009 Saat: 23:45
İlgili fonksiyon yazı ID'sine göre çekiyor. Ancak şöyle bir şey yapabilirsiniz.
Kategorideki yazılardan istediğiniz kadarını çekersiniz, ardından bir döngü içerisinde bu fonksiyonu çağırırsınız. O şekilde kullanabilirsiniz.
Ama fonksiyon_adı (kategori_id) şeklinde hazır bir çözüm yok.