Янв
31
298

Плагин WP-PostRatings рейтинга постов в WordPress

рейтинг в wordpressПо планам на 2011 я решил полностью модернизировать и настроить некоторые свои блоги в соответствии с личными пожелания. Вместе с этим недавно на хостинге, который использую для парочки своих проектов HostPro начались небольшие подтормаживания. У них там были вроде как технические работы или что-то около, после чего ситуация стабилизировалась, но я все же решил заняться оптимизацией самих блогов. Посудите сами 8 сайтов на одном аккаунте, парочка из которых с посещениями под 1-2к уников это ли не нагрузка. Начал я, конечно, же с кэширование в wordpress так как это достаточно простой и доступный способ провести оптимизацию загрузки страницы. Учитывая, что никакие ссылки на белых проектах я не продаю, проблем с использованием WP Super Cache (выбранного мной для работы) быть не должно.

Еще одним важным моментом в оптимизации работы блога есть подборка плагинов. Ни для кого не секрет, что некоторые модули могут здорово загрузить ваш проект и быть причиной тормозов на сайте.      Одним из таких тяжелых плагинов, к сожалению, оказался WP-PostViews для определения  наиболее популярных (просматриваемых) материалов блога. Сначала не мог понять откуда может быть нагрузка у простого, казалось бы, модуля, но в комментариях мне все же советовали отказаться от него. Насколько я понимаю, каждое посещение пользователя пишется в базу данных дабы потом подбивать статистику — отсюда во-первых, дополнительная нагрузка на БД (если онлайн, допустим человек 5-10), во-вторых, «захламление» таблиц БД не столь важной информацией.

Короче говоря, было принято волевое решение для посещаемых блогов отказаться от использования WP-PostViews в пользу другого не менее интересного модуля — WP-PostRatings. Это рейтинговая система на AJAX для оценки статей и страниц wordpress сайта. После установки плагина пользователи смогут выставлять оценки (положительные, отрицательные либо количественные) к записям проекта. Основное преимущество WP-PostRatings это, конечно, возможность, выразить свое непосредственно отношение к публикациям сайта, то есть отметить нравится она или нет. Это действие подразумевает наличие определенной «не пассивно» аудитории проекта, которая бы оценивала ваши труды. Меня всегда пугали сайты, где красовались 2-3 оценки для статьи и все, возникает ощущение «неживого» блога. В то же время модуль WP-PostViews позволял просто выводить ссылки на популярные статьи, не нужно было никаких оценок и реакции посетителей. Тем не менее, из-за большой нагрузки все же склоняюсь к WP-PostRatings, при посещаемости в 1000-2000 уников за пару месяцев «набьете» оценки для постов, как новых, так и некоторых старых.

Установка и настройка WP-PostRatings

Скачать плагин WP-PostRatings  можно здесь.  Процесс установки его максимально прост — как обычно, разархивируем и заливаем на ФТП в папку wp-content/plugins, после чего Активируем WP-PostRatings в админке wordpress.

После установки в админке появится блок Ratings, где можно:

  • Manage Ratings — просматривать результаты оценок для статьей, делать выборки и удалять результаты.
  • Ratings Options — указывать некоторые настройки модуля.
  • Rating Templates — задавать шаблон отображения результатов и голосования.
  • Uninstall WP-PostRatings — удалить плагин.

В настройках вы можете выбрать различные варианты того, как будет отображаться оценивание — будь то обычный «+» и «-» либо количественная оценка в виде «звездочек». Их число, кстати, можно указывать такое как вам нужно.

Плагин WP-PostRatings

Если хотите чтобы для изображений использовался не GIF формат, а PNG, то в файле wp-content/plugins/wp-postratings/wp-postratings.php нужно найти строки:

define('RATINGS_IMG_EXT', 'gif');
//define('RATINGS_IMG_EXT', 'png');

