WordPress:Spam Yorumları Otomatik Olarak Çöp Kutusuna Gönderme

Bloglarımızda en sık karşılaştığımız sorunlardan birisidir spam yorumlar. Ancak WordPress’de bunun önüne geçmek için akismet tarzı eklentiler kullanılıyor. Bu tür eklentiler yorumları filtreleyip yorumların içindeki kelimelere göre içlerinden spam olanları çekip alıyor. Şimdi değineceğimiz konu ise bu yorumlar geldiğinde akismete veya diğer filtreleme eklentilerine devretmek yerine WordPress’in yeni özelliği “çöp” kutusuna direkt göndermekle ilgili olacak. Çöp kutusuna gönderme işin içine girince ekstra bir eklenti kurmaya da gerek kalmıyor. Çalışma mantığı olarak da belli kelimelerin bulunduğu bir havuzumuz var. Gelen yorumlar bu havuzdaki kelime veya kelime grupları ile karşılaştırılıyor. Eğer havuzdaki kelimelerden birisi kullanılmışsa hemen yorum çöpe atılıyor. Şimdi kodumuzu görelim ve ondan sonra birkaç noktaya daha değinelim.

Kodu temamızın foksiyon dosyası olan functions.php dosyasına ekliyoruz.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
function in_comment_post_like($string, $array) {
	foreach($array as $ref) { if(strstr($string, $ref)) { return true; } }
	return false;
}
function drop_bad_comments() {
	if (!empty($_POST['comment'])) {
		$post_comment_content = $_POST['comment'];
		$lower_case_comment = strtolower($_POST['comment']);
		$bad_comment_content = array(
			'viagra',
			'hydrocodone',
			'hair loss',
			'[url=http',
			'[link=http',
			'xanax',
			'tramadol',
			'russian girls',
			'russian brides',
			'lorazepam',
			'adderall',
			'dexadrine',
			'no prescription',
			'oxycontin',
			'without a prescription',
			'sex pics',
			'family incest',
			'online casinos',
			'online dating',
			'cialis',
			'best forex',
			'amoxicillin'
		);
		if (in_comment_post_like($lower_case_comment, $bad_comment_content)) {
			$comment_box_text = wordwrap(trim($post_comment_content), 80, "\n  ", true);
			$txtdrop = fopen('/var/log/httpd/wp_post-logger/nullamatix.com-text-area_dropped.txt', 'a');
			fwrite($txtdrop, "  --------------\n  [COMMENT] = " . $post_comment_content . "\n  --------------\n");
			fwrite($txtdrop, "  [SOURCE_IP] = " . $_SERVER['REMOTE_ADDR'] . " @ " . date("F j, Y, g:i a") . "\n");
			fwrite($txtdrop, "  [USERAGENT] = " . $_SERVER['HTTP_USER_AGENT'] . "\n");
			fwrite($txtdrop, "  [REFERER  ] = " . $_SERVER['HTTP_REFERER'] . "\n");
			fwrite($txtdrop, "  [FILE_NAME] = " . $_SERVER['SCRIPT_NAME'] . " - [REQ_URI] = " . $_SERVER['REQUEST_URI'] . "\n");
			fwrite($txtdrop, '--------------**********------------------'."\n");
			header("HTTP/1.1 406 Not Acceptable");
			header("Status: 406 Not Acceptable");
			header("Connection: Close");
			wp_die( __('bang bang.') );
		}
	}
}
add_action('init', 'drop_bad_comments');

Fonksiyonda kelime havuzumuz 10. satırdaki ilaç markası ile başlıyor (direkt ilaç ismini yazmama sebebim Google aramalarında o ilaçla ilgili aramalarda blogumun listelenecek olması ve gerçekten bunu hiçbirimiz istemeyiz). Eklemek istediğimiz kelime veya kelime grupları varsa onları da aynı havuzdaki biçimde yani ‘kelime’; şeklinde araya sıkıştırmak yeterli olacaktır 🙂 Bu fonksiyonu ayrıca istemediğimiz bir yazıya gelen yorumları elemek için de kullanabiliriz. Mesela blogumda çok önceleri yazdığım msn şifresi ile ilgili bir yazı var. Bunu tamamen eğlenci amaçlı yazmıştım anca sonraları google aramalarında ilk sıralarda çıktı. Ve ardından hergün bu konuyla ilgili onlarca yorum silmek zorunda kaldım. Ben buna çözüm olarak ‘msn şifre’ yazacağım havuza. Çünkü bu yazıya gelen yorumların çoğunluğu bu kelimeleri içeriyor. Otomatik olarak silinmiş olacak yorumlar. Ayrıca diğer küfürlü yorumlar için de kullanabileceğiz.

