分类档案:每个术语仅显示来自单独自定义分类的一篇文章

时间:2013-07-26 作者:Michael Hendry

我很难想出一个解决方案,我正在使用自定义帖子类型和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查询对象,或者是否可以在循环内部执行一些操作来限制显示的产品数量?

    1 个回复
    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循环中添加了一个计数器,以确保只显示第一篇文章。

    结束

    相关推荐

    如何将footer.php重置为其原始状态?(主题:折纸)

    我不小心从页脚中删除了一些代码。php试图去掉“Theme By Origami”的页脚,现在页脚全乱了。如何将其重置为原始状态?我觉得自己太笨了,我应该在删除之前备份一下,我太粗心了。。我的网站:http://www.agnesphotoandfilm.co.uk/我的主题:折纸请帮忙