
Öncelikle WordPresse haber veriyoruz. İlk satırımız aşağıdaki gibi olacak burada widgeti functions dosyasında çağırmadan önce özel bir class ismi belirtiyoruz ve bu ismin WP_Widget ile bağlantılı olduğunu söylüyoruz. Functions dosyasında widgeti çağırmayı en altta göreceksiniz.
class SonYorumlar extends WP_Widget {Devamında yapıyı tanıtıyoruz ve id ile bileşenler sayfasında gözükecek olan ismi belirtiyoruz.function __construct() {
parent::__construct(
'son-yorumlar', // Base ID
'Evil: Son Yorumlar' // Name
);
add_action( 'widgets_init', function() {
register_widget( 'SonYorumlar' );
});
}Burada bir aşağıda fonksiyon içerisinde kullanacağımız argümanları hazırlıyoruz.public $args = array( 'before_title' => '<h4 class="widgettitle">', 'after_title' => '</h4>', 'before_widget' => '<div class="widget-wrap">', 'after_widget' => '</div></div>' );Şimdi geldik gönderileri çekeceğimiz kısıma. Ben bu kısmı alışkanlıktan ötürü ortada tutmayı tercih ediyorum siz istediğiniz fonksiyon ile yer değiştirebilirsiniz. Echo args yazan kısımda yukarıda hazırladığımız argüman arrayinden isim kullanarak kodları çekiyoruz. Bu yapı bize farklı temalarda aynı widgeti kullanacağımız zaman daha kolay editleme imkanı sunuyor. Hemen altında yer alan kısımda bileşene başlık yazılıp yazılmadığını kontrol ediyoruz. Bir altındaki yapıda ise en son kısımda göreceğiniz ve aşağıda resimde de yer alan maksimum kaç tane yorum gösterilmesini istiyorsak o sayıyı girmemizin gerektiği input kısmının dolu veya boş olup olmadığını kontrol ediyoruz. Eğer boş ise else kısmında yer alan kodlar çalışacağı için 'number'=>5 yani 5 adet yorumu çekecektir. Eğer herhangi bir sayı girdiysek örneğin "3" girersek o kadar yorum çekecektir eğer varsa. Yapıya gelecek de olursak get_comments komutu WordPressdenadından da anlaşılacağı üzere yorumları çekmeye yarar. number kısmı kaç yorum çekileceğini, status kısmı yorum durumunu (kodlarda approve yazıyor yani onaylanan yorumları çekiyor) post_status ise hangi gönderilerdeki yorumları çekeceğini anlatır (publish yani yayınlanmış gönderilerdeki yorumları çekiyor) yani eğer 3 yazısını girersek. Tek bir satır kod ile WordPress sitemizdeki yayınlanmış gönderilerdeki, onaylanmış yorumlardan en son 3 tanesini çekecektir. Ve count($str) ile yorumda kaç kelime olduğunu sayıp eğer 11 kelimeden fazla ise '...' ekliyoruz yorumun sonuna.

public function widget( $args, $instance ) {
echo $args['before_widget'];
if ( ! empty( $instance['title'] ) ) {
echo $args['before_title'] . apply_filters( 'widget_title', $instance['title'] ) . $args['after_title'];
}
if($instance["kactanegosterilsin"] != null){
$comments = get_comments(array('number'=>$instance["kactanegosterilsin"],'status'=>'approve','post_status'=>'publish'));
}else{
$comments = get_comments(array('number'=>5,'status'=>'approve','post_status'=>'publish'));
}
?>
<ul class="son-yorumlar">
<?php foreach ($comments as $comment): ?>
<li>
<div class="tab-item-inner clean">
<?php
$str=explode(' ',get_comment_excerpt($comment->comment_ID));
$comment_excerpt=implode(' ',array_slice($str,0,11));
if(count($str) > 11){
$comment_excerpt.='...';
}
?>
<span class="yorumu-yapan"><?php echo esc_attr( $comment->comment_author ); ?></span>
<span class="yorumu"><a href="<?php echo esc_url(get_comment_link($comment->comment_ID)); ?>"><?php echo esc_attr( $comment_excerpt ); ?></a></span>
</div>
</li>
<?php endforeach; ?>
</ul>
<?php
echo $args['after_widget'];
} ?>Sıra geldi son kısıma geri kalan fonskiyonlar basit ve anlaşılabilir olduğu için (yukarıdakiler de öyleydi ama bunlar daha basitler
)tek bir yerde toplamaya karar verdim. Burada yukarıdaki resimdeki form yapısını oluşturuyoruz. Girdileri bu kısımdan yapıyoruz ve kayıt ediyoruz. public function form( $instance ) {
$title = ! empty( $instance['title'] ) ? $instance['title'] : esc_html__( '', 'text_domain' );
$kactanegosterilsin = ! empty( $instance['kactanegosterilsin'] ) ? $instance['kactanegosterilsin'] : esc_html__( '', 'text_domain' );
?>
<p>
<label for="<?php echo esc_attr( $this->get_field_id( 'title' ) ); ?>"><?php echo esc_html__( 'Başlık:', 'text_domain' ); ?></label>
<input class="widefat" id="<?php echo esc_attr( $this->get_field_id( 'title' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'title' ) ); ?>" type="text" value="<?php echo esc_attr( $title ); ?>">
</p>
<p>
<label for="<?php echo esc_attr( $this->get_field_id( 'Text' ) ); ?>"><?php echo esc_html__( 'Kaç Tane Gösterilsin: (standart 5)', 'text_domain' ); ?></label>
<input type="number" min="1" max="5" class="widefat" id="<?php echo esc_attr( $this->get_field_id( 'kactanegosterilsin' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'kactanegosterilsin' ) ); ?>" cols="30" rows="10"><?php echo esc_attr( $kactanegosterilsin ); ?>
</p>
<?php
}
public function update( $new_instance, $old_instance ) {
$instance = array();
$instance['title'] = ( !empty( $new_instance['title'] ) ) ? strip_tags( $new_instance['title'] ) : '';
$instance['kactanegosterilsin'] = ( !empty( $new_instance['kactanegosterilsin'] ) ) ? $new_instance['kactanegosterilsin'] : '';
return $instance;
}
}
$sonyorumlar = new SonYorumlar();Neredeyse unutuyordum
En son olarak aşağıdaki kod ile functions.php veya tema yapımıza uygun dilediğimiz başka bir yerden widgeti çağırıyoruz.load_template( get_template_directory( ) . '/functions/widgets/son-yorumlar.php' );
Edit: Eğer kodları tüm şekilde görmek veya direkt indirmek isteyenler olursa diye Githuba yükledim şöyle bırakıyorum: https://github.com/EvilBozkurt/son-yorumlar
Umarım yazıda da bahsettiğim gibi birilerinin işine yarar