归档页面上的分类帖子

时间:2012-02-07 作者:Khey

您好,几天来,我一直在寻找一种完美的方式,用我的自定义帖子类型(track)和分类法(genre,sub\\u genre)来显示帖子。当用户转到http://sitename.com/genre/“sub\\u流派名称”,我希望该sub\\u流派的所有帖子都按照这些sub\\u流派分类法和内容进行分类。例如:。。

http://sitename.com/genre/hip_hop

Genre: West

初级测试跑道

Genre: Old School

歌曲3曲目

Rap标题曲目

歌曲2曲目

这是我正在使用的代码,但它的循环完全错误。。。

<?php if (have_posts()) : ?>
<?php while (have_posts()) : the_post();
$cam_brands = get_the_terms( $post->ID, \'sub_genre\' );?>
<?php foreach( $cam_brands as $brand ) : ?>
<h3 class="genre-title"> <?php echo $brand->name; ?> </h3>

<?php $wpq = array( \'post_type\' => \'track\', \'taxonomy\' => \'sub_genre\', \'term\' => $brand->slug, \'post_status\' => \'publish\',\'posts_per_page\' => -1, \'caller_get_posts\'=> 1 );
$brand_posts = new WP_Query ($wpq);?>
<ul>
<?php foreach( $brand_posts->posts as $post ) : ?>
<li> <?php echo $post->post_title; ?> <a class="sc-player" href="<?php echo get(\'soundcloud_link\'); ?>">track</a> </li>
<?php endforeach ?>
</ul>
<?php endforeach ?>
<?php endwhile; ?>
<?php endif; ?>
在体裁分类法中,而不是在sub\\u体裁中,它似乎经历了很多次foreach。

例如:。

Genre:West

初级测试跑道

Genre:Old School

歌曲3曲目

Rap标题曲目

歌曲2曲目

Genre:Old School

歌曲3曲目

Rap标题曲目

歌曲2曲目

Genre:Old School

歌曲3曲目

Rap标题曲目

歌曲2曲目

任何帮助都将不胜感激。我的php技能不是最好的,循环让我的大脑有点受伤。谢谢

1 个回复
最合适的回答,由SO网友:Stephen Harris 整理而成

What you are doing

你的foreach 嵌套在内部while (have_posts()) : the_post();. 这个while循环,循环浏览你的每一篇帖子(属于“hip\\u hop”类型)。

因此,对于“hip\\u-hop”类型中的每一篇帖子,您可以找到该帖子的分类术语“sub\\u”类型(这是$cam_brands). 然后,对于每个相关术语(在$cam_brands) 您获得了与该术语相关的所有帖子(或$brand).

你的决赛foreach 循环浏览每个帖子并显示它们。

What I think you are trying to do

我不知道WordPress是否有任何本地的、直接的方式可以将某个分类术语的所有帖子“拆分”到它的子项中。但下面的方法可以做到这一点(尽管不是特别有效)。

此外,“sub\\u流派”似乎是与“流派”不同的分类法,对吗?如果你想要一种亲子关系,你应该简单地把“流派”变成hierarchal taxonomy, 并以创建“子类别”的相同方式创建子类别。一旦你做到了这一点,以下应该与以下注意事项一起使用。

$term = get_queried_object();

//Get all children of this term;
$children = get_terms( \'genre\', 
    array(
        \'parent\'=>$term->term_id;
    ) ) ;

if($children):
    //We have an array of child (of current genre) terms. Loop through and display the posts
    foreach($children as $child):
        echo \'<h2>\'.$child->slug.\'</h2>\';

        // The Query - get all posts for this child-genre.
        $args = array(\'post_type\' => \'track\', \'taxonomy\' => \'genre\', \'term\' => $child->slug, \'post_status\' => \'publish\',\'posts_per_page\' => -1);
        $child_posts = new WP_Query ($args);

        // The Loop - display all posts for this child-genre.
        while ( $child_posts->have_posts() ) : $child_posts->the_post();
            echo \'<li>\';
                the_title();
            echo \'</li>\';
        endwhile;

        // Reset Post Data
        wp_reset_postdata();
    endforeach;
else:
    //On genre with no children - you may want to do something else.
    echo \'No sub-genre for this genre found\';
endif;

Caveats

  • 此代码未经测试:D(但应该有效)
  • 它依赖于您的流派/子流派,所有这些都是一个层次的一部分,访问没有子流派的流派将显示“无子流派”消息

结束

相关推荐

Short code to display a loop

我一直在研究这个短代码,但没有成功。。。function loop_shortcode( $atts = \'\' ) { \'<div class=\"clear\"></div> <div class=\"childs grid_12\"> <?php $the_query = new WP_Query( array( \"post_parent\" => \