Нестандартная сортировка записей в WordPress
В ходе работы над очередным сайтом на базе WordPress (для производственной компании «ВятМех») понадобилось реализовать вывод самых популярных записей из определённой рубрики (в данном случае — каталог продукции). Обычно для этих целей достаточно функции известного плагина WP-PostViews, но он, увы, выводит «рейтинг» только в виде текстовых ссылок на соответствующие посты. Можно было бы переделать вывод плагина (благо, код там вполне понятный), но я это дело не люблю: во-первых, после обновления плагина придётся всё делать заново (мало ли чего там автор перелопатит), а во-вторых, сделать самому — на порядок интересней.
В ходе раскопок «Кодекса» выяснилось, что с некоторых пор у WordPress есть возможность сортировки выборки query_posts по произвольным полям. А упомянутый плагин WP-PostViews как раз эти самые поля для хранения счётчика просмотров и использует. В результате получилось вот такая функция сортировки записей WordPress по количеству просмотров:
4, 'cat' => 6, 'meta_key' => 'views', 'meta_compare' => '>=', 'meta_value' => 0, 'orderby' => 'meta_value_num', 'order' => 'DESC');
query_posts($args);
if ( have_posts() ) while ( have_posts() )
{
the_post();
// далее собственно выводим запись в нужном формате
}
?>
Аргументы в query_posts я специально передаю в виде массива — так понятнее, что и как делается. Ключевая запись здесь 'meta_key' => 'views'
— она указывает, что сортировать нужно по мета-полю views
. Также обратите внимание на параметры 'meta_compare'
и 'meta_value'
— они указывают, что сравниваться значения нашего поля будут с нулём (назначения знака '>='
, думаю, понятно).
Приведённый код выведет 4 записи из рубрики с ID=6, для которых поле views
больше или равно нулю/ При этом записи с наибольшим чистом просмотров будут выведены первыми.
14 комментариев
Спасибо! Я с помощью приведенной выборки сделал свой rss канал с лучшими материалами.
на сколько я понимаю, для сортировки используется параметр orderby=поле
А как можно отсортировать по двум полям одновременно. Например, чтобы сначала записи отсортировались по авторам, а у каждого автора были отсортированы по дате?