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.