在类别列表中显示按名称排序的帖子列表

时间:2015-04-15 作者:Artur Haddad

我试图显示一个按名称排序的类别列表,以及其中每个类别的所有帖子。像这样:

  • Category A
    B柱
    F柱
    Z柱
  • Category B
    A后
    C后
    G后
  • Category C
    Post D
    Post E
    Post H

    • 我设法显示类别列表,但它仅按帖子名称排序,如下所示:

      • Category B
        A后
        C后
        G后
      • Category A
        B柱
        F柱
        Z柱
      • Category C
        发布D
        发布E
        发布H

        这是我的代码:

        $args = array(\'post_type\' => \'projetos\');
        $my_query = new WP_Query( $args );
        if( $my_query->have_posts() ) {
            while ($my_query->have_posts()) : $my_query->the_post(); ?>
            <?php foreach((get_the_category()) as $category) {echo $category->cat_name . \' \';} ?><br>
            <a href="<?php the_permalink() ?>"><?php the_title(); ?></a><br>
            <?php
            endwhile;
        }
        
        wp_reset_query();
        
        ?>  
        
        如何正确排序?

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

EDIT:

好吧,下面的方法似乎有点消耗DB。彼得古森posted a very interesting alternative. 由于这种方法已经被接受为我不知道的正确答案,所以有可能将这个问题标记为重复。我标记了我的答案,以便主持人可以看一下。谢谢

我首先收集多维数组中的所有数据。子阵列是类别。

因此,我首先加载所有类别get_categories(). 它们是按标题排序的。我把它们都装进$post_categories 而数组键是类别的ID。名称等类别信息将存储在$post_categories[ category_id ][\'cat\'].

在此之后,我运行查询,但我确保它是按标题排序的。现在,我得到了帖子所附的所有类别,并将帖子保存在其中$post_categories[ category_id ][\'posts\'].

现在我有了一个多维数组,我只输出了两个foreach() 循环。

$args = array( 
        \'type\' => \'projetos\' 
    );
    $all_categories = get_categories( $args );
    $post_categories = array();
    foreach( $all_categories as $category )
        $post_categories[ $category->term_id ][\'cat\'] = $category;
    $args = array(
        \'post_type\' => \'projetos\',
        \'orderby\' => \'title\',
        \'order\' => \'asc\' 
    );
    $my_query = new WP_Query( $args );
    if( $my_query->have_posts() ) {
        while ($my_query->have_posts()){ 
            $my_query->the_post();
            $p = array();
            $p[\'permalink\'] = get_the_permalink();
            $p[\'title\'] = get_the_title();
            foreach( get_the_category() as $category )
                $post_categories[ $category->term_id ][\'posts\'][] = $p;
        }
    }

    foreach( $post_categories as $cat ){
        if( ! isset( $cat[\'posts\'] ) || count( $cat[\'posts\'] ) == 0 )
            continue;
        ?>
        <strong><?php echo $cat[\'cat\']->name; ?></strong><br />
        <?php 
        foreach( $cat[\'posts\'] as $post ): 

        ?>
        <a href="<?php echo $post[\'permalink\']; ?>"><?php echo $post[\'title\']; ?></a><br />
        <?php endforeach;
    }

    wp_reset_query();

结束

相关推荐

GET_CATEGORIES上的用户定义顺序?

下面是一些将特定类别调用到我们的首页帖子循环的基本代码。它工作正常,只是我的客户希望类别按特定顺序显示。我知道互联网上还有其他关于这一点的帖子,但我没有看到任何像我的客户所问的那样解决这一问题的帖子。我可以接受下面代码中创建的$categories变量,并将这些对象调用到一个新数组中吗?在这种情况下,所有对象前面都有一个数字,如:[0] => values [1] => values [2] => values .... 输出转储时。我可以把输出结果按我