11 Ekim 2008

WordPress wp_insert_post Fonksiyonu

WordPress Yorum Ekle

İleriki zamanda otomatik olarak siteye yazı ekleyen bir eklenti yapmayı planlıyordum. Bunu nasıl yapabilirim diye araştırırken WordPress.org'da wp_insert_post fonksiyonunu anlatan şu yazıyı buldum. Yazımın devamında gerçekten her derde deva olacak wp_insert_post fonksiyonunu anlatan bu yazının çevirisini bulabilirsiniz.

Açıklama

Bu fonksiyon veritabanına yazı ve sayfa ekler. Fonksiyon değerleri kontrol eder, temizler, tarih/saat gibi eksik değerleri tamamlar vs. Paramatreleri bir nesne olarak alır, eklenen yazının/sayfanın ID'sini döndürür. Eğer hata oluşmuşsa 0 değerini döndürür.

Kullanım

<?php wp_insert_post( $post ); ?>

Örnek

wp_insert_post() fonksiyonunu çağırmadan önce bir yazı/sayfayı oluşturan gerekli elementleri belirleyen bir dizi tanımlamak gerekmektedir. Fonksiyon bu elementlerden bazıları verilmese bile bunları varsayılan değerlerle doldurmakta, ancak kullanıcının en azından başlık ve yazı içeriğini belirtmesi gerekmektedir, aksi halde veritabanı kaydı yapılamayacaktır.
Kullanıcı aşağıda verilen elementlerden daha fazlasını belirtebilir. Buradaki elementler veritabanındaki, wp_posts tablosundaki alan isimleriyle aynı olmalıdır.

  1. // Yazı nesnesini oluştur
  2.   $my_post = array();
  3.   $my_post['post_title'] = 'My post';
  4.   $my_post['post_content'] = 'This is my post.';
  5.   $my_post['post_status'] = 'publish';
  6.   $my_post['post_author'] = 1;
  7.   $my_post['post_category'] = array(0);
  8.  
  9. // Yazıyı veritabanına ekle
  10.   wp_insert_post( $my_post );
  11.  
  12. //Bu kod denenmiştir, çalıştığı görülmüştür

Fonksiyonun kendisinde tanımlanmış varsayılan liste aşağıdaki gibidir.

  1. $defaults = array(
  2.   'post_status' => 'draft',
  3.   'post_type' => 'post',
  4.   'post_author' => $user_ID,
  5.   'ping_status' => get_option('default_ping_status'),
  6.   'post_parent' => 0,
  7.   'menu_order' => 0,
  8.   'to_ping' =>  '',
  9.   'pinged' => '',
  10.   'post_password' => '',
  11.   'guid' => '',
  12.   'post_content_filtered' => '',
  13.   'post_excerpt' => ''
  14. );

Kategoriler

Yazı kategorileri veritabanındaki kategori ID'leriyle uyuşan bir tamsayı dizisiyle bildirilmelidir. Bir tane kategori dahi olsa dizi olarak gösterilmelidir. Kategori belirtilmemişse, yazı varsayılan kategoriye (örneğin Kategorilenmemiş) eklenir.

Parametreler

