Получить ярлык термина текущей записи

23 янв. 2014 г., 18:17:42
Просмотры: 66.9K
Голосов: 7

Я работаю с шаблоном записи определенного типа, где показываю навигационное меню со ссылками на все записи из того же термина.

Теперь я хочу использовать этот шаблон для всех разных терминов, поэтому $term_slug должен содержать ярлык термина текущей записи, чтобы они соответствовали другим записям.

Я много раз находил в интернете этот код для решения задачи, но он не работает у меня:

$terms = get_term_by( 'slug', get_query_var( 'term' ), get_query_var( 'taxonomy' ) );
$term_slug = $term->slug;

В этой статье говорится, что это должно сработать: http://www.wpbeginner.com/wp-themes/how-to-show-the-current-taxonomy-title-url-and-more-in-wordpress/

Что я делаю неправильно?

$args = array(
    'post_type'     => 'myposttype',
    'mytaxonomy'    => $term_slug,
    'order'         => 'ASC'
);              

$current_id = get_the_ID();
$the_query = new WP_Query( $args );
if($the_query->have_posts() ) {
    while ($the_query->have_posts()) { $the_query->the_post();

        echo '<li><a' . ($current_id == $post->ID ? ' class="current"' : '') . ' href=" ' . get_permalink() . ' ">' . get_the_title() . '</a></li>'; 

    } 
}
0
Все ответы на вопрос 3
3
21

Ваш код работает на странице, где запрашивается термин (архив таксономии), а не на отдельной записи.

Для отдельной записи вам нужно получить термины, принадлежащие этой записи.

$terms = get_the_terms( $post->ID, 'your-taxonomy' );
if ( !empty( $terms ) ){
    // получаем первый термин
    $term = array_shift( $terms );
    echo $term->slug;
}
23 янв. 2014 г. 18:28:53
Комментарии

Спасибо! Не совсем понимаю, что вы делаете, но это работает.

Robbert Robbert
24 янв. 2014 г. 11:35:27

Отличное решение! Я пытался использовать документацию, чтобы получить все термины, но безрезультатно. Вы знаете способ сделать это? http://codex.wordpress.org/Function_Reference/get_term

GuiHarrison GuiHarrison
2 мар. 2015 г. 05:31:55

@GuiHarrison На мой взгляд, тогда вам нужно убрать array_shift() и пройтись циклом по массиву $term.

Robbert Robbert
6 мая 2015 г. 13:24:31
0

Приведенный ниже код отлично работает, если нужно вывести несколько терминов:

echo get_the_term_list( 
    $post->ID, 
    'styles', 
    '<ul class="styles"><li>', 
    ',</li><li>', 
    '</li></ul>' 
); 
31 янв. 2016 г. 11:57:30
0

Вам не нужен цикл for.

$slugs = wp_get_post_terms($post_id,'your-taxonomy',['fields'=>'slugs']);

$slugs будет массивом слагов (ярлыков) таксономии your-taxonomy, назначенных записи с $post_id

Источники:

25 нояб. 2020 г. 19:14:36