Как вывести термины пользовательской таксономии без гиперссылок?

21 июл. 2011 г., 03:20:31
Просмотры: 19.9K
Голосов: 5

Я искал повсюду, пытаясь найти ответ на свой вопрос. Надеюсь получить помощь здесь. Итак...

В настоящее время я получаю термины моей пользовательской таксономии, используя:

<?php echo get_the_term_list( $post->ID, 'skills', '<ul><li>', '</li><li>', '</li></ul>' ); ?>

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

Возвращает термины для конкретной записи в виде одной длинной строки, которую нельзя поместить в список:

$terms_as_text = get_the_term_list( $post->ID, 'skills', '<ul><li>', '</li><li>', '</li></ul>' ) ;
echo strip_tags($terms_as_text);

Возвращает список всех терминов, используемых во всех пользовательских типах записей:

<ul>
<?php $args = array( 'taxonomy' => 'skills', 'orderby' => 'ID', 'order' => 'ASC' );
$categories = get_categories( $args );
foreach($categories as $category) { echo '<li> '. $category->name . '</li>'; } 
                ?>
</ul>

Ничего не возвращает:

<?php $args = array('orderby' => 'name', 'order' => 'ASC', 'fields' => 'all');
wp_get_object_terms( $post->ID, $skills, $args );
?>

Я даже пробовал get_the_terms, get_terms и get_categories, но безуспешно.

1
Комментарии

Похожий вопрос: https://wordpress.stackexchange.com/questions/8284/get-the-term-list-without-links-in-3-1

Jesse Nickles Jesse Nickles
4 июн. 2024 г. 11:41:58
Все ответы на вопрос 8
5
11

Можно попробовать так:

$terms = get_the_terms($post->ID, 'skills');
if (!is_wp_error($terms)) : ?>

<?php 
    // Получаем массив названий навыков
    $skills_links = wp_list_pluck($terms, 'name'); 

    // Объединяем в строку через запятую
    $skills_string = implode(", ", $skills_links);
    ?>

    <span><?php echo $skills_string; ?></span>
<?php endif; ?>
21 июл. 2011 г. 08:11:35
Комментарии

Я обновил пример на странице get_the_terms. Не уверен, что делает этот unset в начале...

t31os t31os
21 июл. 2011 г. 12:59:43

Да, я тоже не понял, но это был ленивый копипаст

Wyck Wyck
21 июл. 2011 г. 17:54:58

Спасибо вам обоим @t31os и Wyck за помощь. Вот код, который я в итоге использовал, основанный на этом обсуждении и кодексе.

