Как вывести популярные по просмотрам записи без плагинов

Некоторое время назад мы рассказывали о том, как сделать табы в WordPress без плагинов. Однако, хочется ведь настроить расположение элементов как можно удобнее для пользователя. В сегодняшней статье мы расскажем как отследить и отобразить самые просматриваемые записи в вашем блоге WordPress без использования плагинов.

Пример популярных записей собственного производства на скриншоте ниже:

popularpostsdemo[1]

Первое, что нам нужно сделать, это создать функцию, которая будет определять количество просмотров записи и сохранять его в пользовательское поле для каждого поста. Для этого вставляем следующий код в файл functions.php вашей темы или, лучше, в плагин для сайта WordPress:

function devise_set_post_views($postID) {
    $count_key = 'devise_post_views_count';
    $count = get_post_meta($postID, $count_key, true);
    if($count==''){
        $count = 0;
        delete_post_meta($postID, $count_key);
        add_post_meta($postID, $count_key, '0');
    }else{
        $count++;
        update_post_meta($postID, $count_key, $count);
    }
}
remove_action( 'wp_head', 'adjacent_posts_rel_link_wp_head', 10, 0);

Теперь, когда функция на месте, нужно ее вызвать для отдельных записей в блоге. Таким образом функция будет точно знать, каким записям нужно увеличить счетчик просмотров. Для этого нуэно вставить следующий код в в цикл для отдельной записи (скорее всего в файл single.php вашей темы):

devise_set_post_views(get_the_ID());

Если же вы используете дочернюю тему (child theme) или же просто хотите упростить все это, тогда вам нужно добавить трекер для отслеживания в хидер, используя хук wp_head. Вствьте следующий код в файл functions.php вашей темы или в плагин для сайта WordPress:

function devise_track_post_views ($post_id) {
    if ( !is_single() ) return;
    if ( empty ( $post_id) ) {
        global $post;
        $post_id = $post->ID;    
    }
    devise_set_post_views($post_id);
}
add_action( 'wp_head', 'devise_track_post_views');

После того, как код окажется в нужном месте, каждый раз при открытии отдельно взятым пользователем записи, счетчик в пользовательском поле будет обновляться.

Примечание: Есл вы используете плагин кеширования на вашем блоге, то такой способ НЕ будет работать по-умолчанию. У плагина W3 Total Cache есть функция под названием Fragmented Caching. Нужно ее задействовать, и проблема исчезнет. Нужно изменить следующее:

<!-- mfunc devise_set_post_views($post_id); --><!-- /mfunc -->

Теперь можно вытворять разные интересные вещи, такие как отображение количества просмотров записи, или сортировать по этим самым просмотрам… Давайте посмотрим как их можно реализовать:

Если вы желаете отобразить количество просмотров на каждой странице записи блога (обычно рядом с количеством комментариев), то первое, что нужно сделать, это добавить код в файл functions.php вашей темы или в плагин для сайта WordPress:

function devise_get_post_views($postID){
    $count_key = 'devise_post_views_count';
    $count = get_post_meta($postID, $count_key, true);
    if($count==''){
        delete_post_meta($postID, $count_key);
        add_post_meta($postID, $count_key, '0');
        return "0 просмотров";
    }
    return $count.' просмотров';
}

Затем вставить внутрь цикла записи следующее:

devise_get_post_views(get_the_ID());

Если нужна сортировка записей по количеству просмотров, это можно реализовать с помощью параметра post_meta wp_query. Самый простой пример цикла запроса будет выглядеть так:

<?php 
$popularpost = new WP_Query( array( 'posts_per_page' => 4, 'meta_key' => 'devise_post_views_count', 'orderby' => 'meta_value_num', 'order' => 'DESC'  ) );
while ( $popularpost->have_posts() ) : $popularpost->the_post();

the_title();

endwhile;
?>

Для добавления других параметров WP_Query, таких как диапазон времени, обратитесь на страницу WP_Query в Codex.

Надеемся, статья окажется полезной для вас и вашего блога.

VN:F [1.9.22_1171]
Rating: 3.3/5 (3 votes cast)

Об авторе ADv

Занимаюсь разработкой сайтов и магазинов на WordPress. Оказываю платные помощь и консультации. Skype: advokat_b
  • Надежда Дьяченко

    Простите, а что значит «вставить внутри цикла записи»? Это куда?

Scroll To Top