我有两个独立的类别,一个帖子可以分为:客户和;中等的
我试图显示所有客户(如果他们有帖子),以及这些帖子可能属于的任何媒体。
我遇到的问题是:假设有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; ?>
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] )
...但是,如果这样做,您可能需要在之后重新为数组编制索引。