'<?php $terms = get_the_terms( $post->id, 'skills' );
if ( !is_wp_error($terms)) :
$skills_links = array();
foreach ($terms as $term) {
$skills_links[] = $term->name;
$skills = join( "</li><li>", $skills_links );
?>
<ul><li><?php echo $skills; ?></li></ul>
<?php endif ?>'

Certified K Certified K
22 июл. 2011 г. 19:53:35

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

Certified K Certified K
22 июл. 2011 г. 19:55:43

мне нравится этот ответ - чистый, полезный код.

Sagive Sagive
8 янв. 2015 г. 15:30:10
0

Просто используйте strip_tags

<?php echo strip_tags(get_the_term_list( $post->ID, 'CUSTOM-TAXONOMY', ' ',', ')); ?>
18 апр. 2016 г. 21:28:48
1
// Получаем термины таксономии для текущего поста
$terms = wp_get_post_terms($post->ID, 'TAXONOMYNAME');
// Считаем количество терминов
$count = count($terms);
// Если есть термины
if ( $count > 0 ) {
    // Перебираем все термины
    foreach ( $terms as $term ) {
        // Выводим название термина
        echo $term->name . ", ";
    }
}
5 мар. 2012 г. 01:12:50
Комментарии

В последнем тоже есть запятая...

Sergi Sergi
26 мар. 2019 г. 18:20:07
0
function term_clean($postid, $term)
{
    $terms = get_the_terms($postid, $term); 
    foreach ($terms as $term) {  echo $term->name;   };

}
Перевод на русский:
function term_clean($postid, $term)
{
    // Получаем термины таксономии для указанного поста
    $terms = get_the_terms($postid, $term); 
    // Перебираем термины и выводим их названия
    foreach ($terms as $term) {  echo $term->name;   };

}
18 авг. 2011 г. 16:33:10
0

Если вам нужны только термины, назначенные конкретной записи:

<?php $object_terms = wp_get_object_terms( $post_id, 'skills', array( 'fields' => 'names' ) );
if ( $object_terms ) { ?><ul><li><?php echo implode( '</li><li>', $object_terms ); ?></li></ul><?php } ?>

Если вам нужны ВСЕ термины:

<?php $all_terms = get_terms( 'skills', array( 'fields' => 'names' ) );
if ( $all_terms ) { ?><ul><li><?php echo implode( '</li><li>', $all_terms ); ?></li></ul><?php } ?>
14 мар. 2012 г. 04:51:54
0

Вчера я столкнулся с похожей проблемой и придумал следующее решение:

function taxonomy_list( $taxonomy ) {
    $args = array('order'=>'ASC','hide_empty'=>false);
    $terms = get_terms( $taxonomy, $args );
    if ( $terms ) {
        printf( '<ul name="%s">', esc_attr( $taxonomy ) );
        foreach ( $terms as $term ) {
            printf( '<li>%s</li>', esc_html( $term->name ) );
        }
        print( '</ul>' );
    }
}

Затем просто вставьте <?php taxonomy_list( 'ID_ТАКСОНОМИИ' ); ?> в ваш файл шаблона, заменив ID_ТАКСОНОМИИ на название вашей таксономии.

Первоначально я использовал это для создания списка категорий вакансий на моей доске объявлений. Каждый элемент затем ссылался на архив таксономии. Полную версию функции можно увидеть в моем ответе на мой собственный вопрос на Stackoverflow.

3 дек. 2013 г. 19:33:06
0
// для вывода терминов таксономии без ссылок: разделенных запятыми
// скопируйте этот код в ваш файл function.php

function get_taxonony_toDisplay($post_id, $taxonomy_name) {
$terms = wp_get_post_terms($post_id, $taxonomy_name);
$count = count($terms);
if ( $count > 0 ) {
    foreach ( $terms as $term ) {
        echo $term->name . ", ";
    }
}
}

Поскольку мне нужно было вывести 3 таксономии, разделенные запятыми, я создал функцию на основе кода Henry.

Для вывода используйте следующую строку:

<?php get_taxonony_toDisplay($post->ID, 'your_taxonomy_name' ); ?> 
13 февр. 2014 г. 10:14:48
0

Если вам нужно отсортировать термины по слагу (slug) вместо имени, используйте следующий код...

<?php if(has_term('', 'CUSTOM-TAX')) {?> 
<?php
    $custom_terms = get_the_terms( get_the_ID(), 'CUSTOM-TAX' );
    // Убедимся, что термины существуют, а также проверим на ошибку WP_Error
    if (    $product_terms
    && !is_wp_error( $product_terms )
    ) {
    @usort( $product_terms, function ( $a, $b )
    {
    return strcasecmp( 
    $a->slug,
    $b->slug
    );
    });
    // Выводим термины как обычно
    $term_list = [];
    foreach ( $custom_terms as $term ) 
    //$term_list[] = esc_html( $term->name );  // закомментируйте эту строку, если хотите, чтобы термины были ссылками, и наоборот
    $term_list[] = '<a href="' . get_term_link( $term ) . '">' . esc_html( $term->name ) . '</a>'; // закомментируйте эту строку, если НЕ хотите, чтобы термины были ссылками, и наоборот
    echo implode( ', ', $term_list );
    }
?>                          
<?php } else { ?><?php }?>
13 июн. 2016 г. 11:35:40