diff --git src/wp-includes/comment-template.php src/wp-includes/comment-template.php
index e1dbd24..f1ab58d 100644
|
|
function wp_comment_form_unfiltered_html_nonce() { |
1242 | 1242 | * @global int $user_ID |
1243 | 1243 | * @global string $user_identity |
1244 | 1244 | * @global bool $overridden_cpage |
1245 | | * @global bool $withcomments |
| 1245 | * @global bool $withcomments |
1246 | 1246 | * |
1247 | 1247 | * @param string $file Optional. The file to load. Default '/comments.php'. |
1248 | 1248 | * @param bool $separate_comments Optional. Whether to separate the comments by comment type. |
… |
… |
function wp_list_comments( $args = array(), $comments = null ) { |
1907 | 1907 | */ |
1908 | 1908 | $r = apply_filters( 'wp_list_comments_args', $r ); |
1909 | 1909 | |
1910 | | /* |
1911 | | * If 'page' or 'per_page' has been passed, and does not match what's in $wp_query, |
1912 | | * perform a separate comment query and allow Walker_Comment to paginate. |
1913 | | */ |
1914 | | if ( is_singular() && ( $r['page'] || $r['per_page'] ) ) { |
1915 | | $current_cpage = get_query_var( 'cpage' ); |
1916 | | if ( ! $current_cpage ) { |
1917 | | $current_cpage = 'newest' === get_option( 'default_comments_page' ) ? 1 : $wp_query->max_num_comment_pages; |
1918 | | } |
1919 | | |
1920 | | $current_per_page = get_query_var( 'comments_per_page' ); |
1921 | | if ( $r['page'] != $current_cpage || $r['per_page'] != $current_per_page ) { |
1922 | | $comments = get_comments( array( |
1923 | | 'post_id' => get_queried_object_id(), |
1924 | | 'orderby' => 'comment_date_gmt', |
1925 | | 'order' => 'ASC', |
1926 | | 'status' => 'all', |
1927 | | ) ); |
1928 | | } |
1929 | | } |
1930 | | |
1931 | 1910 | // Figure out what comments we'll be looping through ($_comments) |
1932 | 1911 | if ( null !== $comments ) { |
1933 | 1912 | $comments = (array) $comments; |
… |
… |
function wp_list_comments( $args = array(), $comments = null ) { |
1942 | 1921 | $_comments = $comments; |
1943 | 1922 | } |
1944 | 1923 | } else { |
1945 | | if ( empty($wp_query->comments) ) |
1946 | | return; |
1947 | | if ( 'all' != $r['type'] ) { |
1948 | | if ( empty($wp_query->comments_by_type) ) |
1949 | | $wp_query->comments_by_type = separate_comments($wp_query->comments); |
1950 | | if ( empty($wp_query->comments_by_type[$r['type']]) ) |
1951 | | return; |
1952 | | $_comments = $wp_query->comments_by_type[$r['type']]; |
1953 | | } else { |
1954 | | $_comments = $wp_query->comments; |
1955 | | } |
| 1924 | /* |
| 1925 | * If 'page' or 'per_page' has been passed, and does not match what's in $wp_query, |
| 1926 | * perform a separate comment query and allow Walker_Comment to paginate. |
| 1927 | */ |
| 1928 | if ( is_singular() && ( $r['page'] || $r['per_page'] ) ) { |
| 1929 | $current_cpage = get_query_var( 'cpage' ); |
| 1930 | if ( ! $current_cpage ) { |
| 1931 | $current_cpage = 'newest' === get_option( 'default_comments_page' ) ? 1 : $wp_query->max_num_comment_pages; |
| 1932 | } |
1956 | 1933 | |
1957 | | // Pagination is already handled by `WP_Comment_Query`, so we tell Walker not to bother. |
1958 | | if ( $wp_query->max_num_comment_pages ) { |
1959 | | $default_comments_page = get_option( 'default_comments_page' ); |
1960 | | $cpage = get_query_var( 'cpage' ); |
1961 | | if ( 'newest' === $default_comments_page ) { |
1962 | | $r['cpage'] = $cpage; |
| 1934 | $current_per_page = get_query_var( 'comments_per_page' ); |
| 1935 | if ( $r['page'] != $current_cpage || $r['per_page'] != $current_per_page ) { |
| 1936 | $comments = get_comments( array( |
| 1937 | 'post_id' => get_queried_object_id(), |
| 1938 | 'orderby' => 'comment_date_gmt', |
| 1939 | 'order' => 'ASC', |
| 1940 | 'status' => 'all', |
| 1941 | ) ); |
| 1942 | |
| 1943 | if ( 'all' != $r['type'] ) { |
| 1944 | $comments_by_type = separate_comments( $comments ); |
| 1945 | if ( empty( $comments_by_type[ $r['type'] ] ) ) { |
| 1946 | return; |
| 1947 | } |
| 1948 | |
| 1949 | $_comments = $comments_by_type[ $r['type'] ]; |
| 1950 | } else { |
| 1951 | $_comments = $comments; |
| 1952 | } |
| 1953 | } |
1963 | 1954 | |
1964 | | // When first page shows oldest comments, post permalink is the same as the comment permalink. |
1965 | | } elseif ( $cpage == 1 ) { |
1966 | | $r['cpage'] = ''; |
| 1955 | // Otherwise, fall back on the comments from `$wp_query->comments`. |
| 1956 | } else { |
| 1957 | if ( empty($wp_query->comments) ) |
| 1958 | return; |
| 1959 | if ( 'all' != $r['type'] ) { |
| 1960 | if ( empty($wp_query->comments_by_type) ) |
| 1961 | $wp_query->comments_by_type = separate_comments($wp_query->comments); |
| 1962 | if ( empty($wp_query->comments_by_type[$r['type']]) ) |
| 1963 | return; |
| 1964 | $_comments = $wp_query->comments_by_type[$r['type']]; |
1967 | 1965 | } else { |
1968 | | $r['cpage'] = $cpage; |
| 1966 | $_comments = $wp_query->comments; |
1969 | 1967 | } |
1970 | 1968 | |
1971 | | $r['page'] = 0; |
1972 | | $r['per_page'] = 0; |
| 1969 | if ( $wp_query->max_num_comment_pages ) { |
| 1970 | $default_comments_page = get_option( 'default_comments_page' ); |
| 1971 | $cpage = get_query_var( 'cpage' ); |
| 1972 | if ( 'newest' === $default_comments_page ) { |
| 1973 | $r['cpage'] = $cpage; |
| 1974 | |
| 1975 | /* |
| 1976 | * When first page shows oldest comments, post permalink is the same as |
| 1977 | * the comment permalink. |
| 1978 | */ |
| 1979 | } elseif ( $cpage == 1 ) { |
| 1980 | $r['cpage'] = ''; |
| 1981 | } else { |
| 1982 | $r['cpage'] = $cpage; |
| 1983 | } |
| 1984 | |
| 1985 | $r['page'] = 0; |
| 1986 | $r['per_page'] = 0; |
| 1987 | } |
1973 | 1988 | } |
1974 | 1989 | } |
1975 | 1990 | |
diff --git tests/phpunit/tests/comment/wpListComments.php tests/phpunit/tests/comment/wpListComments.php
index 84f6e4c..d8214f4 100644
|
|
class Tests_Comment_WpListComments extends WP_UnitTestCase { |
110 | 110 | preg_match_all( '|id="comment\-([0-9]+)"|', $found2, $matches ); |
111 | 111 | $this->assertSame( array( $comments[1], $comments[0] ), array_map( 'intval', $matches[1] ) ); |
112 | 112 | } |
| 113 | |
| 114 | /** |
| 115 | * @ticket 35356 |
| 116 | * @ticket 35175 |
| 117 | */ |
| 118 | public function test_comments_param_should_be_respected_when_custom_pagination_params_are_passed() { |
| 119 | $p = self::factory()->post->create(); |
| 120 | |
| 121 | $comments = array(); |
| 122 | $now = time(); |
| 123 | for ( $i = 0; $i <= 5; $i++ ) { |
| 124 | $comments[] = self::factory()->comment->create( array( |
| 125 | 'comment_post_ID' => $p, |
| 126 | 'comment_date_gmt' => date( 'Y-m-d H:i:s', $now - $i ), |
| 127 | 'comment_author' => 'Commenter ' . $i, |
| 128 | ) ); |
| 129 | } |
| 130 | |
| 131 | update_option( 'page_comments', true ); |
| 132 | update_option( 'comments_per_page', 2 ); |
| 133 | |
| 134 | $_comments = array( get_comment( $comments[1] ), get_comment( $comments[3] ) ); |
| 135 | |
| 136 | // Populate `$wp_query->comments` in order to show that it doesn't override `$_comments`. |
| 137 | $this->go_to( get_permalink( $p ) ); |
| 138 | get_echo( 'comments_template' ); |
| 139 | |
| 140 | $found = wp_list_comments( array( |
| 141 | 'echo' => false, |
| 142 | 'per_page' => 1, |
| 143 | 'page' => 2, |
| 144 | ), $_comments ); |
| 145 | |
| 146 | preg_match_all( '|id="comment\-([0-9]+)"|', $found, $matches ); |
| 147 | $this->assertSame( array( $comments[3] ), array_map( 'intval', $matches[1] ) ); |
| 148 | } |
113 | 149 | } |