И закомментировать (добавить //) первую из них, а у второй слэши убрать. После возвращаетесь в админку в меню Ratings Options и отмечаете один единственный «вариант со звездочками» для PNG.

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

<?php if(function_exists('the_ratings')) { the_ratings(); } ?>

Для файлов шаблона с выводом перечня постов (главная, архив) нужно располагать код внутри цикла Loop, то есть где-то после:

<?php if (have_posts()) : while (have_posts()) : the_post(); ?>

Проще всего сориентироваться для начинающих — это добавить вызов функции рядом с отображением названия категории и тегов, тогда все точно будет работать. Также плагин WP-PostRatings  поддерживает виджеты.

Чтобы вывести результаты опроса читательского мнения нужно использовать специальные функции, которые можно разделить на 4 направления:

  • Lowest Rated Post — статьи с наименьшим рейтингом.
  • Highest Rated Post — статьи с наибольшим рейтингом.
  • Most Rated Post — публикации за которые больше всего раз голосовали.
  • Highest Score Post — пост с максимальным средним показателем рейтинга, то есть, например, заметка с двумя голосами в сумме дающим 6.5 будет выше чем пост с одной оценкой в 7 баллов.

На официальном сайте плагина есть синтаксис для всех этих случаев и некоторые другие особенности. Смысла перепечатывать все, что там сказано, я не вижу, можно всегда глянуть в первоисточник. Единственное, что покажу парочку примеров.

Примеры использования плагина WP-PostRatings

Статьи с наименьшим рейтингом

<?php if (function_exists('get_lowest_rated')): ?>
   <ul>
      <?php get_lowest_rated(); ?>
   </ul>
<?php endif; ?>

где по умолчанию для функции используются параметры get_lowest_rated(‘both’, 0, 10). Здесь вместо both можно использовать отдельно post и page, то есть выводить оценки постов, страниц отдельно или вместе. Значение 0 — минимальная оценка для отображения в списке, 10 — количество выводимых постов.

Пост с самым большим рейтингом по тегу

<?php if (function_exists('get_highest_rated_tag')): ?>
   <ul>
      <?php get_highest_rated_tag(TAG_ID); ?>
   </ul>
<?php endif; ?>

По умолчанию параметры функции следующие get_highest_rated_tag(TAG_ID, ‘both’, 0, 10). Здесь последние значения идентичны предыдущему примеру, а вот в качестве TAG_ID нужно указать ID тега, для которого выводится список рейтинговых постов. Если хотите использовать несколько тегов, то вместо одного значения добавляете массив array(1, 2, 3).

Самый оцениваемая запись в категории

<?php if (function_exists('get_most_rated_category')): ?>
   <ul>
      <?php get_most_rated_category(CATEGORY_ID); ?>
   </ul>
<?php endif; ?>

По умолчанию синтаксис функции get_most_rated_category(CATEGORY_ID, ‘both’, 0, 10). Здесь для CATEGORY_ID указывает номер категории, можно использовать массив array(4, 5, 6). Для постов вместо ‘both’ ставим ‘post’, 0 — минимальное количество голосов для отображения, 10 — число выводимых записей.

Список лучших публикаций по средней оценке за период

<?php if (function_exists('get_highest_score_range')): ?>
   <ul>
      <?php get_highest_score_range('1 day'); ?>
   </ul>
<?php endif; ?>

По умолчанию функция имеет вид — get_highest_score_range(‘1 day’, ‘both’, 10). Как видимо, количество дней для периода нужно указывать обязательно. При этом можно использовать значения по типу 2 days, 1 month. 10 — число записей, ‘both’ — их формат (посты + страницы).

Отображение рейтинга без голосования

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

<?php if(function_exists('the_ratings')) { 
echo expand_ratings_template('<span class="rating">%RATINGS_IMAGES%</span> <strong>%RATINGS_USERS% votes</strong>', get_the_ID()); 
} ?>

Здесь переменная RATINGS_IMAGES отвечает за вывод графики («звездочек»), а вместо RATINGS_USERS подставляется значению рейтинга. Размещаете функцию в файле шаблона, где хотите показывать результаты, точно также как рассказывалось про отображение кода выше (т.е. внутри цикла if have_posts). Кстати, в админке в разделе настроек модуля на странице Post Ratings Templates найдете список всех возможных переменных.

В целом ничего сложно нет, но кое какие хаки и мысли по модификации плагина я уже успел воплотить в жизнь как здесь, так и на Дизайн Мании. Подробный разбор исходников и некоторых функций плагина WP-PostRatings смотрите в следующей заметке — но там информация больше для продвинутых пользователей, начинающим и вообще в 90% случаев достаточно этой статьи и описания на официальном сайте.

Рейтинг с помощью кнопки Лайк

Рейтинг с кнопкой Лайк

В качестве альтернативы, если вам требуется организовать рейтинг с помощью кнопки Лайк, можете воспользоваться плагином Like Button Rating. Плагин предоставляет мгновенную статистику, 28 готовых тем, 140 иконок и позволяет сортировать материалы по лайкам. Работает с постами, страницами, товарами WooCommerce, BuddyPress, bbPress и комментариями.

P.S. Постовой. Новый полезные сайт для работников Forex рынка, где найдете рейтинг форекс брокеров а также много другой ценной информации по теме.

рейтинг Оцените статью:
Ужасная статьяНичего интересногоТак себеНормальноХорошоКлассный постВ закладки!
(голосов - 934, средний балл: 5,79 из 7)
Загрузка...

категория Категории: Оптимизация; Плагины;
теги Теги: , , , , , , , .

комментариев 298 к статье “Плагин WP-PostRatings рейтинга постов в WordPress”

  • Jake   14.05.2011

    Мне тоже пришлось отказаться от WP-PostViews, при 4-5k униках он иногда «валил» сервер.
    Пробовал устанавливать функцию от Kama, о которой говорили выше. Но как я понял — метод подсчета там не сильно отличается от плагина и проблема соответственно не решилась. Впрочем Тимур (Kama) сам не рекомендует эту функцию для высокопосещаемых проектов.

    Ну а от WP-PostRatings вообще грех отказываться :) Да и сведений о серверных нагрузках с его стороны ни разу не встречал.

  • Otshelnik-Fm   16.05.2011

    А не подскажете существуют ли надстройки для этого плагина — которые расширяют его функционал?

    Еще интересует как в версии WP-PostRatings 1.40 сделать поддержку вывода по самым рейтинговым записям по меткам (в версии 1.60 добавлено- но тогда под него и блог нужно обновлять). Обновлять не хочу — нужна функция эта. (по категориям не предлагать — нужен вывод именно по меткам)

    get_highest_rated_tag(TAG_ID) — эта функция не поддерживается в 1.40 версии. Помогите внедрить её туда

  • Otshelnik-Fm   16.05.2011

    извиняюсь. в версии 1.40 ищем файл postratings-stats.php и добавляем:

    ### Function: Display Highest Rated Page/Post By Tag ID
    if(!function_exists(‘get_highest_rated_tag’)) {
    function get_highest_rated_tag($tag_id = 0, $mode = », $min_votes = 0, $limit = 10, $chars = 0, $display = true) {
    global $wpdb;
    $ratings_max = intval(get_option(‘postratings_max’));
    $ratings_custom = intval(get_option(‘postratings_customrating’));
    $output = »;
    if(is_array($tag_id)) {
    $tag_sql = «$wpdb->term_taxonomy.term_id IN («.join(‘,’, $tag_id).’)’;
    } else {
    $tag_sql = «$wpdb->term_taxonomy.term_id = $tag_id»;
    }
    if(!empty($mode) && $mode != ‘both’) {
    $where = «$wpdb->posts.post_type = ‘$mode'»;
    } else {
    $where = ‘1=1’;
    }
    if($ratings_custom && $ratings_max == 2) {
    $order_by = ‘ratings_score’;
    } else {
    $order_by = ‘ratings_average’;
    }
    $temp = stripslashes(get_option(‘postratings_template_highestrated’));
    $highest_rated = $wpdb->get_results(«SELECT DISTINCT $wpdb->posts.*, (t1.meta_value+0.00) AS ratings_average, (t2.meta_value+0.00) AS ratings_users, (t3.meta_value+0.00) AS ratings_score FROM $wpdb->posts LEFT JOIN $wpdb->postmeta AS t1 ON t1.post_id = $wpdb->posts.ID LEFT JOIN $wpdb->postmeta AS t2 ON t1.post_id = t2.post_id LEFT JOIN $wpdb->postmeta AS t3 ON t3.post_id = $wpdb->posts.ID INNER JOIN $wpdb->term_relationships ON ($wpdb->posts.ID = $wpdb->term_relationships.object_id) INNER JOIN $wpdb->term_taxonomy ON ($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id) WHERE t1.meta_key = ‘ratings_average’ AND t2.meta_key = ‘ratings_users’ AND t3.meta_key = ‘ratings_score’ AND $wpdb->posts.post_password = » AND $wpdb->posts.post_date posts.post_status = ‘publish’ AND $wpdb->term_taxonomy.taxonomy = ‘post_tag’ AND $tag_sql AND t2.meta_value >= $min_votes AND $where ORDER BY $order_by DESC, ratings_users DESC LIMIT $limit»);
    if($highest_rated) {
    foreach($highest_rated as $post) {
    $output .= expand_ratings_template($temp, $post->ID, $post, $chars).»\n»;
    }
    } else {
    $output = ».__(‘N/A’, ‘wp-postratings’).».»\n»;
    }
    if($display) {
    echo $output;
    } else {
    return $output;
    }
    }
    }

    ### Function: Display Lowest Rated Page/Post By Tag ID
    if(!function_exists(‘get_lowest_rated_tag’)) {
    function get_lowest_rated_tag($tag_id = 0, $mode = », $min_votes = 0, $limit = 10, $chars = 0, $display = true) {
    global $wpdb;
    $ratings_max = intval(get_option(‘postratings_max’));
    $ratings_custom = intval(get_option(‘postratings_customrating’));
    $output = »;
    if(is_array($tag_id)) {
    $tag_sql = «$wpdb->term_taxonomy.term_id IN («.join(‘,’, $tag_id).’)’;
    } else {
    $tag_sql = «$wpdb->term_taxonomy.term_id = $tag_id»;
    }
    if(!empty($mode) && $mode != ‘both’) {
    $where = «$wpdb->posts.post_type = ‘$mode'»;
    } else {
    $where = ‘1=1’;
    }
    if($ratings_custom && $ratings_max == 2) {
    $order_by = ‘ratings_score’;
    } else {
    $order_by = ‘ratings_average’;
    }
    $temp = stripslashes(get_option(‘postratings_template_highestrated’));
    $lowest_rated = $wpdb->get_results(«SELECT DISTINCT $wpdb->posts.*, (t1.meta_value+0.00) AS ratings_average, (t2.meta_value+0.00) AS ratings_users, (t3.meta_value+0.00) AS ratings_score FROM $wpdb->posts LEFT JOIN $wpdb->postmeta AS t1 ON t1.post_id = $wpdb->posts.ID LEFT JOIN $wpdb->postmeta AS t2 ON t1.post_id = t2.post_id LEFT JOIN $wpdb->postmeta AS t3 ON t3.post_id = $wpdb->posts.ID INNER JOIN $wpdb->term_relationships ON ($wpdb->posts.ID = $wpdb->term_relationships.object_id) INNER JOIN $wpdb->term_taxonomy ON ($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id) WHERE t1.meta_key = ‘ratings_average’ AND t2.meta_key = ‘ratings_users’ AND t3.meta_key = ‘ratings_score’ AND $wpdb->posts.post_password = » AND $wpdb->posts.post_date posts.post_status = ‘publish’ AND $wpdb->term_taxonomy.taxonomy = ‘post_tag’ AND $tag_sql AND t2.meta_value >= $min_votes AND $where ORDER BY $order_by ASC, ratings_users DESC LIMIT $limit»);
    if($lowest_rated) {
    foreach($lowest_rated as $post) {
    $output .= expand_ratings_template($temp, $post->ID, $post, $chars).»\n»;
    }
    } else {
    $output = ».__(‘N/A’, ‘wp-postratings’).».»\n»;
    }
    if($display) {
    echo $output;
    } else {
    return $output;
    }
    }
    }

    После этого
    вам станет доступна функция вывода по меткам:

  • Марина13   06.06.2011

    подскажите где настроить русский текст для плагина
    чтобы вместо No Ratings Yet выводилось еще нет рейтинга

  • Tod   06.06.2011

    Марина13, в адмике ворпдресс в меню слева в блоке Rating поищите пункт Rating Templaters — там можно изменить надписи.

  • Alexandr   16.06.2011

    А что вы думаете об аналогичном плагине GD Star Rating

  • artmin   27.07.2011

    Скажите пожалуйста, я установил этот плагин и активировал в админке. В статьях ничего не появляется. Что-то нужно «доделать руками» в коде?

  • Tod   28.07.2011

    artmin, внимательно читаем статью — там же все написано какой код нужно добавить в шаблон для отображения.

  • Михаил   06.08.2011

    Здравствуйте.
    Подскажите пожалуйста, установил плагин WP-PostRatings, все как написано. В отдельном посте звездочки для нажатия появляются, но я хотел бы чтобы они были видны на главной странице (не заходя в сам пост), все перепробовал но ни как не получается.

    Подскажите как это сделать.
    Спасибо.

  • Tod   10.08.2011

    Михаил, нужно добавить код плагина также в файлы шаблона, которые отвечают за отдельные страницы — index.php и archive.php.

  • Михаил   10.08.2011

    Tod спасибо, поставил, но все равно не появляется.

    А куда лучше вставить код на странице index.php, так как там нет ?

    Спасибо.

  • Tod   11.08.2011

    Михаил, добавлять нужно внутрь цикла в любое место после while, например у меня выводится рядом с отображением категорий и тегов к статье. Если не отображается, что-то сделать неправильно, попробуйте еще разок все пошагово проделать.

  • Михаил   11.08.2011

    Tod, я не найду на странице index.php слово «while».
    Что нужно сделать?

  • Tod   12.08.2011

    Михаил, нужно разобраться в файле index.php, посмотреть где код который выводит заголовок title, дальше будет отображение контента записи the_content или the_excerpt, а после низ можно попробовать добавить. В любом случае нужно разбираться, пробовать, смотреть что получилось, все шаблоны разные.

  • Виталий   12.09.2011

    Плагин WP-PostRatings, версия 1.62, WordPress — 3.0.4 на блоге не работает.
    Код в файле single.php —
    Код:
    <?php if(function_exists('the_ratings')) { echo 'Рейтинг:‘; the_ratings(); echo »; } ?>
    Плагин активирован. Под заметкой появилась надпись: Рейтинг и звёздочки серого цвета (неактивные), но сделать выбор невозможно.
    Кто знает, подскажите в чём причина. Заранее благодарен.

  • Tod   13.09.2011

    Виталий, по описанию очень похоже на то, что в файле footer.php не хватает кода:

    <?php wp_footer(); ?>

    Добавьте его перед закрывающимся body. Либо может также понадобиться в файле header.php разместить:

    <?php wp_head(); ?>
  • Виталий   13.09.2011

    Tod, большое спасибо за помощь! Оказалось достаточным добавления кода в footer.php. Всё заработало. Самое интересное, что версия этого файла 1.40, на WordPress V.2.7, работает без добавления кода в footer и header

  • Виталий   13.09.2011

    Поспешил, я обрадоваться. Это помогло только в браузере Google Chrome, в остальных браузерах (IE, Mozilla и Opera) звёздочки как были серого цвета (неактивные), тек и остались и сделать выбор соответственно невозможно. Даже не видят, результатов голосования, сделанного в Chrome. Добавление кода в header.php никак не повлияло.

  • Tod   15.09.2011

    Виталий, сложно сказать в чем тогда сложность, может какая-то несовместимость версий, установите wordpress постарше и плагин поновее.

  • Татьяна   16.09.2011

    Добрый день!
    Помогите разобраться. Решила поставить в блог (версия WP 2.2.1) плагин WP-PostRatings. Залила в нужную папку плагинов. Но в админке сайте ничего не произошло. Плагин не проявился и поэтому активировать его не могу.

  • Иван Шипилов   18.09.2011

    А как сделать так, чтобы звездочки стояли после слов «оцените статью», т.е. справа?
    А то у меня звездочки стоят на следующей строчке…

  • Tod   19.09.2011

    Татьяна, проверьте туда ли вы залили файлы плагина, может быть при разархивировании создали случайно вложенную папку WP-PostRatings и система не видит файлов. Кстати можно поискать и установить этот плагин из соответствующего раздела внутри админки wordpress.

  • Tod   19.09.2011

    Иван, все через стили css и свойство display: inline. В моем случае использовался такой код:

    .post-ratings, .post-ratings img {
     line-height: 12px;
     font-size: 11px;
     display: inline;
     padding-top: 3px !important; 
     vertical-align: top !important;
    }
  • Иван Шипилов   19.09.2011

    Tod, добавил это в style.css, что-то не помогает :(

  • Tod   20.09.2011

    Иван, я привел пример кода, грубо говоря, где display: inline убирает перенос на следующую строку. Развить это в код подходящий для вашего шаблона придется самостоятельно, так как стили могут быт другие. Кроме того, этот стиль нужно добавить в шаблон отображения звездочек, который задается в админке. Как вариант можно сохранить страницу этого блога на компьютер и посмотреть как сделано у меня — html код для вывода звездочек + стили.

  • Иван Шипилов   20.09.2011

    Я сделал проще, через тэг table

  • Максим   04.10.2011

    Использую GD Star Rating, на мой взгляд очень-ооочееень прожорлив, собираюсь поменять на WP Post Ratings.
    Может кто посоветует что все-таки лучше (шустрее и практичней)? И стоит ли менять, а то жалко терять голоса проголосовавших.

  • Tod   06.10.2011

    Максим, не знаю, кто из них более прожорлив, пока что с WP Post Ratings проблем не было.

  • Бесславный тролль   14.11.2011

    Установлю себе.

  • Олег   24.11.2011

    Добрый день!
    Можно ли заставить плагин понимать и выводить популярные посты с произвольными полями, если они есть в постах? То есть не просто ссылку на пост, а ссылку с произвольным полем, если оно есть в этом посте. Почти как полноценный пост.
    Прошу прощения, если не совсем понятно о чем я спрашиваю))
    Спасибо.

Оставить комментарий


Блог Wordpress Inside поможет вам научиться работать в вордпресс, закрепить и расширить имеющиеся знания. Плагины и шаблоны, разные хаки и функции wp, оптимизация и безопасность системы – все это и намного больше вы сможете найти на страницах нашего проекта!

Если хотите быстро и оперативно получать последние новости и статьи, то рекомендуем подписаться на обновления блога:

Поиск:
Последние посты
Лучшее в категории

Облако тегов
Скажи свое мнение!

В чем основные плюсы Wordpress?

Посмотреть результаты

Загрузка ... Загрузка ...
Друзья проекта
Последние новости