Как использовать get the terms() для отображения нескольких терминов?


Я использую следующий код для отображения пользовательской таксономии в метаданных для одной записи, но теперь мне нужно отобразить несколько терминов, разделенных запятыми, вместо одного термина. Просто не знаю, как это сделать. Есть ли способ использовать что-то вроде wp_sprintf_l в сочетании с get_the_terms() для достижения этой цели? Или любым другим способом?

Вот моя текущая функция:

$sources = get_the_terms( $post->ID, 'source' );
if ( ! empty( $sources ) && ! is_wp_error( $sources ) ){
foreach ( $sources as $source ) {
    $sourcename = $source->name;    
    }
$sourcelink = get_term_link( $source );
$sep2 = __( ',' );
}

Затем я отображаю его следующим образом:

echo "<span class='source-meta'><a href='$sourcelink'>$sourcename</a>$sep2</span>;
Author: Jon Fergus, 2020-04-15

1 answers

Я собираюсь пойти и протестировать это где-нибудь, так что мне, возможно, придется внести изменения, но я думаю, что это должно сделать это за вас... как упоминал Майкл в комментариях, вы должны обернуть вывод в foreach. Приведенный ниже метод будет помещать запятую после каждой, поэтому я помещаю разделительные запятые в их собственный интервал, а затем использую CSS, чтобы скрыть последнюю.

$sources = get_the_terms( $post->ID, 'source' );
if( !empty( $sources ) && !is_wp_error( $sources ) ) {
    echo '<span class="source-meta">';
    foreach( $sources as $source ) {
        $source_link = sprintf(
            '<a href="%1$s">%2$s</a>%3$s',
            esc_url( get_term_link( $source ) ),
            esc_html( $source->name ),
            '<span class="sep">, </span>'
        ); 
        echo sprintf( esc_html__( '%s', 'textdomain' ), $source_link );   
    }
    echo '</span>';
}

В вашей таблице стилей (style.css) вам нужно следующее:

.source-meta .sep:last-of-type{
     display:none;
}
 1
Author: Tony Djukic, 2020-04-16 21:24:16