获取自定义分类中的术语

时间:2013-08-22 作者:Jake Lisby

我需要获取自定义分类法中所有术语的数组,其中它们有来自另一个自定义分类法的父术语。例如,我有一个自定义分类法“School”,其中每个术语(在本例中,我们可以说术语为“NE High”,但其他术语为“SE High”和“SW High”)都可以有另一个自定义分类法“Group”中的子术语。我想得到为单个学校创建的所有组。

我是否对此使用get\\u术语,如果是,我使用的是“父级”吗?它如何知道引用哪个分类法?

感谢您的指导!

2 个回复
最合适的回答,由SO网友:gmazzap 整理而成

在wordpress中,术语的父级总是引用相同的分类法。因此,正如您已经了解的那样,您需要创建一个texonomy,其中父术语表示“学校”,子术语表示“团体”也许第三级术语表示“子组”或其他东西。

这样做并使用参数parent 和/或child_of 在里面get_terms 功能或使用get_term_children 函数很容易检索一个术语的子(或孙子)项。

但也许你需要一些技巧才能最好地使用它。

让我们假设您的分类法被称为“组织”,第一级是针对学校,第二级是针对组,第三级是针对子组。

现在假设您有一个自定义的post类型“Students”,并将“organization”分类法的术语附加到学生身上。

如果访问类似的链接www.site.com/organization/nehight/ 它显示了“NE高中”所有学生的档案。当您访问时www.site.com/organization/nehight/group-name 它显示了一个名为“组名”的组中所有学生的档案。等等,用于子组。

但一旦分类法相同,如果您创建一个名为“分类法组织”的模板文件。php’它将处理学校、团体和子团体的所有请求。

如果要在模板中显示标题,如“NE High School”或“Group Name”,您如何知道所请求的术语是学校、组还是子组?

以下函数可以帮助您:

function organization_is( $term ) {
  if ( is_int($term) ) $term = get_term( $term, \'organization\' );
  if ( ! is_object($term) || is_wp_error() ) return;
  if ( $term->parent == 0 ) return \'school\';
  if ( organization_is($term->parent) == \'school\' ) return \'group\';
  return \'subgroup\';
}
在模板文件中,按如下方式使用:

$term = get_queried_object();

switch ( organization_is( $term ) ) {
  case \'school\' :
    echo \'All Students for School: \' . $term->name;
    break;
  case \'group\' :
    echo \'All Students for Group: \' . $term->name;
    break;
  case \'subgroup\' :
    echo \'All Students for Sub-Group: \' . $term->name;
    break;
}
与前一种情况类似,您可能需要使用技巧的另一种情况是在single student视图中。在那里,您可能会想显示以下内容:

学校:NE High组:一组,另一组子组:Awesome子组get_the_terms( $studid, \'organization\' ) 您检索了附加到学生的所有术语,但如何知道一个术语是第一级、第二级还是第三级(如果是学校、组还是子组)?

您可以编写另一个函数,该函数利用了前一个函数:

  function get_the_organization( $studid ) {
    $terms = get_the_terms( $studid, \'organization\' );
    $organization = array(
      \'school\' => array(), \'group\' => array(), \'subgroup\' => array()
    );
    foreach ( $terms as $term ) {
      if ($term->parent == 0 ) {
        $organization[\'school\'][] = $term;
      } elseif ( organization_is( $term->parent ) == \'group\' ) {
        $organization[\'group\'][] = $term;
      } else {
        $organization[\'subgroup\'][] = $term;
      }    
    }
    return $organization;
  }
现在,您可以为每个学生分配每个级别的多个术语,然后调用上面的函数,您将得到一个包含3个其他数组的数组:一个用于学校,一个用于组,一个用于学生的子组。

只需在单个学生模板中循环此数组,即可输出所需的任何内容。

希望有帮助。

SO网友:Jake Lisby

好的,我发现要做到这一点,我需要使用get\\u term()调用的“parent”属性。困难在于,因为我需要同时表示它们,我实际上应该使用父子关系。所以现在已经解决了,应该可以走了。

结束

相关推荐

GET_TERMS不返回任何自定义分类

我有一个自定义的帖子类型,叫做project 调用自定义分类法tagportfolio我使用此代码生成以下两个: add_action(\'init\', \'project_custom_init\'); /*-- Custom Post Init Begin --*/ function project_custom_init() { $labels = array( \'name\' => _x(\'Project