get_page_of_comment( int $comment_id, array $args = array() ): int|null

In this article

Calculates what page number a comment will appear on for comment paging.

Parameters

$comment_idintrequired
Comment ID.
$argsarrayoptional
Array of optional arguments.
  • type string
    Limit paginated comments to those matching a given type.
    Accepts 'comment', 'trackback', 'pingback', 'pings' (trackbacks and pingbacks), or 'all'. Default 'all'.
  • per_page int
    Per-page count to use when calculating pagination.
    Defaults to the value of the 'comments_per_page' option.
  • max_depth int|string
    If greater than 1, comment page will be determined for the top-level parent $comment_id.
    Defaults to the value of the 'thread_comments_depth' option.

Default:array()

Return

int|null Comment page number or null on error.

Source

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;	// 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',	'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 );	}	}	/** * Filters the arguments used to query comments in get_page_of_comment(). * * @since 5.5.0 * * @see WP_Comment_Query::__construct() * * @param array $comment_args { * Array of WP_Comment_Query arguments. * * @type string $type Limit paginated comments to those matching a given type. * Accepts 'comment', 'trackback', 'pingback', 'pings' * (trackbacks and pingbacks), or 'all'. Default 'all'. * @type int $post_id ID of the post. * @type string $fields Comment fields to return. * @type bool $count Whether to return a comment count (true) or array * of comment objects (false). * @type string $status Comment status. * @type int $parent Parent ID of comment to retrieve children of. * @type array $date_query Date query clauses to limit comments by. See WP_Date_Query. * @type array $include_unapproved Array of IDs or email addresses whose unapproved comments * will be included in paginated comments. * } */	$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 );	// 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 = (int) 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 ); } 

Hooks

apply_filters( ‘get_page_of_comment’, int $page, array $args, array $original_args, int $comment_id )

Filters the calculated page on which a comment appears.

apply_filters( ‘get_page_of_comment_query_args’, array $comment_args )

Filters the arguments used to query comments in get_page_of_comment() .

Changelog

VersionDescription
2.7.0Introduced.

User Contributed Notes

You must log in before being able to contribute a note or feedback.