Возвращайте только пользовательский вложенный термин для пользовательского типа записи, не повторяйте термин-родитель


Я создал пользовательскую функцию, которая извлекает пользовательский термин таксономии для списка записей в запросе и повторяет как имя, так и ссылку. Кроме того, он также исключает перечисление термина, если я укажу идентификатор термина (у меня есть специальный термин, который я не хочу отображать, который я использую в качестве крючка для петли).

Это достигается с помощью этой функции

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;
}
Author: kaiser, 2012-10-09

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 );
}
 2
Author: kaiser, 2012-10-09 11:52:16