Как отобразить теги записи
Я конвертирую HTML шаблон в тему WordPress и у меня возникли проблемы с отображением тегов записи внутри файла functions.php. Я хочу добавить следующий код в файл functions вместе с HTML кодом. Я пытаюсь сделать это уже несколько дней и уже изучил документацию, но ничего из того, что я пробую, не работает.
<div class="tags">
<a href="#" rel="tag">тег 1</a> <a href="#" rel="tag">тег 2</a> <a href="#" rel="tag">тег 3</a> <a href="#" rel="tag">тег 4</a>
</div>
Может кто-нибудь помочь с этим?
Я думаю, вы ищете функцию get_tags(). Её нужно разместить в файле single-post.php
(или single.php
, если ваша тема не имеет single-post.php
) (чтобы найти правильный шаблонный файл, вы всегда можете посмотреть Иерархию шаблонов WordPress).
Чтобы вывести список меток с помощью указанной выше функции, вам нужно использовать что-то вроде:
<?php $tags = get_tags(); ?>
<div class="tags">
<?php foreach ( $tags as $tag ) { ?>
<a href="<?php echo get_tag_link( $tag->term_id ); ?> " rel="tag"><?php echo $tag->name; ?></a>
<?php } ?>
</div>

Вот один из способов добавления тегов записи после содержимого только на отдельных страницах записей с использованием фильтра the_content
в пользовательской функции из файла functions. Используется функция the_tags
function tags_after_single_post_content($content) {
if( is_singular('post') && is_main_query() ) {
$tags = the_tags('<div class="entry-meta">Метки: ',' • ','</div><br />');
$content .= $content . $tags;
}
return $content;
}
add_filter( 'the_content', 'tags_after_single_post_content' );
Результат:

Правильный код:
function tags_after_single_post_content($content) {
$posttags = get_the_tags();
if ($posttags) {
$array = [];
foreach($posttags as $tag) {
$array[] = '<a href="/tag/' . $tag->slug . '/">' . $tag->name . '</a>';
}
$content .= 'Метки: ' . implode(', ', $array) . '<br>';
}
return $content;
}
add_filter( 'the_content', 'tags_after_single_post_content' );
Причина, по которой этот ответ неверен, заключается в том, что the_tags должен использоваться внутри The Loop, а the_tags ничего не возвращает, поэтому остальной код не выполняется. В этом ответе get_the_tags возвращает массив экземпляров меток, которые мы можем добавить к контенту.

Отображает список меток со ссылками на каждую из них и специальным классом для каждой метки:
$tags = get_tags();
$html = '<div class="post_tags">';
foreach ( $tags as $tag ) {
$tag_link = get_tag_link( $tag->term_id );
$html .= "<a href='{$tag_link}' title='Метка {$tag->name}' class='{$tag->slug}'>";
$html .= "{$tag->name}</a>";
}
$html .= '</div>';
echo $html;

Данный код необходимо добавить в конец файла functions.php:
function tags_after_single_post_content($content) {
$posttags = get_the_tags();
if ($posttags) {
$array = [];
foreach($posttags as $tag) {
$array[] = '<a href="/tag/' . $tag->slug . '/">' . $tag->name . '</a>';
}
$content .= 'Метки: ' . implode(', ', $array) . '<br>';
}
return $content;
}
add_filter( 'the_content', 'tags_after_single_post_content' );

Я создал этот код из артема с небольшими изменениями
function tags_after_single_post_content($content) {
$posttags = get_tags();
if ($posttags) {
$array = [];
foreach($posttags as $tag) {
$array[] = '<a href="/tag/' . $tag->slug . '/">' . $tag->name . '</a>';
}
$content .= '<div class="wulanhastag">Теги: ' . implode(', ', $array) . '</div>';
}
return $content;
}
add_filter( 'the_content', 'tags_after_single_post_content' );
