Как сортировать сообщения по просмотрам, комментариям, рейтингу и т. Д. WordPress - PullRequest
2 голосов
/ 25 июля 2010

Ребята, мне нужен способ сортировки моих постов по просмотрам, оценкам, комментариям. Я ищу множество плагинов, но все они глючные.

Я хочу что-то подобное. сортировка http://img138.imageshack.us/img138/2577/sorting.png

Ответы [ 2 ]

5 голосов
/ 07 сентября 2011

Для разделения различных способов сортировки вы можете использовать что-то вроде 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, может делать трюки для хранения рейтингов, и тогда вы можете использовать функцию, аналогичную приведенной выше.

Надеюсь, это поможет!

1 голос
/ 26 июля 2010

Вам нужно будет написать свои собственные запросы в Wordpress. Это подразумевает освоение PHP и API Wordpress.

Хорошая отправная точка: http://codex.wordpress.org/Displaying_Posts_Using_a_Custom_Select_Query

Что касается способов сортировки, то сначала вам нужно будет захватить просмотры и оценки. Моя интуиция говорит, что вы можете хранить все в пользовательских полях - так что ознакомьтесь с таблицей post_meta. Вот некоторые мысли из головы:

Самые просматриваемые: в файл single.php каждый раз при загрузке сообщения обязательно добавляйте настраиваемое поле, которое увеличивается на единицу. Используйте это настраиваемое поле в запросе ORDER BY.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...