Отборная информация, которая вставляет!

Произвольный вывод статей в wordpress

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


 

Похожие статьи:



27 комментариев к “Произвольный вывод статей в wordpress”

  1. А как вывести предпоследний пост? или допустим 3 или 4 с конца?

  2. Viktor:

    Добрый день,
    напишите как выводить, новые статьи категории, которая открыта. Я пробовал
    вот так:
    $the_query = new WP_Query(‘news&showposts=7’); не помогло.

    • ETNO:

      что за параметр news? такого вроде нет, чтобы выводить с определенной категории, нужно указать cat=1,2 и т.д., 1 и 2 — это id рубрик

  3. Илья:

    У меня все работает только в гугл хром. В опере и фф пост не выводится.
    пример кода:
    <?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();?>
    Скажите, пожалуйста, в чем может быть проблема?

  4. день добрый, подскажите код, чтобы выводилась в сайдбаре случайная запись из определенной рубрики.
    Спасибо!

  5. Андрей:

    Здравствуйте, а не подскажите как выводить новости из определенной рубрики, но в обратном порядке. Не от нового поста к старому, а наоборот. Никак не могу разобраться как так сделать. Заранее спасибо!

    • ETNO:

      в параметрах указываете order=ASC — это восходящий или order=DESC — это нисходящее сортирование. Для сортировки на основе даты также нужно указать orderby=date (но вроде по умолчанию сортировка на основе даты)

  6. Андрей:

    Здраствуйте, мне требуется разместить на главной 20 последних материалов с первого раздела и 20 последних со второго раздела. А также вывести 30 лучших материалов со всех разделов, и включающих в эти разделы категорий, так же на главной.

    вордпресс изучаю всего неделю, и не очень понимаю в чем отличия WP_Query() от get_posts() который описывают подробно тут wp-kama.ru/function/query_posts

    Какая из этих функций была бы менее требовательна, к ресурсам сервера?

    • ETNO:

      можно сравнивать query_post и get_posts, а wp_query это что-то объединяющее. В вашем случае обычно юзают get_posts. Но нужно смотреть. Если вам нужно просто получить массив постов, то лучше get_posts, но если вам нужно, чтобы в этих постах была еще пагинация, учитывались прикрепленные посты, то лучше wp_query

  7. Александр:

    Здравствуйте, как выводить статьи начиная со второй записи?

  8. А как пагинацию сделать???

  9. Спасибо, Ваши советы пригодились, вывела случайные 3 записи. Подскажите пожалуйста, код вывода трех похожих статей. Спасибо. И с наступившим 2015 годом!!!

    • ETNO:

      да юзайте плагины. Contextual related posts к примеру. Разницы как вы подключаете код — через плагин или в файлы темы — нет.

  10. Коляныч:

    А как сделать вывод 10 лучших по голосованию статей сайта (и чтоб голосовать могли только зарегистрированные пользователи)?

    • ETNO:

      или ручками, но если знаний нет, то можно плагин. Мне kk star rating нравится, там также есть шорткод, который выводит лучшие записи

  11. Здравствуйте.
    Как сделать вывод определенных (выбранных мной в ручную) записей в виде списка, но не печатая код каждый раз, а выбирая их в админке, мб есть такой плагин?

  12. Александр:

    Отличная статья, весь google перерыл в поисках решения своей проблемки.

    Дело в том что хотел вывести случайные записи с определенной категории в single.php? с помощью

    ……..

    но тогда на странице записи в TITLE выходит не название записи, а название категории. с помощью

    have_posts() ) : $the_query->the_post(); ?>
    //Тут будет вывод самого цикла

    ПРОБЛЕМА РЕШИЛАСЬ. Спасибо!

оставить отзыв

Если хотите вставить код в комментарии, то оберните его тегами ‹pre›‹/pre›