Вопрос или проблема
На странице категории мне нужна помощь, заголовок – курорт «Льняно Саббиадоро», я хотел бы отобразить количество записей (апартаментов) для этой категории, возможно, другим цветом, т.е.: Льняно Саббиадоро (185), при этом (185) – в индивидуальном цвете. В будущем у меня будет поле поиска с множеством фильтров, поэтому это количество должно соответствовать результатам поиска.
Вот страница категории, о которой я говорю: https://sacconicase.com/case-vacanza/italia/friuli-venezia-giulia/lignano-sabbiadoro-appartamenti-vacanze/.
Какой ваш совет по поводу кода? Я думаю, это та часть кода, с которой я должен работать (я получил ее в верхней части файла архива/категории):
<?php
if ( ! has_post_format( array( 'gallery' ) ) ) :
if ( has_post_thumbnail() ) :
?>
<div class="featured-image">
<a href="<?php the_permalink(); ?>" title="<?php the_title_attribute() ; ?>">
<?php the_post_thumbnail( 'colormag-featured-image' ); ?>
Если ваша тема не делает ничего особенного, а использует the_archive_title()
для отображения «Льняно Саббиадоро», тогда вы сможете изменить это с помощью get_the_archive_title
фильтра.
Что-то вроде этого.
add_filter('get_the_archive_title', 'my_get_the_archive_title_filter', 10, 3);
function my_get_the_archive_title_filter(string $title, string $original_title, string $prefix): string {
if (! is_category()) {
return $title;
}
$current_category = get_queried_object();
return sprintf(
'%s <span class="post-count">%d</span>',
$current_category->name,
$current_category->count
);
}
Это очень полезно, спасибо!
Можно ли что-то подобное реализовать для записей? Я хотел бы показать количество комментариев после названия записи.
Например, “Добавление количества комментариев в заголовок записи”
Пример: Блог о Intel (3)
…где (3) – это количество комментариев.
.
Ответ или решение
Добавление количества постов на страницах архивов
Задача
Вам необходимо на странице категории «Lignano Sabbiadoro» (ссылка: Lignano Sabbiadoro) отобразить количество постов (апартаментов) для данного категории. Например, название должно выглядеть как «Lignano Sabbiadoro (185)», при этом число в скобках должно быть выделено другим цветом. Также важно, чтобы это количество соответствовало результатам поиска, которые в будущем будут включать различные фильтры.
Решение
Сначала нужно изменить заголовок архива, используя фильтр get_the_archive_title
, который позволяет модифицировать заголовок на страницах категорий. Вот пример кода для реализации этой функциональности:
add_filter('get_the_archive_title', 'my_get_the_archive_title_filter', 10, 3);
function my_get_the_archive_title_filter(string $title, string $original_title, string $prefix): string {
if (!is_category()) {
return $title;
}
$current_category = get_queried_object();
return sprintf(
'%s <span class="post-count" style="color: #FF0000;">(%d)</span>',
esc_html($current_category->name),
esc_html($current_category->count)
);
}
Объяснение кода
-
Фильтр
get_the_archive_title
: Мы добавляем свой собственный фильтр, который будет вызываться при рендеринге заголовка архивов. -
Проверка на категорию: Убедимся, что мы находимся именно на странице категории с помощью условия
is_category()
. Если это не так, мы возвращаем оригинальный заголовок. -
Получение текущей категории: Используем функцию
get_queried_object()
, чтобы получить текущий объект категории, включая её название и количество постов. -
Форматирование заголовка: Используем функцию
sprintf()
, чтобы объединить название категории и количество постов в единый строковый вывод.esc_html()
применяется для экранирования вывода и предотвращения XSS-уязвимостей. -
CSS-стилизация: Мы добавили встроенные стили с помощью
style
для изменения цвета числа. Рекомендуется переместить любые стили в файл стилей вашего сайта для лучшей практики.
Добавление количества комментариев к заголовку поста
Чтобы отобразить количество комментариев после заголовка каждого поста, можно использовать следующий подход. Настройте заголовок поста с помощью фильтра the_title
:
add_filter('the_title', 'add_comments_count_to_title', 10, 2);
function add_comments_count_to_title($title, $id) {
if (is_single() && get_post_type($id) === 'post') {
$comments_count = wp_count_comments($id)->approved;
return sprintf(
'%s (%d)',
esc_html($title),
esc_html($comments_count)
);
}
return $title;
}
Объяснение кода
-
Фильтр
the_title
: Мы добавляем фильтр для изменения заголовков постов на одиночных страницах. -
Проверка типа поста: Мы проверяем, что текущая страница является одиночным постом и используется стандартный тип поста «post».
-
Подсчет комментариев: Используем
wp_count_comments()
для получения количества одобренных комментариев к данному посту. -
Автоматическая замена заголовка: Таким же образом, как и в предыдущем примере, мы формируем новый заголовок с использованием функции
sprintf()
, добавляя количество комментариев в скобках.
Заключение
Таким образом, с помощью простых изменений в коде вашего WordPress-темы вы сможете отобразить количество постов на страницах категорий, а также количество комментариев на страницах постов. Обязательно протестируйте изменения в различных сценариях использования, чтобы убедиться в корректности отображения и отсутствии ошибок в пользовательском интерфейсе.