Wordpress - эхо взорваться
У меня есть следующий фрагмент, чтобы получить все условия таксономии, доступные для поста.
$tags = get_the_terms( $post->ID, 'books' );
if( $tags ) : ?>
<div class="listing-tag-list">
<?php foreach( $tags as $tag ) :
$tag_link = esc_url( get_term_link( $tag ) );
$tag_output = '';
$tag_output .= '<a href="' . $tag_link . '" class="listing-tag">';
$tag_output .= '<span class="tag__text">' . $tag->name . '</span></a>';
echo $tag_output;
endforeach; ?>
</div>
<?php endif;
Моя проблема в том, что в настоящее время термины показываются подряд без пробела.
Как их разделить пробелом и запятой?
Я пытался использовать implode
и так заменить echo $tag_output;
с echo implode( ', ', $tag_output );
, но я не могу вписать это в текущий код.
Куда я иду не так?
2 ответа
Почему бы не добавить его прямо в ваш цикл
$tag_output = '';
$tag_output .= '<a href="' . $tag_link . '" class="listing-tag">';
$tag_output .= '<span class="tag__text">' . $tag->name . '</span></a>';
$tag_output .=", ";
echo $tag_output;
И за пределами цикла, удалите последнюю запятую
rtrim($tag_output,', ');
Простое и простое решение:
<?php echo get_the_terms_list( $post_id, 'books', '<div class="listing-tag-list">', ', ', '</div>' );?>
Подробнее о кодексе
Или этот:
<?php
$tags = get_the_terms( $post->ID, 'books' );
if( ! is_wp_error( $tags ) ){
$links = array();
foreach ( $tags as $tag ) {
$link = get_term_link( $tag, $tag );
$links[] = '<a href="' . esc_url( $link ) . '" rel="tag" class="listing-tag"><span class="tag__text">' . $tag->name . '</span></a>';
}
$before = '<div class="listing-tag-list">';
$sep = ', ';
$after = '</div>';
echo $before . join( $sep, $tag_links ) . $after;
}