获取唯一类别-分组依据?

时间:2012-02-18 作者:dtj

我有两个独立的类别,一个帖子可以分为:客户和;中等的

我试图显示所有客户(如果他们有帖子),以及这些帖子可能属于的任何媒体。

我遇到的问题是:假设有3篇帖子与客户端a关联。当我在循环中,收集每个帖子的所有类别时,我会得到“客户端a”3次,而不是仅仅一次(如我所愿)。

媒体类别也是如此。

我只想显示:

a) 唯一/独特的客户端(具有帖子)

b) 这些帖子按客户分类的媒介。

最好的方法是什么?如果我在循环中,有没有办法只提取唯一的类别?或者我必须逐步将它们全部放入一个数组中,并在添加新的数组之前检查它们是否不存在?

使用某种Group By子句怎么样?

下面是我正在使用的一些代码:

<?php $args = array(\'cat\' => 4 ); 
$clients_query = new WP_Query( $args );
?>

<?php while ( $clients_query->have_posts() ) : $clients_query->the_post(); ?>

        <?php $categories = get_the_category(); ?>

        <?php foreach($categories as $category) : ?>

            <?php if (cat_is_ancestor_of(4, $category)) : ?>
                /* 4 is the Client Cat -- so stick this in an array */

            <?php elseif (cat_is_ancestor_of(5, $category))
                               /* 5 is the Medium Cat -- so stick this in a seperate array maybe?


            <?php endif; ?>

        <?php endforeach; ?>

    <?php endwhile; ?>

1 个回复
SO网友:mor7ifer

这样做怎么样?

//establish holders
$clients = array();
$media   = array();

//loop through gotten posts
foreach( $clients_query as $k => $v ) {
    //add to clients array
    if( !in_array( get_client( $v ), $clients ) )
        $clients[] = get_client( $v );
    //add to media array
    if( !in_array( get_medium( $v ), $media ) )
        $media[] = get_medium( $v );
}
您需要更换get_client()get_medium() 无论您使用什么工具来获取这些值(可能是post meta,但您没有提供足够的信息让我有信心为您编写代码),那么您将拥有一系列客户端和一系列媒体。这个循环允许您使用unset( $clients_query[$k] )...但是,如果这样做,您可能需要在之后重新为数组编制索引。

结束