Ana Sayfa » »
Tem
11
2013

Yorumu Eklendikten Sonra Yorumcuyu Teşekkür Sayfasına Nasıl Yönlendiririz?

Bazı site sahipleri, WordPress sitelerinde ziyaretçi bir yorum yazdıktan sonra, tekrar aynı sayfaya değil de ziyaretçiye teşekkür için kullandıkları bir sayfaya yönlendirmek isterler. Aslında bu biraz da mantıklı bir durum. Çünkü çoğu zaman ziyaretçi eğer yorum yazmışsa artık ziyaretçinin o yazı ile ilgili işi bitmiş demektir. İşte tam da bu durumda ziyaretçiyi özel bir teşekkür sayfasına gönderip, sitedeki son yazıları gösterirsek hatta daha iyisi yorum yazdığı yazıyla benzer yazıları göstersek daha iyi olmaz mı?
Kodlarımızı eklemeye başlamadan önce, Teşekkürler başlığı altında bir sayfa oluşturalım. Sayfanın kısa adının tesekkurler olduğundan (kalıcı bağlantı kullandığını varsayıyorum) emin olun. Böylece siteadi.com/tesekkurler yazıldığında bu sayfa görüntülenebilir olacak. Sayfanızın içerisine örneğin "Yorumunuzla sitemize katkıda bulunduğunuz için teşekkür ederiz. İsterseniz aşağıdaki benzer yazılarla sitemizdeki gezintinize devam etmek isteyebilirsiniz" şeklinde bir mesaj yazabilirsiniz. Mesajın ikinci bölümü için ise ya WordPress'in şablon yapısını kullanarak sayfayı oluşturup, yorum yapılan sayfayı elde ederek, onunla benzer yazıları listeletmeniz gerekecek. Ya da kodlarımın ikinci bölümündeki kodları kullanarak, bu işi fonksiyonlarımızla halledebilirizsiniz.
Öncelikle yönlendirme işlemini halledelim. Bunun için aşağıdaki kodu functions.php dosyanıza uygun şekilde ekleyin.

function yakuphoca_tesekkurler_sayfasina_git(){
      return home_url( 'tesekkurler' ) . '?yorumsayfasi';
      exit();
}
add_filter('comment_post_redirect', 'yakuphoca_tesekkurler_sayfasina_git');

Kodu eklediğiniz an yönlendirme aktif hale gelecektir. yönetici olarak siz bile yorum yazsanız yönlendirme gerçekleşecektir. Kod içerisindeki ?yorumsayfasi ifadesi, teşekkürler sayfasına yorum yapıldığını gösterir.

Teşekkürler Sayfasını Kodla Düzenlemek

Aşağıdaki kodlar Teşekkürler sayfasını yeniden yapılandırır. Eğer sayfaya yorum yapıldıktan sonra gelinmişse, sayfaya gelinen yazı bilgileri alınıp, bu yazıyla ilişkili yazılardan 7 tanesini teşekkürler sayfasının altına liste olarak eklenir. İsterseniz başka kodlar kullanarak ya da benzer yazılar fonksiyonunu düzenleyerek, resimli de gösterebilirsiniz. O bölümü siz kendinize göre halledin. Aşağıdaki kodları yine functions.php dosyasında uygun şekilde ekleyin.

