Я пытаюсь показать список таксономий, в которых используется пользовательский тип записи, за исключением тех, которые не являются иерархическими.
Приведенный ниже код в настоящее время работает, но показывает все таксономии, однако я не могу заставить его проверить, является ли таксономия иерархической, прежде чем выполнять ее через цикл.
Я знаю, что есть функция 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[] = " ";
}
}
}
Когда вы используете «объекты» в качестве второго параметра в:
get_object_taxonomies( $post_type, 'objects' );
вы получаете массив объектов таксономии, а не только имена таксономий (другой вариант). Объект таксономии имеет свойство «иерархическое», которое указывает, является ли эта таксономия иерархической или нет. Вы можете проверить это, чтобы выбрать типы таксономий (иерархические или нет), которые вы хотите.
Других решений пока нет …