Respect approval status when determining comment page count in `comments_template()`.

Since 4.4, when fetching the first page of comments and the 'newest' comments
are set to display first, `comments_template()` must perform arithmetic to
determine which comments to show. See #8071. This arithmetic requires the
total comment count for the current post, which is calculated with a separate
`WP_Comment_Query`. This secondary comment query did not properly account for
non-approved comment statuses; all unapproved comments should be part of the
comment count for admins, and individual users should have their own
unapproved comments included in the count. As a result, `comments_template()`
was, in some cases, being fooled into thinking that a post had fewer comments
available for pagination than it actually had, which resulted in empty pages
of comments.

We correct this problem by mirroring 'status' and 'include_unapproved' params
of the main comment query within the secondary query used to calculate
pagination.

Fixes #35068.
Built from https://develop.svn.wordpress.org/trunk@36040


git-svn-id: http://core.svn.wordpress.org/trunk@36005 1a063a9b-81f0-0310-95a4-ce76da25c4cd
This commit is contained in:
Boone Gorges 2015-12-21 03:07:32 +00:00
parent afc7f43ca0
commit 26caa329f2
2 changed files with 10 additions and 3 deletions

View File

@ -1313,12 +1313,19 @@ function comments_template( $file = '/comments.php', $separate_comments = false
} else { } else {
// If fetching the first page of 'newest', we need a top-level comment count. // If fetching the first page of 'newest', we need a top-level comment count.
$top_level_query = new WP_Comment_Query(); $top_level_query = new WP_Comment_Query();
$top_level_count = $top_level_query->query( array( $top_level_args = array(
'count' => true, 'count' => true,
'orderby' => false, 'orderby' => false,
'post_id' => $post->ID, 'post_id' => $post->ID,
'parent' => 0, 'parent' => 0,
) ); 'status' => 'approve',
);
if ( isset( $comment_args['include_unapproved'] ) ) {
$top_level_args['include_unapproved'] = $comment_args['include_unapproved'];
}
$top_level_count = $top_level_query->query( $top_level_args );
$comment_args['offset'] = ( ceil( $top_level_count / $per_page ) - 1 ) * $per_page; $comment_args['offset'] = ( ceil( $top_level_count / $per_page ) - 1 ) * $per_page;
} }

View File

@ -4,7 +4,7 @@
* *
* @global string $wp_version * @global string $wp_version
*/ */
$wp_version = '4.5-alpha-36038'; $wp_version = '4.5-alpha-36040';
/** /**
* Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema. * Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.