如何在循环中获取帖子的所有唯一类别?

时间:2014-08-07 作者:Jonah

我希望在自定义循环中获得唯一类别的简单列表(仅循环中帖子的类别)。我一直在摸索一些代码,下面是我得到的:

<?php
    $args = array(
        \'post_status\'=>\'publish\',
        \'post_type\'=>\'post\',
        \'posts_per_page\'=>-1
    );
    $get_posts = new WP_Query();

    $get_posts->query($args);
    if($get_posts->have_posts()) {

    $cats = array();
    while($get_posts->have_posts()) { $get_posts->the_post();

            $post_categories = wp_get_post_categories( get_the_ID() );
            $i = 0;
            foreach($post_categories as $c){
                $cat = get_category( $c );
                $cats[$i] = $cat->slug ;
                $i++;
            }

        } //endwhile
        $result = array_unique($cats);
       print_r($result);

    } //endif
    wp_reset_postdata();
?>
这将把每个帖子类别放入一个数组中,我可以打印出来。但我想合并每个帖子的类别数组,删除重复项(因此每个唯一类别只有一个实例),然后能够打印出来。

本质上,我想要完成的是为这些类别创建一个下拉列表,以便通过使用所选类别刷新循环来按特定类别进行排序。我可以处理其余的,我只需要得到一个循环中所有帖子的唯一、不重复的类别列表。

有人有什么想法吗?

非常感谢Jonah

2 个回复
最合适的回答,由SO网友:Chris Quinn 整理而成

编辑:已移动$i = 0 在圈外。这将为您提供完整的类别列表。

$get_posts = new WP_Query();
$i = 0;
$get_posts->query($args);
if($get_posts->have_posts()) {
    $cats = array();
    while($get_posts->have_posts()) { $get_posts->the_post();
        $post_categories = wp_get_post_categories( get_the_ID() );
        foreach($post_categories as $c){
            $cat = get_category( $c );
            $cats[$i] = $cat->slug ;
            $i++;
        }
    } //endwhile
    $result = array_unique($cats);
    print_r($result);

} //endif
wp_reset_postdata();
基本上,它将嵌套数组展平$cats - 我想array_unique 可能已丢弃类别,因为它们具有相同的键。

SO网友:Chinmoy Kumar Paul

EDIT

您正在阵列中保存类别。这很好。我正在更改此代码块。查看修改后的代码

    $cats = array();    
    while($get_posts->have_posts()) { $get_posts->the_post();

        $post_categories = wp_get_post_categories( get_the_ID() );

        foreach($post_categories as $c){
            $cat = get_category( $c );
            $cats[] = array( \'slug\' => $cat->slug );
        }

    } //endwhile
    $result = array_unique($cats);
   print_r($result);
array_unique 作用使用此函数可以获得唯一值。请参见教程here 为了获得更好的知识。

结束

相关推荐

Categories in media library

我想在媒体库中添加一个相当大的声音集合。问题是,我无法在上传文件时将类别添加到一堆文件中。。。我甚至无法将其添加到一个上载文件。。。。我找不到解决这个问题的方法。将该类别添加到数千个声音文件中是一项艰巨的工作。是否可以在媒体库中添加标记字段或类别字段,并在上传媒体库页面中包含相应字段?answer中的插件不允许在上载时设置类别。。。也许是时候为用户添加更多功能来使用wordpress中的媒体库了?