Intereting Posts

Контролировать содержимое до и после настраиваемого цикла post post

Я пытаюсь создать левое навигационное меню, содержащее несколько различных таксономических списков настраиваемого типа сообщений. Например, левое меню может выглядеть так …

<h2>New Stuff</h2> <ul> <li>Item 3</li> <li>Item 4</li> </ul> <h2>Old Stuff</h2> <ul> <li>Item 2</li> <li>Item 1</li> </ul> 

Ниже приведен код, который у меня есть в моем шаблоне боковых панелей …

 <h2>New Stuff</h2> <ul> <?php $args = array( 'post_type' => 'stuff', 'taxonomy' => 'stuff-type', 'term' => 'new-stuff', 'orderby' => 'date', 'order' => 'DESC', 'posts_per_page' =>-1 ); query_posts($args); if ( have_posts() ) : while ( have_posts() ) : the_post(); ?> <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li> <?php endwhile; ?> <?php else : ?> <?php endif; ?> </ul> <h2>Old Stuff</h2> <ul> <?php $args = array( 'post_type' => 'stuff', 'taxonomy' => 'stuff-type', 'term' => 'old-stuff', 'orderby' => 'date', 'order' => 'DESC', 'posts_per_page' =>-1 ); query_posts($args); if ( have_posts() ) : while ( have_posts() ) : the_post(); ?> <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li> <?php endwhile; ?> <?php else : ?> <?php endif; ?> </ul> 

Все это прекрасно работает, если мне не нужны теги h2 и ul, если нет должностей, назначенных для таксономии. Как я могу получить заголовок h2 и ul wrappers каким-то образом в цикле WordPress (как раньше, так и после), оставляя инструкцию else / endif печатать ничего (ничего не печатать, если нет сообщений для этой таксономии)?

Когда вы начинаете цикл, разделите его так:

 <?php if (have_posts()) : ?> <?php while (have_posts()) : the_post(); ?> <!-- do stuff ... --> <?php endwhile; ?> <?php endif; ?> 

Любое внутри оператора if, но вне оператора while будет выполняться, если has_posts истинно, но не будет Looped для каждого сообщения.

Кроме того, рекомендуется использовать WP_Query, а не query_posts – см. Здесь для получения дополнительной информации . Обязательно сбросьте цикл после запроса – здесь рекомендуется, чтобы wp_reset_postdata был лучшим вариантом при использовании WP_Query.

Итак, в заключение вы должны написать что-то вроде этого:

 <?php // Your arguments $args = array( 'post_type' => 'stuff', 'taxonomy' => 'stuff-type', 'term' => 'new-stuff', 'orderby' => 'date', 'order' => 'DESC', 'posts_per_page' =>-1 ); // Let's get the query, using WP_Query $loop = new WP_Query($args); // Check if there are posts for our query if ( $loop->have_posts() ) : ?> <h2>New Stuff</h2> <ul> <?php // Get looping while ( $loop->have_posts() ) : $loop->the_post(); ?> <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li> <?php endwhile; ?> </ul> <?php endif; ?> <?php wp_reset_postdata(); ?> 

Надеюсь, это поможет!