Düşüncelerimin bütün hakları
bende saklıdır.
 
21 Temmuz 2009
01:17 am
Kategori: Wordpress
Bu yazı 1.587 kere okundu

Wordpress’te Trackback/Pingback’leri yorumlardan ayırmak

Wordpress kullanan blogcular için trackback ve yorumların alt alta sıralanması bazen sorun yaratabiliyor. Bu yüzden yorumlarla, trackback’leri ayırmanın yöntemlerini araştırmaya başladım.

Bu işlem birkaç şekilde yapılabilmesine karşı anlattığım yöntem diğerlerine göre daha düzgün çalışıyor ve Wordpress hakkında da birşeyler daha öğrenmiş oluyoruz.

Diğer yöntemde işi comments.php dosyasında bitiriyoruz. Yani comments.php içine trackback ile yorumların ayrı yerlerde gösterilmesi için iki koşul yazıyoruz. Yöntem çok kolay gibi görünse de Toplamda olan yorumu trackback’lerden çıkarmıyor ve bize tam bir serbestlik sağlamıyor.

Bu yüzden biraz daha uğraşıp işin içine functions.php yi de ekleyip hem sisteme yüklenmiyor, hemde yorumları istediğimiz yapıya sokuyoruz.

Başlamadan önce bu işlemi yapmak için Wordpress teması yapmayı bilecek bilgiye sahip olmanız gerekebileceğini söylemeliyim. Eğer anlatacaklarım hakkında en ufak bir fikriniz yoksa bu işe kalkışmayın veya sitenizle ilgili herşeyin yedeğini alın.

Trackback/Pingback’leri yorumlardan ayırmak

Anlatacağım yaklaşımda tema dizininiz içinde bir comments.php dosyası ve functions.php dosyası bulunmalı. comments.php olmadan yorumlar hiç görünmeyeceği için bunun olduğunu varsayıyorum. eğer yoksa functions.php yi ise kendiniz oluşturun.

Functions.php’yi düzenleyelim

Bir Wordpress tema tasarımcısı için functions.php dosyası çok önemli ve gereklidir. Bu dosya içinde oluşturduğumuz kodlar temanın içinde çalışır ve işimizi kolaylaştırır, bir eklenti gibide çalıştığı için bize esnek bir oyun alanı sağlar. Böylece istediğimiz özellikleri temamıza ekleyebiliriz.

Biz burada 4 fonksiyon ve 2 filtre oluşturacağız. Bu oluşturduklarımızda istediğimizi elde etmemizi sağlayacak. Aşağıdaki tabloda da bunların neler olduğunu görebilirsiniz.

functions

  • filterPostComments: Yorum sayacını trackbackleri saymayacak şekilde düzenleyecek
  • filterComments: Global değişkenler yardımıyla trackbackleri yorumlardan ayıracak
  • stripTrackback: Trackbackleri array şeklinde ayıracak
  • stripComment: Yorumları array şeklinde ayıracak
  • comments_array: basitçe anlatmak gerekirse the_comments array’i
  • the_posts: Bütün yazılarda bulunan post array’i

Bu kadar açıklama yeter şimdi functions.php dosyasına aşağıdaki kodları yazalım.

add_filter(’comments_array’, ‘filterComments’, 0);

add_filter(’the_posts’, ‘filterPostComments’, 0);

function filterPostComments($posts) {

foreach ($posts as $key => $p) {

if ($p->comment_count <= 0) {

return $posts;

}

$comments = get_approved_comments((int)$p->ID);

$comments = array_filter($comments, “stripTrackback”);

$posts[$key]->comment_count = sizeof($comments);

}

return $posts;

}

function filterComments($comms) {

global $comments, $trackbacks;

$comments = array_filter($comms,”stripTrackback”);

$trackbacks = array_filter($comms, “stripComment”); return $comments;

}

function stripTrackback($var) {

if ($var->comment_type == ‘trackback’ || $var->comment_type == ‘pingback’) {

return false;

}

return true;

}

function stripComment($var) {

if ($var->comment_type != ‘trackback’ && $var->comment_type != ‘pingback’) {

return false;

}

return true;

}

add_filter(’comments_array’, ‘filterComments’, 0);
add_filter(’the_posts’, ‘filterPostComments’, 0);
function filterPostComments($posts) {
foreach ($posts as $key => $p) {
if ($p->comment_count <= 0) {
return $posts;
}
$comments = get_approved_comments((int)$p->ID);
$comments = array_filter($comments, “stripTrackback”);
$posts[$key]->comment_count = sizeof($comments);
}
return $posts;
}
function filterComments($comms) {
global $comments, $trackbacks;
$comments = array_filter($comms,”stripTrackback”);
$trackbacks = array_filter($comms, “stripComment”); return $comments;
}
function stripTrackback($var) {
if ($var->comment_type == ‘trackback’ || $var->comment_type == ‘pingback’) {
return false;
}
return true;
}
function stripComment($var) {
if ($var->comment_type != ‘trackback’ && $var->comment_type != ‘pingback’) {
return false;
}
return true;
}

Nasıl çalıştığını tam olarak anlamaya ihtiyacımız yok ama php biliyorsanız zaten ne olup bittiğini az çok anlamışsınızdır. Şimdi sıra bir sonraki aşamada…

Comments.php’yi düzenleyelim

Diğer ayrım derslerinin aksine biz comments döngüsünü düzenlemeyeceğiz. Onun yerine bir “trackbacks” global değişkeni yaratıp, comments döngüsünün altına trackbacks döngüsünü ekleyeceğiz.

comments

Yukarıdaki tabloda gördüğünüz gibi Comments döngüsünün hemen sonuna aşağıdaki kodları yazın.

<?php global $trackbacks; ?>

<?php if ($trackbacks) : ?>

<?php $comments = $trackbacks; ?>

<h3 id=”trackbacks”><?php echo sizeof($trackbacks); ?> Trackbacks/Pingbacks</h3>

<ol class=”commentlist”>

<?php foreach ($comments as $comment) : ?>

<!– trackback HTML girdiniz –>

<?php endforeach; ?>

</ol>

<?php endif; ?>

Eğer herşey doğru yapılmışsa kod çalışıyor olmalı. Yaptıklarımızın örneğini indirip incelemek için Buraya Tıklayınız. İlgili konu hakkındaki ingilizce kaynak için http://weblogtoolscollection.com/archives/2008/03/08/managing-trackbacks-and-pingbacks-in-your-wordpress-theme/ linkine gözatabilirsiniz.


Benzer Yazılar

Şu anda okuduğunuz konuyu beğenmişseniz, aşağıdaki konularda ilginizi çekebilir.


XHTML: Bu etiketleri kullanabilirsiniz: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>