我正在尝试创建一个左侧导航菜单,其中包含两个自定义帖子类型的不同分类列表。例如,左侧菜单可能如下所示。。。
<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标签,如果没有分配给分类法的帖子,就不要出现。如何在WordPress循环中(就在之前和之后)以某种方式获得开头的h2标题和ul包装,而让else/endif语句不打印任何内容(如果没有该分类法的帖子,则不打印任何内容)?
最合适的回答,由SO网友:James Shedden 整理而成
启动循环时,按如下方式将其拆分:
<?php if (have_posts()) : ?>
<?php while (have_posts()) : the_post(); ?>
<!-- do stuff ... -->
<?php endwhile; ?>
<?php endif; ?>
如果have\\u posts为true,则if语句内部但while语句外部的任何内容都将运行,但不会针对每个Post循环。
此外,建议您使用WP\\u Query,而不是Query\\u posts-see here for more information. 请确保在查询后重置循环-建议这样做here 使用wp\\u查询时,wp\\u reset\\u postdata是最佳选项。
总之,你应该这样写:
<?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(); ?>
希望有帮助!