Как правильно вклинить дополнительный цикл в тему WordPress

При создании темы WordPress иногда бывает необходимость вставить цикл в сайдбар или вывести несколько постов новостей на главной.

Способов как вставить новую ветку цикла очень много, но некоторые из них могут вызывать конфликт системы, в результате чего могут возникать разного рода баги. Предлагаю вашему вниманию собственный вариант вставки цикла в любое место в теме:

<?php
global $post;
$tmp_post = $post;
global $more;
$tmp_more = $more;
$tpost=get_posts('cat=4&showposts=5');
if($tpost):
?>
<?php foreach( $tpost as $post ) : setup_postdata($post); ?>
<a href="<?php the_permalink();?>"><?php the_title();?></a>
<?php $more=0; the_content(""); ?>
<?php endforeach;?>
<?php endif; $post=$tmp_post; $more=$tmp_more;?><?php wp_reset_query(); ?>

 

Давайте разберём код построчно:

global $post;
$tmp_post = $post;
global $more;
$tmp_more = $more;

Тут мы заносим значения глобальных переменных global $post - хранит информацию о текущем посте, странице, категории и т. д. - информацию, которую записал туда основной цикл

global $more - это значение true/false (показывать/нет) весь текст. false - будет обрезать контент до тега <!--more-->

$tpost=get_posts('cat=4&showposts=5'); - создаём новую выборку, категория 4, показывать 5 постов

if($tpost): - проверяем на наличие хотя бы одной записи в выборке

<?php foreach( $tpost as $post ) : setup_postdata($post); ?> - проходим всю выборку в цикле WordPress

функция setup_postdata($post); позволяет занести данные в глобальные переменные $id, $authordata, $currentday, $currentmonth, $page, $pages, $multipage, $more, $numpages , что позволит нам использовать напрямую: <?php the_permalink();?>, <?php the_title();?>, <?php $more=0; the_content(""); ?>

Без использования функции выше пришлось бы писать более сложные функции получения и вывода информации о ссылке, контенте и т. д.

<a href="<?php the_permalink();?>"><?php the_title();?></a> - выводим ссылку на пост и его заголовок

<?php $more=0; the_content(""); ?> - указываем что нужно обрезать текст до тега <!--more--> и выводим текст

<?php endforeach;?> - закрываем цикл

<?php endif; $post=$tmp_post; $more=$tmp_more;?> - возвращаем значения для текущей страницы в глобальную переменную

<?php wp_reset_query(); ?> - чистим после себя

 

Вставка собственного цикла в WordPress позволяет выводить на главной и внутренних страницах новости и статьи в сайдбаре, фотогалерею и многое дргое.

Этот пример использования нового цикла в теме WordPress позволяет выводить информацию в любую часть страницы: сайдбар, шапка, футер, главная страница или любая другая страница, категория, метка и т. д.

С помощью этого цикла можно вклинивать цикл в цикл wordpress, вот примерно так:

<?php if (have_posts()) : while (have_posts()) : the_post(); ?>

<h1><?php the_title(); ?></h1>
<div class="txt2">
<?php the_content(''); ?>
</div><!--txt2-->

<?php
global $post;
$tmp_post = $post;
global $more;
$tmp_more = $more;
$tpost=get_posts('cat=4&showposts=5');
if($tpost):
?>
<?php foreach( $tpost as $post ) : setup_postdata($post); ?>
<a href="<?php the_permalink();?>"><?php the_title();?></a>
<?php $more=0; the_content(""); ?>
<?php endforeach;?>
<?php endif; $post=$tmp_post; $more=$tmp_more;?><?php wp_reset_query(); ?>

<?php endwhile; endif; ?>

Вот так просто можно вставить несколько веток цикла в основной цикл на WordPress.

 

На этом у меня пока всё, всем спасибо за внимание.

В интернете нас ищут по запросам: вставить цикл в цикл WordPress, вставить цикл в сайдбар, вывести ветку на главной, вывести новости на главной WordPress.

Комментарии к записи «Как правильно вклинить дополнительный цикл в тему WordPress»:
  1. Санёёёк:

    Чёт сильно всё запутано у тебя в этих вставках цикла. Куча кода и минимум пояснения.

    • admin:

      Что именно не понятно? Берешь самый первый код и вставляешь себе на сайт.
      ХТМЛ вывод это вот
      <a href="<?php the_permalink();?>"><?php the_title();?></a>
      <?php $more=0; the_content(""); ?>
      вставляешь в нужные теги и пишешь стили к ним.

      Вот это $tpost=get_posts('cat=4&showposts=5'); меняешь на то что тебе нужно, например если у тебя ид категории 8 которую надо вывести то вместо cat=4 пишешь cat=8

      Вроде все. Благодаря первому коду ти можешь сделать любую ветку цикла WordPress, то есть благодаря этому коду ты можешь добавить или вставить цикл в тему WordPress

    • Nataxa:

      Извините за нескромный вопрос, но вы программированием сколько дней занимаетесь. Или у вас этот процесс пока не на дни а часы считается?? :))
      Создание ветки у ВордПресс на основе get_posts это классика жанра. Ей не пользуется только ленивый или горе программисты, после которых приходится все чистить.
      Надо стремиться делать все правильно, вот автор вам и описал правильное решение для вставки цикла в wordpress

Сделать заказ
Онлайн помощь по WordPress