mirror of
https://github.com/WordPress/WordPress.git
synced 2024-12-23 01:27:36 +01:00
Always respect $comments
array passed to wp_list_comments()
.
[36157] fixed a bug whereby `wp_list_comments()` would not properly recognize custom pagination arguments. See #35175. However, it inadvertently introduced a bug that caused any `$comments` array explicitly passed to the function to be ignored, when that array was accompanied by pagination arguments that differ from those in `$wp_query`. We address this bug by moving the logic introduced in [36157] inside a block that only fires when no `$comments` array has been provided to the function. Props ivankristianto. Fixes #35356. Built from https://develop.svn.wordpress.org/trunk@36276 git-svn-id: http://core.svn.wordpress.org/trunk@36243 1a063a9b-81f0-0310-95a4-ce76da25c4cd
This commit is contained in:
parent
294a164b15
commit
4ac35f5713
@ -1910,27 +1910,6 @@ function wp_list_comments( $args = array(), $comments = null ) {
|
|||||||
*/
|
*/
|
||||||
$r = apply_filters( 'wp_list_comments_args', $r );
|
$r = apply_filters( 'wp_list_comments_args', $r );
|
||||||
|
|
||||||
/*
|
|
||||||
* If 'page' or 'per_page' has been passed, and does not match what's in $wp_query,
|
|
||||||
* perform a separate comment query and allow Walker_Comment to paginate.
|
|
||||||
*/
|
|
||||||
if ( is_singular() && ( $r['page'] || $r['per_page'] ) ) {
|
|
||||||
$current_cpage = get_query_var( 'cpage' );
|
|
||||||
if ( ! $current_cpage ) {
|
|
||||||
$current_cpage = 'newest' === get_option( 'default_comments_page' ) ? 1 : $wp_query->max_num_comment_pages;
|
|
||||||
}
|
|
||||||
|
|
||||||
$current_per_page = get_query_var( 'comments_per_page' );
|
|
||||||
if ( $r['page'] != $current_cpage || $r['per_page'] != $current_per_page ) {
|
|
||||||
$comments = get_comments( array(
|
|
||||||
'post_id' => get_queried_object_id(),
|
|
||||||
'orderby' => 'comment_date_gmt',
|
|
||||||
'order' => 'ASC',
|
|
||||||
'status' => 'all',
|
|
||||||
) );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Figure out what comments we'll be looping through ($_comments)
|
// Figure out what comments we'll be looping through ($_comments)
|
||||||
if ( null !== $comments ) {
|
if ( null !== $comments ) {
|
||||||
$comments = (array) $comments;
|
$comments = (array) $comments;
|
||||||
@ -1945,34 +1924,70 @@ function wp_list_comments( $args = array(), $comments = null ) {
|
|||||||
$_comments = $comments;
|
$_comments = $comments;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if ( empty($wp_query->comments) )
|
/*
|
||||||
return;
|
* If 'page' or 'per_page' has been passed, and does not match what's in $wp_query,
|
||||||
if ( 'all' != $r['type'] ) {
|
* perform a separate comment query and allow Walker_Comment to paginate.
|
||||||
if ( empty($wp_query->comments_by_type) )
|
*/
|
||||||
$wp_query->comments_by_type = separate_comments($wp_query->comments);
|
if ( is_singular() && ( $r['page'] || $r['per_page'] ) ) {
|
||||||
if ( empty($wp_query->comments_by_type[$r['type']]) )
|
$current_cpage = get_query_var( 'cpage' );
|
||||||
return;
|
if ( ! $current_cpage ) {
|
||||||
$_comments = $wp_query->comments_by_type[$r['type']];
|
$current_cpage = 'newest' === get_option( 'default_comments_page' ) ? 1 : $wp_query->max_num_comment_pages;
|
||||||
} else {
|
|
||||||
$_comments = $wp_query->comments;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Pagination is already handled by `WP_Comment_Query`, so we tell Walker not to bother.
|
|
||||||
if ( $wp_query->max_num_comment_pages ) {
|
|
||||||
$default_comments_page = get_option( 'default_comments_page' );
|
|
||||||
$cpage = get_query_var( 'cpage' );
|
|
||||||
if ( 'newest' === $default_comments_page ) {
|
|
||||||
$r['cpage'] = $cpage;
|
|
||||||
|
|
||||||
// When first page shows oldest comments, post permalink is the same as the comment permalink.
|
|
||||||
} elseif ( $cpage == 1 ) {
|
|
||||||
$r['cpage'] = '';
|
|
||||||
} else {
|
|
||||||
$r['cpage'] = $cpage;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$r['page'] = 0;
|
$current_per_page = get_query_var( 'comments_per_page' );
|
||||||
$r['per_page'] = 0;
|
if ( $r['page'] != $current_cpage || $r['per_page'] != $current_per_page ) {
|
||||||
|
$comments = get_comments( array(
|
||||||
|
'post_id' => get_queried_object_id(),
|
||||||
|
'orderby' => 'comment_date_gmt',
|
||||||
|
'order' => 'ASC',
|
||||||
|
'status' => 'all',
|
||||||
|
) );
|
||||||
|
|
||||||
|
if ( 'all' != $r['type'] ) {
|
||||||
|
$comments_by_type = separate_comments( $comments );
|
||||||
|
if ( empty( $comments_by_type[ $r['type'] ] ) ) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$_comments = $comments_by_type[ $r['type'] ];
|
||||||
|
} else {
|
||||||
|
$_comments = $comments;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Otherwise, fall back on the comments from `$wp_query->comments`.
|
||||||
|
} else {
|
||||||
|
if ( empty($wp_query->comments) )
|
||||||
|
return;
|
||||||
|
if ( 'all' != $r['type'] ) {
|
||||||
|
if ( empty($wp_query->comments_by_type) )
|
||||||
|
$wp_query->comments_by_type = separate_comments($wp_query->comments);
|
||||||
|
if ( empty($wp_query->comments_by_type[$r['type']]) )
|
||||||
|
return;
|
||||||
|
$_comments = $wp_query->comments_by_type[$r['type']];
|
||||||
|
} else {
|
||||||
|
$_comments = $wp_query->comments;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( $wp_query->max_num_comment_pages ) {
|
||||||
|
$default_comments_page = get_option( 'default_comments_page' );
|
||||||
|
$cpage = get_query_var( 'cpage' );
|
||||||
|
if ( 'newest' === $default_comments_page ) {
|
||||||
|
$r['cpage'] = $cpage;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* When first page shows oldest comments, post permalink is the same as
|
||||||
|
* the comment permalink.
|
||||||
|
*/
|
||||||
|
} elseif ( $cpage == 1 ) {
|
||||||
|
$r['cpage'] = '';
|
||||||
|
} else {
|
||||||
|
$r['cpage'] = $cpage;
|
||||||
|
}
|
||||||
|
|
||||||
|
$r['page'] = 0;
|
||||||
|
$r['per_page'] = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
*
|
*
|
||||||
* @global string $wp_version
|
* @global string $wp_version
|
||||||
*/
|
*/
|
||||||
$wp_version = '4.5-alpha-36275';
|
$wp_version = '4.5-alpha-36276';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 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.
|
||||||
|
Loading…
Reference in New Issue
Block a user