Расширенные возможности команды query_posts
Апр 15th, 2010 | От Aleksey Davlad | Категория: CMS WORDPRESS, ХАКИС развитием WordPress, выходом новых версий и более тщательным изучением матчасти, расширяются и возможности некоторых важных команд, в данном случае - query_posts. Вообще команда query_posts - одна из самых полезных во всех версиях WordPress. Именно эта команда, которая позволяет определять содержимое, которое запрашивается (извлекается из базы данных), а затем отображается в цикле WordPress. Она дает невероятно гибкий метод для поиска и фильтрации сообщений и страниц практически по любым параметрам, которые можно придумать вообще. В многих случаях данная команда может заменять навороченные плагины, громоздкие хаки и шорткоды. А по моему глубокому убеждению, именно с ее помощью восполняется минимум 60% недостатков WordPress в качестве полнофункциональной системы управления контентом.
В то же время не правильное использование query_posts в циклах, помимо основного без этой команды( например в сайдбарах ) может привести к потере правильной работы вывода и вы можете увидеть вещи, понять причину которых очень трудно. Поэтому, не забываем учить матчасть и смотреть в Кодекс WordPress, где не так давно цикл с query_posts приведен в следующем виде:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <?php //The Query query_posts('posts_per_page=5'); //The Loop if ( have_posts() ) : while ( have_posts() ) : the_post(); .. endwhile; else: .. endif; //Reset Query wp_reset_query(); ?> |
где wp_reset_query(); сбрасывает условия запроса через query_posts после выполнения в цикле.
Стандартное и простое применение команды читайте и смотрите в , там все достаточно просто.
А вот некоторые не совсем простые примеры приведу с пояснениями. Например:
1. Вывод постов по " относительной популярности" :
Относительная популярность поста определяется различными условно принятыми параметрами. Например, если предположить, что пост с большим количеством комментариев популярней поста с меньшим количеством, то ниже приведенный вариант кода будет выводить посты по рейтингу популярности:
1 2 3 4 5 6 | <?php // select posts ordered by comment_count $query = 'orderby=comment_count'; $queryObject = new WP_Query($query); // остальной код Вашего цикла ... ?> |
2. Выборка всех постов для карты сайта :
Есть несколько способов, чтобы выбрать все должности, которые когда-либо были опубликованы, и эти методы в основном используются для Sitemaps или страниц архивов. Все они подходят для Google. Ниже несколько вариантов с помощью query_posts:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <?php // вариант 1 $query = 'showposts=-1'; $queryObject = new WP_Query($query); // остальной код Вашего цикла ... // вариант 2 $query = 'posts_per_page=-1'; $queryObject = new WP_Query($query); // остальной код Вашего цикла ... // вариант 3 $query = 'nopaging=true'; $queryObject = new WP_Query($query); // остальной код Вашего цикла ... ?> |
3. Исключение дублирования постов через query_posts:
Масса вариантов применялись без query_posts через хаки и шорткоды. Вариант с query_posts не хуже:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | <?php // set the query $query = 'posts_per_page=10'; // loop 1 - display most recent 10 posts $queryObject = new WP_Query($query); if ($queryObject->have_posts()) { while ($queryObject->have_posts()) { bm_ignorePost($queryPost->post->ID); $queryObject->the_post(); the_title(); the_content(); } } // loop 2 - same query, get the next 10 posts $queryObject = new WP_Query($query); if ($queryObject->have_posts()) { while ($queryObject->have_posts()) { bm_ignorePost($queryPost->post->ID); $queryObject->the_post(); the_title(); the_content(); } } ?> |
4. Выборка прикрепленных постов или выборка без прикрепленных постов.
На самом деле все чуть сложнее. Используя функцию прикрепления постов можно классифицировать их по разному. И если нужна выборка только их или выборка всех, но без прикрепленных можно воспользоваться вариантами кода:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | // Только прикрепленных... <?php $query = array( 'post__in'=>get_option('sticky_posts') ); $queryObject = new WP_Query($query); // остальной код Вашего цикла ... ?> // Без прикрепленных... <?php $query = array( 'post__not_in' => get_option('sticky_posts') ); $queryObject = new WP_Query($query); // остальной код Вашего цикла ... ?> |
И еще много разных вариаантов применения, которые требуют изучения. Так что о чем писать будет.





