PHP ile WordPress’e Yazı Ekleme ve Güncelleme İşlemleri

WordPress hayatımızın her yerinde. Projelerinizde PHP ile WordPress’e yazı eklemek isteyebilirsiniz. Bunun için farklı yöntemler mevcut. Ben wp_post() adında bir fonksiyon oluşturarak, daha önce aynı başlıkta bir içerik var ise onun güncellenmesini sağlayan bir fonksiyon oluşturdum.

Öncelikle şunu belirtmek isterim ki, wordpress’de güncellenen her içerik ayrı bir kayıt olarak veritabanına versiyon halinde eklenmektedir. Bunun önüne geçmek için WP_POST_REVISIONS sabit tanımlamasını 0 olarak atayacağız. Başlayalım;

require "wp-load.php";
define('WP_POST_REVISIONS', 0);
date_default_timezone_set('Europe/Istanbul');

WordPress üzerinde çalışacağımız için, wp-load.php ile aynı dizinde çalışan dosyamızda, wp-load.php dosyasını dahil ettik. Sonrasında WP_POST_REVISIONS için değeri 0‘a eşitleyerek, yapılacak güncellemelerin veritabanında ekstra yer tutmasını engelledik. Yukarıda da bahsettiğim gibi bu tanımlamayı yapmazsanız, her güncelleme veritabanında ekstra bir kayıt daha oluşturacaktır.
(bkz: WordPress Page-Post Revisions)

Bir fonksiyon içerisinde bu işlemleri yapacaksanız fonksiyon içinden $wpdb değişkenine erişmeniz gerekmektedir.

function wp_post(){
   /* ..... */
   global $wpdb;
   /* ..... */
}

Gerekli Parametreler

$new_post = array(
     'post_title' => $post_title, // yazı başlığı
     'post_content' => $post_content, // içerik
     'post_status' => 'publish', // yayın durumu 
     'post_date' => date('Y-m-d H:i:s') , // yayın tarihi
     'post_author' => 1, // yazar id
     'post_type' => 'post', // post/page - yazı veya sayfa
     'post_category' => array(0), // kategori id'leri
     'post_name' => $permalink // permalink
);

Eklenecek içeriği bir dizi içerisinde topladık. wp_update_post ve wp_insert_post fonksiyonları bu şekilde göndermemizi istiyor. Bazı alanlar zorunlu değil elbette, ben kullandığım şekilde paylaşıyorum. Hangi parametreleri gönderebildiğinizi buradan inceleyebilirsiniz.

Ekleme ve Güncelleme İşlemleri

Önce oluşturacağımız yazının başlığının daha önce eklenip eklenmediğini kontrol ediyoruz. Aynı başlıkta başka bir yazı var ise onu güncelliyoruz, yok ise yenisini ekliyoruz.

$query = $wpdb->prepare('SELECT ID FROM ' . $wpdb->posts . ' WHERE post_title = %s', $post_title);
$wpdb->query($query);

if ($wpdb->num_rows){
   $post_id = $wpdb->get_var($query);
   $meta = get_post_meta($post_id, 'times', true);
   $meta++;
   update_post_meta($post_id, 'times', $meta);
   $new_post["ID"] = $post_id;
   wp_update_post($new_post);
}else{
   $post_id = wp_insert_post($new_post);
   add_post_meta($post_id, 'times', '1');
}

Öne Çıkan Görsel Ekleme

Eklediğimiz veya güncellediğimiz yazımız/sayfamız için sunucudaki veya uzak bir sunucudaki görseli öne çıkan görsel olarak ayarlayabiliriz. Bunun için $file değişkenine dosyanın yolunu belirtmemiz, ve ekleme/güncelleme işlemi sonucunda elimizdeki $post_id ve $attachment_id değişkenlerini set_post_thumbnail() fonksiyonu ile göndermemiz yeterli olmaktadır.

$file = "image.png";
if (@file_get_contents($file)){

    $filename = basename($file);
    $upload_file = wp_upload_bits($filename, null,file_get_contents($file));

    if (!$upload_file['error']){
       $wp_filetype = wp_check_filetype($filename, null);
       $attachment = array(
          'post_mime_type' => $wp_filetype['type'],
          'post_parent' => $parent_post_id,
          'post_title' => preg_replace('/\.[^.]+$/', '', $filename) ,
          'post_content' => '',
          'post_status' => 'inherit',
          'post_type' => 'page'
       );

    $attachment_id = wp_insert_attachment($attachment, $upload_file['file'], $parent_post_id);
    if (!is_wp_error($attachment_id)){
          require_once (ABSPATH . "wp-admin" . '/includes/image.php');
          $attachment_data = wp_generate_attachment_metadata($attachment_id, $upload_file['file']);
          wp_update_attachment_metadata($attachment_id, $attachment_data);
     }
}
set_post_thumbnail($post_id, $attachment_id);
}

Google Sitemap Ping İşlemi

Bütün bunlar bittikten sonra site haritasını Google’a bildirmek isteyebilirsiniz. Bu durumda da aşağıdaki kod parçası işinizi görecektir.

file_get_contents('http://www.google.com/webmasters/sitemaps/ping?sitemap=' . get_site_url() . '/sitemap.xml');

İşte bu kadar. Yardımcı olabileceğim herhangi bir konu olursa, yorum formu üzerinden bildirebilirsiniz.

Emeklerinizin karşılığını en kısa sürede almanız dileğiyle, hoşçakalın.