获取与多个自定义分类的特定术语匹配的帖子

时间:2016-05-29 作者:Germán Gallo

我正在制作一个展示很多产品的页面。我的结构是

产品(自定义贴子类型)

  • 品牌(自定义分类法)
  • -->品牌A(自定义术语)
  • -->品牌B(自定义术语)
  • -->部门(自定义分类法)
  • -->部门A(自定义条款)
  • -->部门B(自定义条款)
  • 每个产品始终必须有一个品牌和一个部门。然而,每个品牌可能都有一些产品。

    因此,我需要做一个列表,显示与特定品牌和特定部门匹配的所有产品,并让我打印品牌名称。i、 e:在A部门,我们有3种与A品牌相匹配的产品。

    有什么办法吗?我可以过滤品牌或部门中的任何一个,但不能同时过滤两者。

    谢谢

    EDIT:

    这是我的代码,用于获取特定部门的所有产品,它工作得很好。

    $args = array(
     \'tax_query\' => array(
         array(
             \'taxonomy\' => \'department\',
             \'field\' => \'slug\',
             \'terms\' => array( \'department-a\' )
         ),
     ),
     \'orderby\' => \'title\',
     \'order\' => \'ASC\',
     \'post_type\' => \'prod\'
    );
    $query = new WP_Query( $args );
    
    if ( $query->have_posts() ) {
    
     $term = $query->queried_object;
    
     while ( $query->have_posts() ) : $query->the_post(); ?>         
    
         <a  rel="<?php the_ID(); ?>" title="<?php the_title(); ?>" class="producto btn btn-raised cardio-dark"><?php the_title(); ?></a>
    <?php
    endwhile;
    
    wp_reset_query();
    } ?>
    
    但我需要的是get the product\'s brand instead of product\'s name, 如果两个或多个产品具有相同的品牌,则该品牌只出现一次。因此,我可以生成一个如上所述的列表。i、 e:A部门有2个“A品牌”产品和1个“B品牌”产品。

    1 个回复
    最合适的回答,由SO网友:Germán Gallo 整理而成

    我终于解决了这个问题。我之所以复制代码,是因为它可能会帮助某些人:)我通过填充arrray并检查品牌是否存在,找到了解决方案,因此我只获得每个品牌一次。

       <?php
    
        //Query to match department
        $args = array(
         \'tax_query\' => array(
             array(
                 \'taxonomy\' => \'department\',
                 \'field\' => \'slug\',
                 \'terms\' => array( \'department_name\' )
             ),
         ),
         \'orderby\' => \'title\',
         \'order\' => \'ASC\',
         \'post_type\' => \'prod\', \'posts_per_page\' => \'-1\', \'posts_per_page\' => \'-1\'
        );
        $query = new WP_Query( $args );
    
        if ( $query->have_posts() ) {
    
          // Array of brands
          $brands= array();
    
          $term = $query->queried_object;
    
         while ( $query->have_posts() ) : $query->the_post(); ?>
             <!-- Loop to show the brand -->
             <?php
              $terms = get_the_terms( $post->ID , \'brabds\' );
     // Loop por el array de marcas
              if ( $terms != null ){
                foreach( $terms as $term ) {
    
                  // I want to check if my brand has only one product or more
                  // Only one product
                  if ($term ->count == 1){
                    // I create a variable so I can check if it\'s in my brands array
                       $marca = $term->name;
                    // If is not in array, push it there
                        if ( ! in_array($marca, $marcas)){
                            array_push($marcas, $marca);
                    // This query is to link to a product and get some info
                            $tax_query = \'\';
                                        $tax_query[] = array(\'taxonomy\' => \'brands\',\'field\' => \'term_id\',\'terms\' => $term->term_id);
                                        $term_post = get_posts(array(\'post_type\' => \'prod\',\'tax_query\' => $tax_query));
                                        if (!empty($term_post)) {
                                            $term_post_link = get_permalink($term_post[0]->ID);
                                            $id_prod = url_to_postid($term_post_link);
                                            $nombre_prod = get_the_title($term_post[0]->ID);
                                            echo \'<a title="\'.$term->name.\'" rel="\'.$id_prod.\'">\'.$term->name.\'</a>\';
                                        }
                        }
                  }
                  // Marcas MULTI
                  else{
                    // If there are more than a product, do the same thing but query as my needs
                        $marca = $term->name;                    
                        if ( ! in_array($marca, $marcas)){
                            array_push($marcas, $marca);
                            echo \'<a rel="\'.$term->term_id.\'" title="\'.$term->name.\'">\'.$term->name.\'</a>\';
                        }
                  }
                }
              }
              // End loop
    ?>
    
        <?php
        endwhile;
    
        wp_reset_query();
        } ?>