显示分类列表,仅当它们是分层的时
Display a list of taxonomies, only if they are hierarchical
我正在尝试显示自定义 post 类型所在的分类列表,不包括那些不分层的。
下面的代码目前有效,但显示了所有分类法,但是我无法在 运行 通过循环之前检查分类法是否是分层的。
我知道有一个运行此检查的 WordPress 函数,但由于我通常在前端工作,所以我似乎无法弄清楚将它放在哪里才能使其生效:
is_taxonomy_hierarchical( $taxonomy )
以下是我用来输出分类列表的函数:
// get taxonomies terms links
function custom_taxonomies_terms_links(){
// get post by post id
$post = get_post( $post->ID );
// get post type by post
$post_type = $post->post_type;
// get post type taxonomies
$taxonomies = get_object_taxonomies( $post_type, 'objects' );
$out = array();
echo '<a href="';
echo '/';
echo '">';
echo 'Home';
echo "</a> / ";
foreach ( $taxonomies as $taxonomy_slug => $taxonomy ){
// get the terms related to post
$terms = get_the_terms( $post->ID, $taxonomy_slug );
if (!empty( $terms )) {
foreach ( $terms as $term ) {
$out[] =
'<a href="'
. get_term_link( $term->slug, $taxonomy_slug ) .'">'
. $term->name
. "</a> / ";
}
$out[] = " ";
}
}
return implode('', $out );
}
如果我理解正确的话,你不能像下面这样测试分类法吗:
foreach ( $taxonomies as $taxonomy_slug => $taxonomy ){
if ($taxonomy->hierarchical) {
// get the terms related to post
$terms = get_the_terms( $post->ID, $taxonomy_slug );
if (!empty( $terms )) {
foreach ( $terms as $term ) {
$out[] =
'<a href="'
. get_term_link( $term->slug, $taxonomy_slug ) .'">'
. $term->name
. "</a> / ";
}
$out[] = " ";
}
}
}
当您使用 'objects' 作为第二个参数时:
get_object_taxonomies( $post_type, 'objects' );
你得到的是一组分类对象,而不是仅仅分类名称(另一个选项)。分类对象有一个 属性 "hierarchical" 指示该分类是否是分层的。您可以对此进行测试以选择您想要的分类法类型(分层或非分层)。
我正在尝试显示自定义 post 类型所在的分类列表,不包括那些不分层的。
下面的代码目前有效,但显示了所有分类法,但是我无法在 运行 通过循环之前检查分类法是否是分层的。
我知道有一个运行此检查的 WordPress 函数,但由于我通常在前端工作,所以我似乎无法弄清楚将它放在哪里才能使其生效:
is_taxonomy_hierarchical( $taxonomy )
以下是我用来输出分类列表的函数:
// get taxonomies terms links
function custom_taxonomies_terms_links(){
// get post by post id
$post = get_post( $post->ID );
// get post type by post
$post_type = $post->post_type;
// get post type taxonomies
$taxonomies = get_object_taxonomies( $post_type, 'objects' );
$out = array();
echo '<a href="';
echo '/';
echo '">';
echo 'Home';
echo "</a> / ";
foreach ( $taxonomies as $taxonomy_slug => $taxonomy ){
// get the terms related to post
$terms = get_the_terms( $post->ID, $taxonomy_slug );
if (!empty( $terms )) {
foreach ( $terms as $term ) {
$out[] =
'<a href="'
. get_term_link( $term->slug, $taxonomy_slug ) .'">'
. $term->name
. "</a> / ";
}
$out[] = " ";
}
}
return implode('', $out );
}
如果我理解正确的话,你不能像下面这样测试分类法吗:
foreach ( $taxonomies as $taxonomy_slug => $taxonomy ){
if ($taxonomy->hierarchical) {
// get the terms related to post
$terms = get_the_terms( $post->ID, $taxonomy_slug );
if (!empty( $terms )) {
foreach ( $terms as $term ) {
$out[] =
'<a href="'
. get_term_link( $term->slug, $taxonomy_slug ) .'">'
. $term->name
. "</a> / ";
}
$out[] = " ";
}
}
}
当您使用 'objects' 作为第二个参数时:
get_object_taxonomies( $post_type, 'objects' );
你得到的是一组分类对象,而不是仅仅分类名称(另一个选项)。分类对象有一个 属性 "hierarchical" 指示该分类是否是分层的。您可以对此进行测试以选择您想要的分类法类型(分层或非分层)。