$post
Fonksiyonun tek parametresidir. Bu parametre ile bir yazıyı oluşturan unsurlar dizi olarak fonksiyona sunulur. Bu parametre ile veritabanındaki wp_posts tablosundaki alan adları arasında birebir ilişki bulunmaktadır.
Aşağıda bu parametre ile bildirilebilecek bütün dizi anahtarlarının açıklamaları bulunmaktadır. Bunlardan varsayılan değerlerini kullanmak istediklerinizi, kullanmayarak diziyi küçültebilirsiniz.

  1. $post = array(
  2.   'comment_status' => [ 'closed' | 'open' ] // 'closed' yorumlara kapalı.
  3.   'ID' => [ <post id> ] //Var olan bir yazı güncelleniyor mu?
  4.   'menu_order' => [ <order> ] //Yazı bir sayfaysa menü sıralaması.
  5.   'page_template => [ <template file> ] //Sayfa için şablon dosyası.
  6.  'ping_status' => [ ? ] //Ping durumu?
  7.  'pinged' => [ ? ] //?
  8.  'post_author' => [ <user ID> ] //Yazarın ID numarası, Varsayılan admin.
  9.  'post_category => [ array(<category id>, <...>) ] //Yazı kategorileri.
  10.   'post_content' => [ <the text of the post> ] //Yazının tam içeriği.
  11.   'post_date' => [ Y-m-d H:i:s ] //Yazının yazıldığı zaman.
  12.   'post_date_gmt' => [ Y-m-d H:i:s ] //Yazının yazıldığı yerel zaman.
  13.   'post_excerpt' => [ <an excerpt> ] //Yazı için özet.
  14.   'post_parent' => [ <post ID> ] //Sayfanın ana sayfası.
  15.   'post_password' => [ ? ] //Yazı Şifresi?
  16.   'post_status' => [ 'draft' | 'publish' | 'pending' ] //Yeni yazının yayın durumu draft=taslak, publish=yayınlanmış.
  17.   'post_title' => [ <the title> ] //Yazının başlığı.
  18.   'post_type' => [ 'post' | 'page' ] //Yazının türü, post=yazı, page=sayfa.
  19.   'tags_input' => [ '<tag>, <tag>, <...>' ] //etiketler.
  20.   'to_ping' => [ ? ] //?
  21. );

wp_insert_post fonksiyonu veritabanına ekleme işlemini başarıyla tamamladığında yazı ID'sini döndürür. Aksi halde 0 dönecektir.

  1. if (wp_insert_post($my_post)) {
  2.   echo "Yazı Eklendi";
  3.  } else {
  4.   echo "Yazı Eklenemedi";
  5.  }

İlişkili Fonksiyonlar

wp_update_post(), wp_delete_attachment(), wp_get_attachment_url(), wp_insert_attachment()

Yazının orijinaline buradan ulaşabilirsiniz. Örnek kodları almak için kodların üzerindeki "Kodu Al" bağlantısına tıklayıp, açılan pencereden kodu alın.


Bu yazının kısa bağlantısı http://www.yakupgovler.com/?p=349.

Yazılarımı RSS aboneliği ile takip edebilir, yeni yazılarıma kolaylıkla ulaşabilirsiniz. Bunun için ise RSS adresimi kullanabilirsiniz.


“WordPress wp_insert_post Fonksiyonu” yazısı için 5 Yorum

Bu yazıya yapılan yorumları dilerseniz, ( RSS 2.0 ) beslemesini kullanarak takibe alabilirsiniz.

  1. eylultoprak dedi ki:

    Burdan şunu çıkartıyorum hocam; artık giriş yapmadan mysql yazıyı dış bir ekrandan girdirmek mümkün olacak gibi görünüyor. Tabi bunu captcha (Yanlış yazmış olabilirim) ile ilişkilendirmek lazım. İstersen wp-config.php içeriği ilgili dosyaya yazdıra bilir de çekebilir istersen bir sayfa tasarımı olarak temaya da bağlayıp göstere biliriz..

    Yani güzel oldu bu ya.. =) Bir çok kişi bu olayı form aracılığı ile yaptırma taraftarıydı yada admin paneli kısıtlamak ile yaptırmak istiyordu.. Bu olayı default temaya uyarlayıp sayfa şablonu şeklinde yapabilirsen bir dünya insan yararlanır =) Ki bu durumda bu çok basit sanırım?

    Tebrik ederim hocam böyle birşey olursa =)

  2. gevv dedi ki:

    Teşekkürler Abi bende az çok sistemji çözmeye çalışıyorum fonksiyonların ne işe yaradığını anlatan yazılarınız çok faydalı

    @eylultoprak acaba yeni bir wp bot geliyor olabilirmi 🙂

  3. Serdar dedi ki:

    Merhaba; Öncelikle php konusunda çok yeniyim, yanlış ya da bilinmesi gereken çok basit şeyleri bilmiyor olabilirim bu yüzden şimdiden kusura bakmayın.

    Bu kodları Wp'nin tema dosyalarının içerisine gömerek mi çalıştırıyoruz.

  4. Yakup Gövler dedi ki:

    Eklentilerde ve Tema içerisinde kullanılabilir. Ancak ne yaptığınızı bilmiyorsanız dokunulmaması gereken bir fonksiyon.

  5. Sercan dedi ki:

    tam zamanında rastladım bu çevirinize 🙂