如何检查特定的子术语是否与同一分类中的另一组子术语共享了帖子?

时间:2017-04-13 作者:J.C. Hiatt

我正在一个股票摄影网站上工作,该网站使用简单的数字下载。如果您不熟悉,它有一个自定义的帖子类型,名为Download 还有一种自定义分类法Download Category.

在该分类法中,我有一些高级术语,例如Scene, Costume, Model, 等

在我的主页上,我列出了所有Costume 子术语(Day Dresses, Ball Gowns, 等等)。当用户单击其中一个术语时,它们将被带到我的taxonomy-download_category.php 模板,在那里他们可以看到该术语中所有图像的网格。所以如果他们点击Ball Gowns 在主页上,他们将看到附加到Ball Gowns 子术语。

我正在尝试在我的taxonomy-download_category.php 文件,该文件将显示可以在任何Costume 您正在查看的子术语。使用上述示例,如果您降落在Ball Gowns 第页,您将在中有下载的5种型号(共9种)的顶部看到一个列表Ball Gowns 类别

我遇到的问题是,模型不是自定义的帖子类型,而是CostumesDownload Category 分类学

到目前为止,我想到的唯一可能的解决方案是:

抓取任何Models 子术语循环浏览每个帖子,查看当前Costumes 用户正在查看的子术语,为每个子术语构建一个term\\u id数组

a) 对于似乎应该更简单的事情来说,这似乎有很多逻辑。

b) 我的当前代码不工作。这个filtered_models 变量作为空数组返回。

```

  // Get all models
  $models = get_term_children(204, \'download_category\');
  $filtered_models = [];

  // Get ready to query all posts under the Models term
  $args = array(
     \'posts_per_page\' => -1,
     \'orderby\' => \'ASC\',
     \'post_type\' => \'download\',
     \'download_category\' => \'models\',
     \'post_status\' => \'publish\'
  );

  // Query the posts
  $all_models_posts = new WP_Query( $args );


  if ( $all_models_posts->have_posts() ) {
    while (have_posts()){
      the_post();

      // See which model(s) this post is attached to
      $model_term_args = array(
        \'taxonomy\'  => \'download_category\',
        \'parent\'    => 204
      );

      $matched_models = wp_get_post_terms( $model_term_args );

      foreach($matched_models as $matched_model) {
        if(has_term(\'download_category\', $term)){
          $filtered_models[] = $matched_model;
        }   
      }
    }
  } 

  // Reset the query
  wp_reset_query();
?>
```

我在Codex上搜索了几个小时,寻找一个函数,该函数可以列出在另一个子词之间共享帖子的子词,但我的搜索结果很差。是否存在这样的功能?

提前感谢您的帮助!

编辑:下面是分类法的视觉层次结构:

下载类别(分类法)服装日礼服舞会礼服型号琥珀色布列塔尼梅根更新:

我意识到$filtered_models 数组在foreach 循环-这是因为我使用wp_get_post_terms 但没有提供正确的论点。查看之后wp_get_post_terms 更确切地说,它似乎不允许选择特定的子术语,所以我决定改为get_term_children. 我现在收到一个错误(截图:http://files.builtbygood.co/pG3L/5lwBxULw) 但我仍在考虑这一进展。

以下是更新的代码:

```

  // Get ready to query all posts under the Models term
  $args = array(
     \'posts_per_page\' => -1,
     \'orderby\' => \'ASC\',
     \'post_type\' => \'download\',
     \'download_category\' => \'models\',
     \'post_status\' => \'publish\'
  );

  // Query \'dem posts!
  $all_models_posts = new WP_Query( $args );


  if ( $all_models_posts->have_posts() ) {
    while (have_posts()){
      the_post();

      // Get all models
      $models = get_term_children(204, \'download_category\');
      $filtered_models = [];

      var_dump($models);

      foreach($models as $model) {
        if(has_term(\'download_category\', $term)){
          $filtered_models[] = $matched_model;
        }   
      }
    }
  } 

  // Reset that query
  wp_reset_query();
?>
```

非常感谢您的帮助!

1 个回复
SO网友:Rohit Sharma

你肯定得到了一个我认为是所有模型的数组,但你应该能够像你一样使用has\\u term,但要检查的是$model变量$model应该是您看到的类别的ID号。

然后通过传入$model使用get\\u cat\\u name。如果这不起作用,我就不知所措了。

// Get ready to query all posts under the Models term
  $args = array(
     \'posts_per_page\' => -1,
     \'orderby\' => \'ASC\',
     \'post_type\' => \'download\',
     \'download_category\' => \'models\',
     \'post_status\' => \'publish\'
  );

  // Query \'dem posts!
  $all_models_posts = new WP_Query( $args );


  if ( $all_models_posts->have_posts() ) {
    while (have_posts()){
      the_post();

      // Get all models
      $models = get_term_children(204, \'download_category\');

      foreach($models as $model) {
           if(has_term($model, \'download_category\')){
                echo get_cat_name($model);
        }
      }
    }
  }

  // Reset that query
  wp_reset_query();
 ?>