Yazının orjinal hali WpRecies‘de mevcuttur.

WordPress:Son Yorumları Gravatar İle Gösterme

WordPress blogların hemen hemen tamamında “son yorumlar” adında bir bölüm görüyoruz. Bu bölüm blog içerisinde yazı zamanı gözetmeksizin ziyaretçi tarafından en son yapılan yorumları gösterir. Genelde gördüklerimiz yorum yazarının adı ve yorum formatındadır. Ancak bazı temalarda bu formata ilave olarak resim, avatar da gösteriliyor. Özellikle özel temalarda bunu görmek mümkün. Görsel olarak çok güzel görünüyorve tabi anlaşılırlık olarak da aynı seviyede… Resimler ise Twitter veya Gravatar servislerinde belirlenmiş profil reimlerinden alınıyor. Bu yazımızda Gravatar’dan alınan küçük resimlerle bunun nasıl yapılacağına bakacağız. Aslında çok basit bir kod yığınından faydalanıyoruz bunu yaparken.

Aşağıdaki kodu temamızın “sibebar.php” veya başka göstermek istediğimiz bir yer varsa oraya kopyalıyoruz.

<?php
$query = "SELECT * from $wpdb->comments WHERE comment_approved= '1'
ORDER BY comment_date DESC LIMIT 0 ,5";
$comments = $wpdb->get_results($query);
 
if ($comments) {
    echo '<ul>';
    foreach ($comments as $comment) {
        $url = '<a href="'. get_permalink($comment->comment_post_ID).'#comment-'.$comment->comment_ID .'" title="'.$comment->comment_author .' | '.get_the_title($comment->comment_post_ID).'">';
        echo '<li>';
        echo '<div class="img">';
        echo $url;
        echo get_avatar( $comment->comment_author_email, $img_w);
        echo '</a></div>';
 
        echo '<div class="txt">Par: ';
        echo $url;
        echo $comment->comment_author;
        echo '</a></div>';
        echo '</li>';
    }
    echo '</ul>';
}
?>

Yazının aslı ve kaynağı Wp Recipes‘dir.

WordPress:Yorum Formunda HTML Etiket Kullanımını Engelleme

Blogların en can alıcı noktalarından birisi yorumlardır kuşkusuz. WordPress bloglarında da diğer bloglar gibi yorumlar mevcuttur. Hatta gelişmiş özellikler de sunabilir. Bunlardan birisi HTML etiketlerinin kullanılmasıdır. HTML etiketleri de yorum içinde link verme, resim gösterme, kalın veya italik yazı yazma gibi bazı özellikler sunuyor. Ancak bir durum da var ki bu etiketler açık olduğu taktirde spam mesajların da vazgeçilmezi durumuna geliyor. Spam mesajlar için her ne kadar eklentiler bulunsa da tam istenilen sonuçlara ulaşılamıyor. Örneğin Akismet’de bazı spam olmayan yorumlar da spam olarak alglanıyor ve silme işleminde kurunun yanında yaş da yanar misali siliniyorlar. HTML etiketleri kaldırdığımız taktirde bunların tamamen olmasa da bir miktar önüne geçmiş oluyoruz.

HTML etiketlerini kaldırmak için temamızın functions.php dosyasına aşağıdaki kodu dahil ediyoruz:

// This will occur when the comment is posted
function plc_comment_post( $incoming_comment ) {
// convert everything in a comment to display literally
$incoming_comment['comment_content'] = htmlspecialchars($incoming_comment['comment_content']);
// the one exception is single quotes, which cannot be #039; because WordPress marks it as spam
$incoming_comment['comment_content'] = str_replace( "'", '&amp;apos;', $incoming_comment['comment_content'] );
return( $incoming_comment );
}
// This will occur before a comment is displayed
function plc_comment_display( $comment_to_display ) {
// Put the single quotes back in
$comment_to_display = str_replace( '&amp;apos;', "'", $comment_to_display );
return $comment_to_display;

Hepsi bu kadar. Yazının orjinali de burada yer almaktadır.