自定义POST类型循环前后的控制内容

时间:2013-05-17 作者:mcseay

我正在尝试创建一个左侧导航菜单,其中包含两个自定义帖子类型的不同分类列表。例如,左侧菜单可能如下所示。。。

<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语句不打印任何内容(如果没有该分类法的帖子,则不打印任何内容)?

1 个回复
最合适的回答,由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(); ?>
希望有帮助!

结束

相关推荐

Looping taxonomy in taxonomy?

所以我有一个CPT的参考文献(就像一个音乐的字典格式)。其中有两种分类法:medium_reference 和reference_letter.这个reference_letter 列出字母A-Z,而medium_reference 按引用类型(人员、术语、公司)列出。我想知道是否有可能遍历每个字母,然后在该循环中遍历各个术语。类似这样的情况(无论如何都不可能):$reference_letters = get_the_terms($post->ID,\'reference_letter\');&#