WordPress как на ладони
Наставник Трепачёв Д.П., phphtml.net wordpress jino

get_page_of_comment() WP 2.7.0

Получает страницу пагинации комментариев во фронт-энде на которой должен отображаться указанный комментарий.

Функция используется при генерации ссылки на текущий комментарий: get_comment_link(), если в настройках обсуждения стоит настройка "Разбивать комментарии верхнего уровня на страницы по 10" (пагинация).

Функция делает запрос в БД, где считает все родительские комментарии текущего поста и делит результат на число комментариев на странице. Так получается текущая страница пагинации.

Если текущий комментарий является дочерним комментарием, то функцию будет вызывать сама себя, пока не дойдет до родительского комментария, затем будет проделана операция подсчета номера страницы.

Используется в: get_comment_link().
✈ 1 раз = 0.005654с = очень медленно | 50000 раз = 21.51с = медленно
Хуки из функции:
Возвращает

Число/null. Номер страницы комментария или null при ошибке.

Использование

get_page_of_comment( $comment_ID, $args )
$comment_ID(число) (обязательный)
ID комменатрия.
$args(массив)

Аргументы. По умолчанию:

array(
'type' => 'all',
'page' => '',
'per_page' => '',
'max_depth' => ''
);

По умолчанию: array()

Примеры

#1 Получим номер страница пагинации комментария

echo get_page_of_comment( 11175 );
// Выведет: 5

#2 Как работа функции выглядите в ссылке

Получим ссылку на комментарий с помощью echo get_comment_link( 11175 );

echo get_comment_link( 11175 );
// выведет: http://site.ru/hello-world/comment-page-5#comment-11175
// здесь число 5 получено этой функций

Код get page of comment: wp-includes/comment.php WP 4.8.1

<?php
function get_page_of_comment( $comment_ID, $args = array() ) {
	global $wpdb;

	$page = null;

	if ( !$comment = get_comment( $comment_ID ) )
		return;

	$defaults = array( 'type' => 'all', 'page' => '', 'per_page' => '', 'max_depth' => '' );
	$args = wp_parse_args( $args, $defaults );
	$original_args = $args;

	// Order of precedence: 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;
		}

		// Find this comment's top level parent if threading is enabled
		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',
			'parent'     => 0,
			'date_query' => array(
				array(
					'column' => "$wpdb->comments.comment_date_gmt",
					'before' => $comment->comment_date_gmt,
				)
			),
		);

		$comment_query = new WP_Comment_Query();
		$older_comment_count = $comment_query->query( $comment_args );

		// No older comments? Then it's page #1.
		if ( 0 == $older_comment_count ) {
			$page = 1;

		// Divide comments older than this one by comments per page to get this comment's page number
		} else {
			$page = ceil( ( $older_comment_count + 1 ) / $args['per_page'] );
		}
	}

	/**
	 * Filters the calculated page on which a comment appears.
	 *
	 * @since 4.4.0
	 * @since 4.7.0 Introduced the `$comment_ID` parameter.
	 *
	 * @param int   $page          Comment page.
	 * @param array $args {
	 *     Arguments used to calculate pagination. These include arguments auto-detected by the function,
	 *     based on query vars, system settings, etc. For pristine arguments passed to the function,
	 *     see `$original_args`.
	 *
	 *     @type string $type      Type of comments to count.
	 *     @type int    $page      Calculated current page.
	 *     @type int    $per_page  Calculated number of comments per page.
	 *     @type int    $max_depth Maximum comment threading depth allowed.
	 * }
	 * @param array $original_args {
	 *     Array of arguments passed to the function. Some or all of these may not be set.
	 *
	 *     @type string $type      Type of comments to count.
	 *     @type int    $page      Current comment page.
	 *     @type int    $per_page  Number of comments per page.
	 *     @type int    $max_depth Maximum comment threading depth allowed.
	 * }
	 * @param int $comment_ID ID of the comment.
	 */
	return apply_filters( 'get_page_of_comment', (int) $page, $args, $original_args, $comment_ID );
}

Cвязанные функции

Из метки: Пагинация комментариев (навигация)

Еще из раздела: Комментарии

get_page_of_comment Комментариев нет

Здравствуйте, !

Ваш комментарий