Хук wp_count_comments
в WordPress позволяет изменить результат функции, которая возвращает количество комментариев для конкретной записи или для сайта в целом. Этот фильтр полезен, если нужно кастомизировать данные о комментариях в админке или для отображения на фронтенде.
Хук wp_count_comments
применяется для изменения данных о количестве комментариев, возвращаемых функцией wp_count_comments()
. Фильтр срабатывает, когда WordPress пытается получить количество комментариев, включая их статусы (опубликованные, ожидающие модерации, спам и т.д.).
apply_filters( 'wp_count_comments', array|stdClass $count, int $post_id )
$count
(array|stdClass) — Пустой массив или объект, содержащий данные о количестве комментариев.$post_id
(int) — ID записи, для которой нужно получить количество комментариев. Если значение равно 0, то запрашивается общее количество комментариев на сайте.
Использование
Чтобы применить фильтр, достаточно зарегистрировать свою функцию с помощью add_filter()
и вернуть отфильтрованные данные в нужном формате.
add_filter( 'wp_count_comments', 'my_custom_comment_count', 10, 2 );
function my_custom_comment_count( $count, $post_id ) {
// Ваша логика изменения данных о количестве комментариев
return $count;
}
Пример #1: Установка фиксированного количества комментариев для конкретного поста
Если нужно, чтобы у определенного поста всегда отображалось фиксированное число комментариев, можно использовать следующий код:
add_filter( 'wp_count_comments', 'set_fixed_comment_count_for_post', 10, 2 );
function set_fixed_comment_count_for_post( $count, $post_id ) {
if ( $post_id === 123 ) {
// Устанавливаем фиксированное количество комментариев для поста с ID 123
$count = (object) [
'approved' => 25,
'awaiting_moderation' => 0,
'spam' => 5,
'trash' => 0,
'total_comments' => 30,
];
}
return $count;
}
В этом примере для поста с ID 123
всегда будет отображаться 25 одобренных комментариев и 5 спам-комментариев.
Пример #2: Скрытие информации о комментариях для всех записей
Если на сайте не используются комментарии, можно сделать так, чтобы данные о количестве комментариев всегда возвращались как нулевые, и тем самым скрыть любые упоминания о них.
add_filter( 'wp_count_comments', 'hide_comment_count_for_all_posts' );
function hide_comment_count_for_all_posts( $count ) {
// Устанавливаем все значения количества комментариев в 0
$count = (object) [
'approved' => 0,
'awaiting_moderation' => 0,
'spam' => 0,
'trash' => 0,
'total_comments' => 0,
];
return $count;
}
Этот код полностью скрывает количество комментариев на всем сайте.
Пример #3: Фильтрация количества комментариев в зависимости от роли пользователя
Можно настроить хук так, чтобы он показывал разное количество комментариев для разных ролей пользователей, например, администратору показывать реальное количество, а для остальных пользователей устанавливать ограничение.
add_filter( 'wp_count_comments', 'role_based_comment_count', 10, 2 );
function role_based_comment_count( $count, $post_id ) {
if ( ! current_user_can( 'manage_options' ) ) { // Проверка, не является ли пользователь администратором
$count = (object) [
'approved' => min( $count->approved, 10 ), // Не более 10 комментариев
'awaiting_moderation' => 0,
'spam' => 0,
'trash' => 0,
'total_comments' => min( $count->total_comments, 10 ),
];
}
return $count;
}
В этом примере обычные пользователи видят не более 10 комментариев, а администратор видит полное количество.
Пример #4: Настройка количества комментариев для определенного типа поста
Если на сайте используются произвольные типы записей, можно задать различные значения для отображения количества комментариев в зависимости от типа записи.
add_filter( 'wp_count_comments', 'custom_comment_count_for_post_type', 10, 2 );
function custom_comment_count_for_post_type( $count, $post_id ) {
$post_type = get_post_type( $post_id );
if ( $post_type === 'product' ) {
// Устанавливаем другое количество комментариев для типа записи "product"
$count = (object) [
'approved' => 50,
'awaiting_moderation' => 2,
'spam' => 1,
'trash' => 0,
'total_comments' => 53,
];
}
return $count;
}
В этом примере для всех записей типа product
количество одобренных комментариев будет фиксировано на значении 50
.
Заключение
Хук wp_count_comments
предоставляет удобный способ изменять данные о количестве комментариев в WordPress. С его помощью можно настроить отображение комментариев для разных типов записей, пользователей и постов. Такой подход позволяет создавать более гибкие и адаптированные к требованиям проекты на базе WordPress.