我很难想出一个解决方案,我正在使用自定义帖子类型和4个自定义分类法构建产品目录。产品目录由“型号”分隔,但每个“型号”最多可以有15个“产品”变体。每个“产品”都有不同的属性,我需要能够根据这些属性过滤产品列表。
从结构上讲,我的工作是这样组织的:
产品(自定义贴子类型)
型号(分类法)尺寸(分类法)颜色(分类法)功能(分类法)除“型号”外,每个分类法都用作筛选所示产品的方法。我正在使用Query Multiple Taxonomies插件来帮助我过滤每个产品的属性。这很有效。它允许我使用默认的Wordpress模板层次结构,并对分类法进行所有更改。php文件。这就是我迷路的地方。我想限制显示的结果,以便只显示每个模型中的一个,即使过滤可能会返回每个模型中的多个产品。
我目前正在使用循环和get\\u The\\u terms()创建一个数组,然后使用array\\u unique()函数只将每个模型名称的一个实例保存到一个数组中。以下是我对该部分的代码:
$modelSlugs = array();
while (have_posts()) : the_post();
// Gather the model names assigned to each product
$terms = get_the_terms( $post->ID, \'models\' );
if ( $terms && ! is_wp_error( $terms ) ) :
$term = array_pop($terms);
$modelSlugs[] = $term->slug;
endif;
endwhile;
$modelList = array_unique($modelSlugs);
这将只给我一个模型slug(或名称),这很好,但我还需要显示产品缩略图,并使用永久链接链接到单个产品页面。我知道我可以根据每个slug生成额外的查询,但这听起来像是一场性能噩梦。
我越想越觉得这是错误的做法。我知道返回的$wp\\u query对象包含了我可能需要的所有内容,但我不确定要使用什么技巧来确保每个模型只显示一篇文章。在运行循环之前,是否有方法准备或操作返回的WP\\u查询对象,或者是否可以在循环内部执行一些操作来限制显示的产品数量?
SO网友:Michael Hendry
在反复敲击键盘之后,我终于找到了答案。这可能不是实现这一点的最佳方式,但它可以工作,并且不需要任何额外的DB查询。
我使用上面的代码生成了需要显示的模型列表。
然后我用这个代码让一切都发生了。
foreach ($modelList as $model) :
$count = 0;
echo \'<h2>\' . $model . \'</h2>\';
// Run the loop again to show the products
while (have_posts()) : the_post();
// Check that the model name for the post is the same as the model
if ( has_term( $model, \'models\') ) :
// Show only first item in loop
if ($count == 0) :
get_template_part( \'content\', \'model\' );
endif;
$count++;
endif; //has_term
endwhile;
endforeach;
让我在这里解释一下:
我为模型列表创建了一个foreach循环,然后在里面运行标准循环来显示所有帖子。为了确保帖子按模型名分组,我使用has\\u term()确保帖子的模型名与数组中的项匹配。然后,我在while循环中添加了一个计数器,以确保只显示第一篇文章。