## Функция get_page_of_comment() │ WP 2.7.0
### Описание
Функция get_page_of_comment() позволяет определить, на какой странице находится определённый комментарий при использовании пагинации (разбиения на страницы комментариев).
### Как используется
Эта функция используется, например, в функции get_comment_link(). Она может работать медленно, особенно при большом количестве комментариев.
### Возвращаемое значение
Функция возвращает:
- **int|null**: Номер страницы с комментарием или null, если произошла ошибка.
### Синтаксис
```php
get_page_of_comment( $comment_id, $args );
Параметры
$comment_id(int) (обязательный): ID комментария.$args(array): Массив дополнительных параметров (по умолчанию — пустой массив).
Дополнительные параметры в $args:
-
type(string): Позволяет ограничить выборку комментариев заданным типом. Принимает значения:'comment'(коммент)'trackback'(треки)'pingback'(пинги)'pings'(треки и пинги)'all'(все, по умолчанию).
-
per_page(int): Количество комментариев на странице. По умолчанию — значение опции'comments_per_page'. -
max_depth(int|string): Определяет, для какого уровня комментариев будет вычисляться страница. Если больше 1, то будет определена страница для родительского комментария$comment_id. По умолчанию — значение опции'thread_comments_depth'.
Примеры использования
Пример 1: Получение номера страницы с комментарием
echo get_page_of_comment( 11175 );
// Выводит: 5
Пример 2: Получение ссылки на комментарий
echo get_comment_link( 11175 );
// Выводит: http://example.com/hello-world/comment-page-5#comment-11175
В данном случае номер страницы (int) 5 получен с помощью функции get_page_of_comment().
Заметки
- Глобальная переменная:
$wpdb— об��ект абстракции базы данных WordPress.
Изменения
- Добавлена в версии 2.7.0.
Исходный код функции get_page_of_comment
Функция реализована в файле wp-includes/comment.php и выглядит следующим образом:
function get_page_of_comment( $comment_id, $args = array() ) {
global $wpdb;
$page = null;
$comment = get_comment( $comment_id );
if ( ! $comment ) {
return;
}
$defaults = array(
'type' => 'all',
'page' => '',
'per_page' => '',
'max_depth' => '',
);
$args = wp_parse_args( $args, $defaults );
$original_args = $args;
// Порядок приоритета: 1. $args['per_page'], 2. 'comments_per_page' query_var, 3. 'comments_per_page' option.
if ( get_option( 'page_comments' ) ) {
if ( '' === $args['per_page'] ) {
$args['per_page'] = get_query_var( 'comments_per_page' );
}
if ( '' === $args['per_page'] ) {
$args['per_page'] = get_option( 'comments_per_page' );
}
}
if ( empty( $args['per_page'] ) ) {
$args['per_page'] = 0;
$args['page'] = 0;
}
if ( $args['per_page'] < 1 ) {
$page = 1;
}
if ( null === $page ) {
if ( '' === $args['max_depth'] ) {
if ( get_option( 'thread_comments' ) ) {
$args['max_depth'] = get_option( 'thread_comments_depth' );
} else {
$args['max_depth'] = -1;
}
}
// Находим родительский комментарий, если включены вложенные комментарии.
if ( $args['max_depth'] > 1 && 0 != $comment->comment_parent ) {
return get_page_of_comment( $comment->comment_parent, $args );
}
$comment_args = array(
'type' => $args['type'],
'post_id' => $comment->comment_post_ID,
'fields' => 'ids',
'count' => true,
'status' => 'approve',
'orderby' => 'none',
'parent' => 0,
'date_query' => array(
array(
'column' => "$wpdb->comments.comment_date_gmt",
'before' => $comment->comment_date_gmt,
),
),
);
if ( is_user_logged_in() ) {
$comment_args['include_unapproved'] = array( get_current_user_id() );
} else {
$unapproved_email = wp_get_unapproved_comment_author_email();
if ( $unapproved_email ) {
$comment_args['include_unapproved'] = array( $unapproved_email );
}
}
$comment_args = apply_filters( 'get_page_of_comment_query_args', $comment_args );
$comment_query = new WP_Comment_Query();
$older_comment_count = $comment_query->query( $comment_args );
// Нет старых комментариев? Значит, это страница #1.
if ( 0 == $older_comment_count ) {
$page = 1;
} else {
$page = (int) ceil( ( $older_comment_count + 1 ) / $args['per_page'] );
}
}
return apply_filters( 'get_page_of_comment', (int) $page, $args, $original_args, $comment_id );
}
Связанные функции
Пагинация комментариев
get_comment_pages_count()get_comments_pagenum_link()get_next_comments_link()get_previous_comments_link()get_the_comments_navigation()paginate_comments_links()the_comments_navigation()the_comments_pagination()
Управление комментариями
cancel_comment_reply_link()comment_author_email_link()comment_form()get_comment()wp_delete_comment()wp_insert_comment()
Эти функции помогут вам в управлении комментариями и их отображении на вашем сайте WordPress.