Получение пользовательской таксономии по порядку, но без учета конкретных налоговых идентификаторов


У меня есть функция, настроенная и работающая на основе обсуждения в этой теме: Пользовательская таксономия, get_the_terms, перечисление в порядке родителя > потомка.

Моя версия включает ссылки на термины и позволяет мне отображать информацию о терминах в single.php в манере, которая выглядит как хлебная крошка. Тем не менее, у меня есть настроенный пользовательский термин, который я никогда не хочу показывать пользователям, так как он используется для редакторов контента, чтобы они могли отображать сообщения в верхней части определенных циклы в других областях сайта.

Ранее у меня работала функция exclude get_the_term_list, но она не отображалась по порядку.

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

Моя текущая функция (с исключением в настоящее время работает неправильно) выглядит следующим образом:

function terms_by_order( $terms, $taxonomy, $exclude = array() ) {

// check input
if ( empty( $terms ) || is_wp_error( $terms ) || ! is_array( $terms ) )
    return;

// set id variables to 0 for easy check 
$grandparent_id = $parent_id = $term_id = 0;

// get grandparent
 foreach ( $terms as $term ) { 
    if ( $grandparent_id || $term->parent && !($exclude) )
        continue;
    $grandparent_id = $term->term_id;
    $grandparent_slug    = $term->slug;
    $grandparent_url = '<a href="'.get_term_link($grandparent_slug, $taxonomy).'">'.$term->name.'</a>';
}

 // get parent
foreach ( $terms as $term ) { 
    if ( $parent_id || $grandparent_id != $term->parent && !($exclude) ) 
        continue;
    $parent_id = $term->term_id;
    $parent_slug    = $term->slug;
    $parent_url = '<a href="'.get_term_link($parent_slug, $taxonomy).'">'.$term->name.'</a>';
}

// get child
foreach ( $terms as $term ) { 
    if ( $parent_id || $parent_id != $term->parent && !($exclude) ) 
        continue;
    $term_id =  $term->term_id;
    $term_slug = $term->slug;
    $term_url = '<a href="'.get_term_link($term_slug, $taxonomy).'">'.$term->name.'</a>';
}

    echo "$grandparent_url / $parent_url / $term_url";
}

Это тег, который я использую на своем single.php чтобы привести это в действие

terms_by_order( get_the_terms( $post->ID, 'news_category' ),'news_category',array(3623) );

Пример того, как это должно посмотрите, когда выполняется правильно:

Музыка / Интервью /

Author: Community, 2012-10-25

1 answers

Увы, никаких ответов или комментариев! : Р

Не волнуйтесь, коллега помог мне здесь, и вот приведенный выше код, работающий с $exclude

function terms_by_order($taxonomy, $exclude) {
global $post;
$terms = get_the_terms($post->ID, $taxonomy);

// check input
if ( empty($terms) || is_wp_error($terms) || !is_array($terms) ) return;

// exclude 
foreach ($terms as $key=>$term) {
    if (in_array($key, $exclude)) {     // key in term_array is also term_id..
        unset($terms[$key]);
        break;
    }
}


foreach ($terms as $key=>$term) {
    $parent_term = $term;           // gets last parent (should we get only the first one?)
    if ($term->parent != 0) {       // if there is a child, find it
        $child_term = $term;        // get the child term...
        $parent_term = get_term_by('id', $term->parent, $taxonomy);     // ... and the parent term
        break;
    }
}

if (isset($parent_term)) echo '<a href="'.get_term_link($parent_term, $taxonomy).'">'.$parent_term->name.'</a>';
if (isset($child_term)) echo ' / <a href="'.get_term_link($child_term, $taxonomy).'">'.$child_term->name.'</a>';

}
 1
Author: Ashkas, 2012-10-26 04:44:49