function yakuphoca_tesekkur_sayfasini_hazirla( $content ) {

 if ( is_page( 'tesekkurler' ) && $content ){
	$referer_url = esc_url ( wp_get_referer() );
	//Eğer site içerisinde başka bir sayfadan yönlendirilmişse
	if ($referer_url && (strpos( $referer_url, home_url() ) !== false) && (strpos( $_SERVER["REQUEST_URI"], '?yorumsayfasi' ) !== false) ) {
	  $referer_post_id = url_to_postid( $referer_url);
	  if ($referer_post_id) {
		$benzer_yazilar = yakuphoca_benzer_yazilar($referer_post_id, 7);
	    $content .= $benzer_yazilar;
	  }
	}
	//Eğer sayfaya doğrudan girilmiş ya da başka siteden gelinmişse
	if ( $referer_url == false || $referer_post_id == 0 ||(strpos( $_SERVER["REQUEST_URI"], '?yorumsayfasi' ) === false) ) {
       $son_yazilar = wp_get_recent_posts( 'numberposts=7&post_status=publish' );
	   $sonyazilar_list = '';
	   foreach( $son_yazilar as $sonyazi ){
		$sonyazilar_list .= '<li><a href="' . get_permalink($sonyazi["ID"]) . '" title="'.esc_attr($sonyazi["post_title"]).'" >' .   $sonyazi["post_title"].'</a> </li> ';
	   }
	   $content = '<p>Üzgünüz, bu sayfaya doğrudan erişemezsiniz. Ancak isterseniz aşağıdaki yazılarımızdan biriyle sitemizdeki gezintimize devam edebilirsiniz.</p>';
	   if ( $sonyazilar_list ) {
	    $content .= sprintf('
		<div class="recent-posts">
			<h4>Sitemizdeki Son Yazılar</h4>
			<ul>%s</ul>
		</div>', $sonyazilar_list );
	   }
	}
 }
 return $content;
}
add_action('the_content', 'yakuphoca_tesekkur_sayfasini_hazirla' );

function yakuphoca_benzer_yazilar($post_id=0, $count = 5) {
	$post_id = (int) $post_id;
	if ( !$post_id ) return;
	$post_type = get_post_type($post_id);
	if ( $post_type== 'page' ) return;
	$tag_ids = array();
 	$current_cat = get_the_category($post_id);
	$current_cat = $current_cat[0]->cat_ID;
	$this_cat = '';
 
	$tags = get_the_tags($post_id);
 
	if ( $tags ) {
		foreach($tags as $tag) {
			$tag_ids[] = $tag->term_id;
		}
	} else {
		$this_cat = $current_cat;
	}
 
	$args = array(
		'post_type'   => $post_type,
		'numberposts' => $count,
		'orderby'     => 'rand',
		'tag__in'     => $tag_ids,
		'cat'         => $this_cat,
		'exclude'     => $post_id
	);
 
	$related_posts = get_posts($args);
 
	if ( empty($related_posts) ) {
		$args['tag__in'] = '';
		$args['cat'] = $current_cat;
		$related_posts = get_posts($args);
	}
 
	if ( empty($related_posts) ) {
		return;
	}
 
	$post_list = '';
 
	foreach($related_posts as $related) {
		$post_list .= '<li><a href="' . get_permalink($related->ID) . '" title="' . $related->post_title . '">' . $related->post_title . '</a></li>';
	}
 
	return sprintf('
		<div class="related-posts">
			<h4>Benzer Yazılar</h4>
			<ul>%s</ul>
		</div>
	', $post_list );
}

Kod içerisinde temel açıklamalar var. Basitçe mantığını anlatmak gerekirse, eğer gösterilen sayfa teşekkürler sayfasıysa, ardından referer değeri kontrol edilerek, site içerisinden mi gelindiği ve ?yorumsayfasi ifadesi var mı kontrol edilir. Eğer bunlar varsa demek ki bir yorum yapıldıktan sonra bu sayfaya gelinmiş. Bu durumda gelinen sayfanın adresi alınıp, bu adresten sayfanın ID'si alınıp, benzer yazılar fonksiyonuna bunu ileterek, 7 tane benzer yazının altta listelenmesi sağlanıyor. Eğer sayfaya doğrudan gelinmişse bu durumda ise sitedeki son 7 yazı listeleniyor ve ziyaretçi, bu sayfaya doğrudan gelemezsiniz şeklinde uyarılıyor.
Kodları kullanmak isteyenlere kolay gelsin.

Bu yazımı beğendiyseniz, bu kategoride yer alan JQuery Google Üzerinden Yüklenmezse Sitedekini Yükle başlıklı javascript, jQuery ve WordPress konularında bilgi veren bir önceki yazımı da okumanızı tavsiye ederim.

Yazıya 2 Yorum Yapıldı+ Yorum Ekle

  • merhaba hocam.
    bu yorum bölümünde isim veya mail girilmediği zaman hata sayfasını nasıl yorum alanın üzürinde çıkarabiliriz.başka sayfaya yönlenmeden?

    • Yorumlar gönderildiğinde wp-comments.php sayfasına bilgiler gönderilir, bahsettiğiniz mesajı bu dosya yayınlar. Dolayısıyla form gönderildikten sonra, bilgiler işlenir ve tekrar yorum yapılan yazıya yönlendirilir.
      Sonuç olarak bahsettiğiniz olayı bilgiler gönderilmeden javascript kullanarak ya da bunu kullanan bir eklentiyle çözmek gerekir. WordPress eklenti dizininde (wordpress.org/plugin/) jquery comment validation şeklinde arama yaparak jquery ile yorum doğrulaması yapan bir eklenti belki bulabilirsiniz.

Yorumunu Yaz

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Yukarı Çık