Wordpress ile Özel Alanların (Custom Fields) Kullanımı
Türkiyede wordpress dışında pek fazla blog yazılımı kullanılmıyor sanırım. Malum biz de sitemizde kullanıyoruz ve şimdilik çok memnun kalmasak da idare ediyor. En azından istediğimiz şekilde müdahale edebilme şansımız oldukça yüksek. Orjinal kodun içine girip bazen değişiklik bazen ek yapsak da wordpress yazılar için "Özel Alanlar (Custom Fields)" adında güzel bir özellik barındırıyor.
Bu müdahalelerden biri de şu konuda da belirttiğimiz bir özelliği (Yazarlar dilerlerse kendi yazdıkları yazılara, kendi adsense reklam kodlarını ekleyebilirler.) üyelere sunmak için yapıldı. (Bu yazıda gördüğünüz gibi...)
Böyle bir özelliği, bizim gibi herkesin içerik girebildiği bir ortamda güvenli şekilde yapabilmek en önemli nokta. Çünkü adsense kodları hepinizin bildiği gibi javascript üzerinden gönderiliyor. Bu nedenle kullanıcılara ekledikleri içeriklere javascript kodlarını girmelerine izin vermek ilk akla gelen şey olsa da güvenlik nedeniyle asla düşünülmemesi ve yapılmaması gereken birşey.
Biz şöyle bir yol izledik: "Özel Alanlara" eklediğiniz "anahtar" ve "değer", "wp_postmeta" adlı tabloda o yazıya ait "id" ile birlikte kaydediliyor. Burdan yola çıkarak "adsense" adında bir anahtar kullanalım ve buna değer olarak herkesin kendi adsense kodunu(pub-xxxxxxx gibi) girsin dedik. Böylece anahtarı zaten baştan biz tanımlamış ve kullanıcının da değer olarak sadece metin girmesine izin vermiş olduk. Güvenlik problemimiz ilk aşamada bu şekilde giderilmiş oldu.
Sıra geldi girilen bu bilgilerin uygun biçimde değerlendirilip gösterilmesine. Bunun için yazıları gösteren fonksiyonun içine müdahale etmek gerekiyordu. "wp-includes" dizini içindeki "post-template.php" dosyasında bulunan "the_content" fonskiyonunu bulduk ve hemen altına şu kodları ekledik:
-
/* ADSENSE End - turker */
-
$adsense='';
-
if (is_single()) { // sadece yazıya ait sayfada mıyız kontrol edelim.
-
$uid=$post->post_author;
-
$pid=$post->ID;
-
if (!isset($wpdb)) $wpdb = new wpdb(DB_USER, DB_PASSWORD, DB_NAME, DB_HOST); // bu gerekli mi denemedim
-
-
// bu sorgu ile yazarın yayınladığı yazıda "adsense" anahtarı ile kaydetmiş olduğu değeri alıyoruz.
-
$r=$wpdb->get_row('SELECT wp_postmeta.meta_value as adsense FROM wp_posts, wp_postmeta '
-
."WHERE wp_posts.post_author = '$uid' AND wp_posts.post_type = 'post' AND wp_posts.post_status = 'publish' "
-
."AND wp_postmeta.meta_key = 'adsense' AND wp_postmeta.post_id = wp_posts.ID AND wp_posts.ID='$pid' "
-
."ORDER BY wp_posts.ID DESC LIMIT 0 , 1");
-
$adsense=htmlspecialchars(strip_tags(trim($r->adsense)));// yazaramaz kullanıcılar için önlem alıyoruz.
-
// gösterilecek reklamın kodlarını yerleştiriyoruz.
-
$adsense='<div style="margin-right: 5px; float: left;">
-
<script type="text/javascript">
-
google_ad_client = "'.$adsense.'";
-
google_ad_width = 250;
-
google_ad_height = 250;
-
google_ad_format = "250x250_as";
-
google_ad_type = "text_image";
-
google_color_border = "e6e6e6";
-
google_color_bg = "FFFFFF";
-
google_color_link = "467aa7";
-
google_color_text = "000000";
-
google_color_url = "0066cc";
-
</script>
-
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
-
</script></div>';
-
}
-
}
-
/* ADSENSE End - turker */
Artık herşey hazır olduğuna göre reklam kodunu yazıya iliştirdik mi herşey tamam olacak. Bunun için "the_content" fonksiyonun sonundaki "echo $content;" olan satırı "echo $adsense.$content;" olarak değiştiriyoruz. Hepsi bu kadar... Fonksiyonun son hali aşağıdaki gibidir.
-
function the_content($more_link_text = '(more...)', $stripteaser = 0, $more_file = '') {
-
/* ADSENSE End - turker */
-
$adsense='';
-
if (is_single()) { // sadece yazıya ait sayfada mıyız kontrol edelim.
-
$uid=$post->post_author;
-
$pid=$post->ID;
-
if (!isset($wpdb)) $wpdb = new wpdb(DB_USER, DB_PASSWORD, DB_NAME, DB_HOST); // bu gerekli mi denemedim
-
-
// bu sorgu ile yazarın yayınladığı yazıda "adsense" anahtarı ile kaydetmiş olduğu değeri alıyoruz.
-
$r=$wpdb->get_row('SELECT wp_postmeta.meta_value as adsense FROM wp_posts, wp_postmeta '
-
."WHERE wp_posts.post_author = '$uid' AND wp_posts.post_type = 'post' AND wp_posts.post_status = 'publish' "
-
."AND wp_postmeta.meta_key = 'adsense' AND wp_postmeta.post_id = wp_posts.ID AND wp_posts.ID='$pid' "
-
."ORDER BY wp_posts.ID DESC LIMIT 0 , 1");
-
$adsense=htmlspecialchars(strip_tags(trim($r->adsense)));// yazaramaz kullanıcılar için önlem alıyoruz.
-
// gösterilecek reklamın kodlarını yerleştiriyoruz.
-
$adsense='<div style="margin-right: 5px; float: left;">
-
<script type="text/javascript">
-
google_ad_client = "'.$adsense.'";
-
google_ad_width = 250;
-
google_ad_height = 250;
-
google_ad_format = "250x250_as";
-
google_ad_type = "text_image";
-
google_color_border = "e6e6e6";
-
google_color_bg = "FFFFFF";
-
google_color_link = "467aa7";
-
google_color_text = "000000";
-
google_color_url = "0066cc";
-
</script>
-
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
-
</script></div>';
-
}
-
}
-
/* ADSENSE End - turker */
-
$content = get_the_content($more_link_text, $stripteaser, $more_file);
-
$content = apply_filters('the_content', $content);
-
}
Özel alanlarla yapabilecekleriniz sizin istekleriniz ile sınırlı. Dediğim gibi buraya eklenen "anahtar" ve "değer" yazı ile ilişkili olarak ekleniyor ve ben şu yazıya şöyle birşey yapayım, şu tip yazılara böyle yapayım dediğinizde ne aklınıza geliyorsa onu yapmak mümkün. Bu özelliği kullanılarak çeşitli worpdress pluginleri bile hazırlamak mümkün.
Yazdır
| 1,399 Görüntülenme | Kategori: PHP, Programlama, Yazılım/Hazır Betikler |
Geri İzleme
Etiketler: wordpress, custom fields, özel alanlar, PHPBenzer Yazılar
Yorum Yap
XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

25 Kasım 2007 |


