Wordpress - WP Postratings

P
На сайте с 21.01.2012
Offline
72
580

Здравствуйте!

Использую get_most_rated_range_category () для вывода самых популярных записей из категорий за промежуток времени.

Однако есть проблема: если запись в 2ух категориях - голоса умножаются на 2, если в 3ех - на 3 и т.п.

В самой функции автор упоминает что имеется такая проблема.

Вопрос: Может кто-то знает как ее решить? Например узнавать в каком количестве категорий запись и делить голоса на это число?

### Function: Display Most Rated Page/Post With Time Range By Category ID

if(!function_exists('get_most_rated_range_category')) {
function get_most_rated_range_category($time = '1 day', $category_id = 0, $mode = '', $limit = 10, $chars = 0, $display = true) {
global $wpdb;
$ratings_max = intval(get_option('postratings_max'));
$ratings_custom = intval(get_option('postratings_customrating'));
$min_time = strtotime('-'.$time, current_time('timestamp'));
$output = '';
if(is_array($category_id)) {
// There is a bug with multiple categoies. The number of votes will be multiplied by the number of categories passed in.
$category_sql = "$wpdb->term_taxonomy.term_id IN (".join(',', $category_id).')';
} else {
$category_sql = "$wpdb->term_taxonomy.term_id = $category_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_mostrated'));
$most_rated = $wpdb->get_results("SELECT COUNT($wpdb->ratings.rating_postid) AS ratings_users, SUM($wpdb->ratings.rating_rating) AS ratings_score, ROUND(((SUM($wpdb->ratings.rating_rating)/COUNT($wpdb->ratings.rating_postid))), 2) AS ratings_average, $wpdb->posts.* FROM $wpdb->posts LEFT JOIN $wpdb->ratings ON $wpdb->ratings.rating_postid = $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 rating_timestamp >= $min_time AND $wpdb->posts.post_password = '' AND $wpdb->posts.post_date < '".current_time('mysql')."' AND $wpdb->posts.post_status = 'publish' AND $wpdb->term_taxonomy.taxonomy = 'category' AND $category_sql AND $where GROUP BY $wpdb->ratings.rating_postid ORDER BY ratings_users DESC, $order_by DESC LIMIT $limit");
if($most_rated) {
foreach ($most_rated as $post) {
$output .= expand_ratings_template($temp, $post, null, $chars, false)."\n";
}
} else {
$output = '<li>'.__('N/A', 'wp-postratings').'</li>'."\n";
}
if($display) {
echo $output;
} else {
return $output;
}
}
}

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий