Widget w WordPressie z najpopularniejszymi postami bez użycia plugin’u
Zanim zabierzemy się za tworzenie tej części widgetu przypominam, że najpierw należy zmodyfikować odpowiednio szablon, tak aby w metadanych były zliczane odsłony danego artykułu. Instrukcja jak to zrobić znajduje się w moim poprzednim wpisie „Zliczanie liczby wyświetleń postów bez użycia pluginu w WordPressie„.
Jeśli wszystko jest już przygotowane możemy przejść do kodu:
public function widget( $args, $instance ) {
$title = apply_filters('widget_title', $instance['title']);
if (empty($title))
{
$title = __('Najpopularniejsze posty', 'najpoularniejszePosty');
}
echo $args['before_widget'];
echo $args['before_title'] . esc_html($title) . $args['after_title'];
$arg = array(
'posts_per_page' => $instance['number'], //liczba postów do wyświetlenia
'meta_key' => 'post_views_count', //liczba odsłon
'orderby' => 'meta_value_num' //sortowanie
);
$popular_posts = get_posts($arg);
global $post;
?>
<?php
}Powyżej ustawiliśmy domyślny tytuł widgetu w przypadku skasowania danych z odpowiedniego pola formularza personalizacyjnego, został również przygotowany nagłówek wyświetlający tytuł widgetu na stronie oraz w zmiennej $popular_posts zapisaliśmy najpopularniejsze posty posortowane według liczby odsłon.
W kolejnym kroku napiszemy pętlę foreach za pomocą której wyświetlimy nasze posty:
<div class="posts">
<?php foreach($popular_posts as $post) : ?>
<?php setup_postdata( $post ); ?>
<div class="articles">
<article>
<?php if ($instance['show_thumbnail'] == TRUE && has_post_thumbnail()): ?>
<div class="post-head">
<?php the_post_thumbnail('medium'); ?>
</div>
<?php endif; ?>
<div>
<h3 class="post-title"><a href="<?php the_permalink(); ?>">
<?php the_title(); ?></a>
<?php if( $instance['show_count'] == TRUE ) : ?>
<span>
<?php
echo "Wyświetlenia: " . get_post_meta($post->ID, 'post_views_count', true);
?>
</span>
<?php
endif; ?>
</h3>
<?php if( $instance['show_excerpt'] == TRUE ) : ?>
<?php echo get_the_excerpt(); ?>
<?php endif; ?>
</div>
</article>
</div>
<?php endforeach; ?>
</div>Jak widać w kodzie zamieściliśmy również instrukcje warunkowe (IF) gdzie sprawdzamy opcje wyświetlania jakie zostały wybrane przez użytkownika i w zależności od wybranych ustawień decydujemy czy dany element ma zostać pokazany.
Oczywiście kod HTML można sobie sformatować według własnych preferencji.
Widget „Najpopularniejsze posty” jest już gotowy do użycia.