Возвращайте только пользовательский вложенный термин для пользовательского типа записи, не повторяйте термин-родитель
Я создал пользовательскую функцию, которая извлекает пользовательский термин таксономии для списка записей в запросе и повторяет как имя, так и ссылку. Кроме того, он также исключает перечисление термина, если я укажу идентификатор термина (у меня есть специальный термин, который я не хочу отображать, который я использую в качестве крючка для петли).
Это достигается с помощью этой функции
function my_get_the_term_list( $id = 0, $taxonomy, $before = '', $sep = '', $after = '', $exclude = array() ) {
$terms = get_the_terms( $id, $taxonomy );
if ( is_wp_error( $terms ) )
return $terms;
if ( empty( $terms ) )
return false;
foreach ( $terms as $term ) {
if(!in_array($term->term_id,$exclude)) {
$link = get_term_link( $term, $taxonomy );
if ( is_wp_error( $link ) )
return $link;
$term_links[] = '<a href="' . $link . '" rel="tag" class="category-link" title="See all stories from '.$terms_as_text.'">' . $term->name . '</a>';
}
}
$term_links = apply_filters( "term_links-$taxonomy", $term_links );
return $before . join( $sep, $term_links ) . $after;
}
Затем я отображаю его с помощью этой строки
<?php echo my_get_the_term_list( $post->ID, 'sports_category', '', ' ', '', array(3623) ); ?>
Все хорошо и хорошо.
Теперь я углубляюсь в дерево своего сайта и я хотел бы еще раз получить термин/термины текущего сообщения, но сейчас (поскольку я нахожусь на странице архива для термина в приведенном выше объяснении) Я только хочу получить дополнительный термин/термины и не отображать родительский термин. Я пытался изменить вышесказанное, но, похоже, не могу разобрать вещи на части.
Примеры, которые я видел в других местах, не касаются пользовательских терминов, кроме того, я хотел бы преобразовать их в функцию, чтобы я мог установить некоторые параметры, как указано выше.
Это моя последняя попытка
function my_get_the_children( $id, $taxonomy, $before = '', $sep = '', $after = '', $exclude = array() ) {
$terms = get_term_children( $id, $taxonomy );
if ( is_wp_error( $terms ) )
return $terms;
if ( empty( $terms ) )
return false;
foreach ( $terms as $term ) {
if(!in_array($term->term_id,$exclude)) {
$link = get_term_link( $term->name, $taxonomy );
if ( is_wp_error( $link ) )
return $link;
$term_links[] = '<a href="' . $link . '" rel="tag" class="category-link" title="See all stories from '.$terms_as_text.'">' . $term->name . '</a>';
}
}
$term_links = apply_filters( "term_links-$taxonomy", $term_links );
return $before . join( $sep, $term_links ) . $after;
}
1 answers
Вот более полное руководство, основанное на объекте $wp_query
:
Таксономия
Сначала вы можете захотеть узнать, в какой таксономии вы находитесь, каково ее название, и получить все доступные данные из объекта.
// Taxonomy name
$taxonomy = get_query_var( 'taxonomy' );
// Taxonomy object
get_taxonomy( $taxonomy );
// Taxonomy name
get_taxonomy( $taxonomy )->label;
Таксон/Термин
Затем вы, возможно, захотите что-то сделать с текущим таксоном/термином.
// The current taxon/term slug
$term_slug = get_query_var( 'term' );
// The complete current taxon/term object
$term = get_term_by( 'slug', $term_slug, $taxonomy );
Предки/Родители
Получение предков/родителей открывает множество возможностей. Например, для следа из хлебных крошек навигация или публикация метаданных или просто для того, чтобы отфильтровать их из списка показанных таксономий.
// Ancestors/Parents
$ancestors = get_ancestors(
$term->term_id
,$taxonomy
);
foreach ( $ancestors as $ancestor )
{
// The currently looped parents/ancestors object
$ancestor_obj = get_term( $ancestor, $taxonomy );
// The currently looped parents/ancestors name
$ancestor_name = $ancestor_obj->name;
// Link to the parent/ancestor taxon/term archive
$ancestor_link = get_term_link( $ancestor, $taxonomy )
}
Является ли это иерархической таксономией?
Вам всегда придется различать иерархические (похожие на категории) и плоские (похожие на теги сообщений) таксономии.
// Are we in a hierarchical taxonomy?
if ( is_taxonomy_hierarchical( $taxonomy ) )
{
// Do stuff
}
У нас есть дети, моя дорогая?
Иногда вы находитесь в середине действительно глубоко вложенной иерархической таксономии. Тогда имеет смысл позаботиться и о детях.
// Based on the above retrieved data
$children = get_term_children(
$term->term_id
,$taxonomy
);
foreach ( $children as $child )
{
// The currently looped child object
$child_obj = get_term( $child, $taxonomy );
// The currently looped child name
$child_name = $child_obj->name;
// Link to the child taxon/term archive
$child_link = get_term_link( $child, $taxonomy );
}