Очень часто у меня на блоге задают похожий вопрос. Как сделать как у вас в сайдбаре популярные записи, как сделать вывод статей на главную с определенной рубрики или по тегу. Все это решается с помощью одной из самых важных функций в wordpress, а именно query. Сегодня я расскажу о этой функции, дам примеры как выводить что угодно и куда угодно в wordpress. Собственно, без этой функции не обходится не один маломальски «не блоговый» сайт на wordpress.
Собственно, сама функция описана . Служит она для того, чтобы вытягивать с базы данных нужные записи по определенным параметрам и выводить их в произвольном месте вашего сайта вне основного цикла статей. Ну, как пример, вы хотите в сайдбаре сделать вывод 5 последних статей с определенной рубрики.
Сам блок будет выглядеть приблизительно так
<?php $the_query = new WP_Query(); ?> <?php while ($the_query->have_posts() ) : $the_query->the_post(); ?> //Тут будет вывод самого цикла <?php endwhile; ?> <?php wp_reset_postdata();?>
Вот здесь new WP_Query(), в скобочках будем указывать параметры выборки. В нашем случае, нам нужно вывести 5 статей с рубрики. Допустим это будет рубрика с ярлыком best. Сам ярлык можно глянуть в Записи — Рубрики, там увидите название рубрики, а под ней ярлык. Теперь напишем параметры, первая строка блока будет выглядеть так
<?php $the_query = new WP_Query('category_name=best&showposts=5'); ?>
Мы можем выводить сразу с нескольких рубрик, тогда это будет выглядеть так
$the_query = new WP_Query( 'category_name=staff,news' );
Или наоборот, сделать так, чтобы выводились посты всех рубрик, кроме определенных, тогда нужно ставить минус перед id рубрики. Это будет выглядеть так
$the_query = new WP_Query( 'cat=-12,-34,-56' );
Обратите внимание, что при таких параметрах нужно указывать ID рубрики, а не ярлык.
Тоже самое можно проделывать и с другими параметрами, например метками.
$the_query = new WP_Query( 'tag=cooking' );
Подобный код будет выводить записи с меткой cooking. В самом кодексе полно других параметров, приведу несколько наиболее часто используемых.
$the_query = new WP_Query( 'p=7' );
Такая строка делает выборку с одного поста. 7 — это id самого поста.
$the_query = new WP_Query( 'post_parent=93' );
Делает выборку всех подстраниц страницы с ID=93
$the_query = new WP_Query( 'posts_per_page=3' );
posts_per_page — параметр, который позволяет разбивать статьи на страницы, в данном случае по 3 статьи на страницу.
Часто при пагинации таких записей могут быть проблемы. При заходе на 2, 3 и т.д. страницу получите 404 ошибку. В основном их можно избежать добавив такой параметр
$the_query = new WP_Query( 'paged=' . get_query_var( 'page' ) );
Еще один полезный параметр, случайный порядок вывода.
$the_query = new WP_Query( 'orderby=rand' );
Например, при помощи него можно выводить 3 случайных статьи с определенной рубрики, код будет выглядеть так.
$the_query = new WP_Query( 'category_name=best&showposts=3&orderby=rand' );
& — это символ, который ставится между параметрами. Т.е., как видите можно задавать сразу несколько параметров.
Еще один интересный параметр, позволяет выводить только прикрепленные записи
$the_query = new WP_Query(array ('post__in' => get_option('sticky_posts')) );
На этом с параметрами остановимся. Разберем подробней самый первый пример, в котором нужно было вывести 5 последних статей с определенной рубрики. Напомню, сами параметры мы передадим так
$the_query = new WP_Query('category_name=best&showposts=5');
Но этими параметрами мы просто передаем команду движку выбрать нужные записи с базы данных. Теперь нам нужно создать цикл и поместить в него то, что нам нужно выводить. Допустим, это будет просто список названий статей и ссылки на них. Теперь пропишем весь код целиком.
<?php $the_query = new WP_Query('category_name=best&showposts=5'); ?> <?php while ($the_query->have_posts() ) : $the_query->the_post(); ?> <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a><br /> <?php endwhile; ?> <?php wp_reset_postdata();?>
Вот и все дела. Если будут желающие, пишите в комментариях, я напишу подробно как сделал блок лучших записей у себя в сайдбаре, где еще рассмотрю как делать автоматические миниатюры, а также автоматическую генерацию анонсов на заданное кол-во символов.
Ну а если надоело сидеть сегодня за компом и делать сайты, то можно бы развлечься и сходить в клуб, потанцевать, позажигать, пообщаться с веселой компанией. А может вообще задуматься о карьере диджея? Правда, для начала нужно узнать как стать диджеем, научиться в специализированной школе, обрести опыт выступлений. И кто знает, может сейчас в вас родится новый виртуозный DJ.
Понравилась статья? - Подпишись.
Или поделись полезным с миром
Похожие статьи:
А как вывести предпоследний пост? или допустим 3 или 4 с конца?
для этого в параметрах нужно указать offset=2 или число постов, которое вы хотите пропустить
Добрый день,
напишите как выводить, новые статьи категории, которая открыта. Я пробовал
вот так:
$the_query = new WP_Query(‘news&showposts=7’); не помогло.
что за параметр news? такого вроде нет, чтобы выводить с определенной категории, нужно указать cat=1,2 и т.д., 1 и 2 — это id рубрик
У меня все работает только в гугл хром. В опере и фф пост не выводится.
пример кода:
<?php $the_query = new WP_Query(); $the_query->query(‘p=23’);
while ($the_query->have_posts()) : $the_query->the_post();
the_title();
the_content();
endwhile; ?>
<?php wp_reset_postdata();?>
Скажите, пожалуйста, в чем может быть проблема?
прошу прощения, вот код
<?php $the_query = new WP_Query(‘p=21’);
while ($the_query->have_posts()) : $the_query->the_post();
the_title();
the_content();
endwhile;
wp_reset_postdata();?>
в вашем коде ошибки нет. И wordpress не работает так, что в одном браузере работает, в другом нет. Код или срабатывает, или нет, или выводит фатал эррор. Так что, скорее всего у вас ошибка в верстке и css
Спасибо, все оказалось как всегда просто) не опубликовал запись)
🙂
день добрый, подскажите код, чтобы выводилась в сайдбаре случайная запись из определенной рубрики.
Спасибо!
<?php $the_query = new WP_Query('cat=6&orderby=rand'); ?>
Вместо 6 ставите id нужной рубрики, ну а дальше цикл как в последнем коде
Здравствуйте, а не подскажите как выводить новости из определенной рубрики, но в обратном порядке. Не от нового поста к старому, а наоборот. Никак не могу разобраться как так сделать. Заранее спасибо!
в параметрах указываете order=ASC — это восходящий или order=DESC — это нисходящее сортирование. Для сортировки на основе даты также нужно указать orderby=date (но вроде по умолчанию сортировка на основе даты)
Спасибо! Очень интересную информацию пишите.
Здраствуйте, мне требуется разместить на главной 20 последних материалов с первого раздела и 20 последних со второго раздела. А также вывести 30 лучших материалов со всех разделов, и включающих в эти разделы категорий, так же на главной.
вордпресс изучаю всего неделю, и не очень понимаю в чем отличия WP_Query() от get_posts() который описывают подробно тут wp-kama.ru/function/query_posts
Какая из этих функций была бы менее требовательна, к ресурсам сервера?
можно сравнивать query_post и get_posts, а wp_query это что-то объединяющее. В вашем случае обычно юзают get_posts. Но нужно смотреть. Если вам нужно просто получить массив постов, то лучше get_posts, но если вам нужно, чтобы в этих постах была еще пагинация, учитывались прикрепленные посты, то лучше wp_query
Спасибо большое за помощь 🙂
Здравствуйте, как выводить статьи начиная со второй записи?
параметр offset=2, в цифре пишите какое кол-во статей пропустить
А как пагинацию сделать???
wp page navi
Спасибо, Ваши советы пригодились, вывела случайные 3 записи. Подскажите пожалуйста, код вывода трех похожих статей. Спасибо. И с наступившим 2015 годом!!!
да юзайте плагины. Contextual related posts к примеру. Разницы как вы подключаете код — через плагин или в файлы темы — нет.
А как сделать вывод 10 лучших по голосованию статей сайта (и чтоб голосовать могли только зарегистрированные пользователи)?
или ручками, но если знаний нет, то можно плагин. Мне kk star rating нравится, там также есть шорткод, который выводит лучшие записи
Здравствуйте.
Как сделать вывод определенных (выбранных мной в ручную) записей в виде списка, но не печатая код каждый раз, а выбирая их в админке, мб есть такой плагин?
Отличная статья, весь google перерыл в поисках решения своей проблемки.
Дело в том что хотел вывести случайные записи с определенной категории в single.php? с помощью
……..
но тогда на странице записи в TITLE выходит не название записи, а название категории. с помощью
have_posts() ) : $the_query->the_post(); ?>
//Тут будет вывод самого цикла
ПРОБЛЕМА РЕШИЛАСЬ. Спасибо!