Для разделения различных способов сортировки вы можете использовать что-то вроде jQuery для создания области с вкладками, внутри каждой вы вызываете различную (php) функцию для соответствующей сортировки ваших сообщений и затем определяете эти функции php в вашем файле function.php.
Что касается функций - WordPress уже хранит количество комментариев к посту, но вам нужно будет получить его просмотр страницы / оценки. Во-первых, wp-postviews будет работать нормально - мы просто хотим что-то для хранения данных. Он поставляется с выделенными функциями для получения сообщений по популярности, которые вы можете использовать, но в случае, если вы хотели большей гибкости, я включил функции, ниже, которые сортируют по количеству просмотров или количеству комментариев:
Для сортировки по комментариям:
function get_most_commented($limit=10) {
global $wpdb;
$most_commented = $wpdb->get_results("SELECT comment_count, ID, post_title FROM $wpdb->posts WHERE post_type='post' AND post_status = 'publish' ORDER BY comment_count DESC LIMIT 0 , $limit");
foreach ($most_commented as $post) {
setup_postdata($post);
$id = $post->ID;
$post_title = $post->post_title;
$count = $post->comment_count;
$output .= '<li><a href="'. get_permalink($id).'">'.$post_title. '</a> </li>';
}
return $output;
}
Для сортировки по количеству просмотров
function get_most_visited($limit=10) {
global $wpdb;
$most_viewed = $wpdb->get_results("SELECT DISTINCT $wpdb->posts.*, (meta_value+0) AS views FROM $wpdb->posts LEFT JOIN $wpdb->postmeta ON $wpdb->postmeta.post_id = $wpdb->posts.ID WHERE post_type='post' AND post_date < '".current_time('mysql')."' AND post_status = 'publish' AND meta_key = 'views' AND post_password = '' ORDER BY views DESC LIMIT $limit");
foreach ($most_viewed as $post) {
$id = $post->ID;
$post_views = intval($post->views);
$post_title = get_the_title($post);
$post_title = $post->post_title;
$output .= '<li><a href="'. get_permalink($id).'">'.$post_title. '</a>
}
return $output;
}
Затем просто включите эти функции: get_most_visited()
и get_most_commented()
(с необязательным аргументом количества сообщений - по умолчанию 10) внутри тегов <ul>
или <ol>
. (Я включил, как получить количество комментариев / просмотров, если вы хотите их использовать - в противном случае вы можете удалить их)
Этот метод дает вам большую гибкость в том, как представлять сообщения. По сути - это позволяет легко стилизовать список с помощью некоторого базового стиля CSS или чего-то более изощренного с использованием jQuery.
Что касается пост-рейтингов, то плагин, такой как Post Star Ratings, может делать трюки для хранения рейтингов, и тогда вы можете использовать функцию, аналогичную приведенной выше.
Надеюсь, это поможет!