在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个其他数组的数组:一个用于学校,一个用于组,一个用于学生的子组。
只需在单个学生模板中循环此数组,即可输出所需的任何内容。
希望有帮助。