Plugin kullanmadan benzer yazıları gösterme

WordPress’te “Benzer Yazılar” “İlgili Haberler” gibi bölümleri oluşturabilmek için oldukça başarılı eklentiler mevcut.
Ancak bu eklentilerin bazı handikapları da yok değil… Performans kaybı, fazla ve gereksiz kod, imaj yüklemeleri…

Benzer yazıları 2 farklı şekilde gösterebiliriz:

Etikete göre benzer yazılar

Buradaki algoritma, yazının sahip olduğu etiketlerle aynı etikete sahip olan diğer yazıları listeleme üzerine kuruludur.
Aşağıdaki kodu temanızın single.php veya yazının detayını gösteren dosyanızın, benzer yazıların görünmesini istediğiniz bölümüne yerleştirmeniz yeterli olacaktır.
CSS veya HTML düzenlemelerini kendinize göre ayarlayabilirsiniz.

<?php $orig_post = $post;
global $post;
$tags = wp_get_post_tags($post->ID);
if ($tags) {
$tag_ids = array();
foreach($tags as $individual_tag) $tag_ids[] = $individual_tag->term_id;
$args=array(
'tag__in' => $tag_ids,
'post__not_in' => array($post->ID),
'posts_per_page'=>5, // Kaç adet benzer yazı gösterileceği
'caller_get_posts'=>1
);
$my_query = new wp_query( $args );
if( $my_query->have_posts() ) {
echo '<div id="relatedposts"><h3>Benzer Yazılar</h3><ul>';
while( $my_query->have_posts() ) {
$my_query->the_post(); ?>
<li><div class="relatedthumb"><a href="<? the_permalink()?>" rel="bookmark" title="<?php the_title(); ?>"><?php the_post_thumbnail(); ?></a></div>
<div class="relatedcontent">
<h3><a href="<? the_permalink()?>" rel="bookmark" title="<?php the_title(); ?>"><?php the_title(); ?></a></h3>
<?php the_time('M j, Y') ?>
</div>
</li>
<? }
echo '</ul></div>';
}
}
$post = $orig_post;
wp_reset_query(); ?>

Kategoriye göre benzer yazılar

Aşağıdaki kod da okunan yazının kategorisine ait diğer yazıları listeleme mantığıyla çalışır.

<?php $orig_post = $post;
global $post;
$categories = get_the_category($post->ID);
if ($categories) {
$category_ids = array();
foreach($categories as $individual_category) $category_ids[] = $individual_category->term_id;
$args=array(
'category__in' => $category_ids,
'post__not_in' => array($post->ID),
'posts_per_page'=> 2, // Kaç adet benzer yazı gösterileceği
'caller_get_posts'=>1
);
$my_query = new wp_query( $args );
if( $my_query->have_posts() ) {
echo '<div id="related_posts"><h3>Benzer Yazılar</h3><ul>';
while( $my_query->have_posts() ) {
$my_query->the_post();?>
<li><div class="relatedthumb"><a href="<? the_permalink()?>" rel="bookmark" title="<?php the_title(); ?>"><?php the_post_thumbnail(); ?></a></div>
<div class="relatedcontent">
<h3><a href="<? the_permalink()?>" rel="bookmark" title="<?php the_title(); ?>"><?php the_title(); ?></a></h3>
<?php the_time('M j, Y') ?>
</div>
</li>
<?
}
echo '</ul></div>';
}
}
$post = $orig_post;
wp_reset_query(); ?>