Make WordPress Core

Changeset 59081


Ignore:
Timestamp:
09/23/2024 12:48:32 PM (2 years ago)
Author:
gziolo
Message:

Comments: Pass $page as argument to comments functions

Removes query alteration from build_comment_query_vars_from_block by introducing a new way to pass the $page as argument to functions handling pagination for the comments.

Props cybr, santosguillamot, bernhard-reiter, gziolo.
Fixes #60806.

Location:
trunk
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/blocks.php

    r59077 r59081  
    25682568                                }
    25692569                        }
    2570                         // Set the `cpage` query var to ensure the previous and next pagination links are correct
    2571                         // when inheriting the Discussion Settings.
    2572                         if ( 0 === $page && isset( $comment_args['paged'] ) && $comment_args['paged'] > 0 ) {
    2573                                 set_query_var( 'cpage', $comment_args['paged'] );
    2574                         }
    25752570                }
    25762571        }
  • trunk/src/wp-includes/link-template.php

    r59013 r59081  
    31103110 *
    31113111 * @since 2.7.1
     3112 * @since 6.7.0 Added the `page` parameter.
    31123113 *
    31133114 * @global WP_Query $wp_query WordPress Query object.
    31143115 *
    3115  * @param string $label    Optional. Label for link text. Default empty.
    3116  * @param int    $max_page Optional. Max page. Default 0.
     3116 * @param string   $label    Optional. Label for link text. Default empty.
     3117 * @param int      $max_page Optional. Max page. Default 0.
     3118 * @param int|null $page     Optional. Page number. Default null.
    31173119 * @return string|void HTML-formatted link for the next page of comments.
    31183120 */
    3119 function get_next_comments_link( $label = '', $max_page = 0 ) {
     3121function get_next_comments_link( $label = '', $max_page = 0, $page = null ) {
    31203122        global $wp_query;
    31213123
    … …  
    31243126        }
    31253127
    3126         $page = get_query_var( 'cpage' );
     3128        if ( is_null( $page ) ) {
     3129                $page = get_query_var( 'cpage' );
     3130        }
    31273131
    31283132        if ( ! $page ) {
    … …  
    31813185 *
    31823186 * @since 2.7.1
    3183  *
    3184  * @param string $label Optional. Label for comments link text. Default empty.
     3187 * @since 6.7.0 Added the `page` parameter.
     3188 *
     3189 * @param string   $label Optional. Label for comments link text. Default empty.
     3190 * @param int|null $page  Optional. Page number. Default null.
    31853191 * @return string|void HTML-formatted link for the previous page of comments.
    31863192 */
    3187 function get_previous_comments_link( $label = '' ) {
     3193function get_previous_comments_link( $label = '', $page = null ) {
    31883194        if ( ! is_singular() ) {
    31893195                return;
    31903196        }
    31913197
    3192         $page = get_query_var( 'cpage' );
     3198        if ( is_null( $page ) ) {
     3199                $page = get_query_var( 'cpage' );
     3200        }
    31933201
    31943202        if ( (int) $page <= 1 ) {
  • trunk/tests/phpunit/tests/blocks/renderCommentTemplate.php

    r56559 r59081  
    220220         * Test that both "Older Comments" and "Newer Comments" are displayed in the correct order
    221221         * inside the Comment Query Loop when we enable pagination on Discussion Settings.
    222          * In order to do that, it should exist a query var 'cpage' set with the $comment_args['paged'] value.
    223222         *
    224223         * @ticket 55505
     224         * @ticket 60806
    225225         * @covers ::build_comment_query_vars_from_block
    226226         */
    227         public function test_build_comment_query_vars_from_block_sets_cpage_var() {
     227        public function test_build_comment_query_vars_from_block_sets_max_num_pages() {
    228228
    229229                // This could be any number, we set a fixed one instead of a random for better performance.
    … …  
    254254                $actual = build_comment_query_vars_from_block( $block );
    255255                $this->assertSame( $comment_query_max_num_pages, $actual['paged'] );
    256                 $this->assertSame( $comment_query_max_num_pages, get_query_var( 'cpage' ) );
    257256        }
    258257
  • trunk/tests/phpunit/tests/link/getNextCommentsLink.php

    r56547 r59081  
    1212                $this->go_to( get_permalink( $p ) );
    1313
    14                 $cpage = get_query_var( 'cpage' );
     14                $old_cpage = get_query_var( 'cpage' );
    1515                set_query_var( 'cpage', 3 );
    1616
    1717                $link = get_next_comments_link( 'Next', 5 );
    1818
     19                set_query_var( 'cpage', $old_cpage );
     20
    1921                $this->assertStringContainsString( 'cpage=4', $link );
    20 
    21                 set_query_var( 'cpage', $cpage );
    2222        }
    2323
    … …  
    2929                $this->go_to( get_permalink( $p ) );
    3030
    31                 $cpage = get_query_var( 'cpage' );
     31                $old_cpage = get_query_var( 'cpage' );
    3232                set_query_var( 'cpage', '' );
    3333
    3434                $link = get_next_comments_link( 'Next', 5 );
    3535
     36                set_query_var( 'cpage', $old_cpage );
     37
    3638                $this->assertStringContainsString( 'cpage=2', $link );
     39        }
    3740
    38                 set_query_var( 'cpage', $cpage );
     41        /**
     42         * @ticket 60806
     43         */
     44        public function test_page_should_respect_value_of_page_argument() {
     45                $p = self::factory()->post->create();
     46                $this->go_to( get_permalink( $p ) );
     47
     48                // Check setting the query var is ignored.
     49                $old_cpage = get_query_var( 'cpage' );
     50                set_query_var( 'cpage', 2 );
     51
     52                $link = get_next_comments_link( 'Next', 5, 3 );
     53
     54                set_query_var( 'cpage', $old_cpage );
     55
     56                $this->assertStringContainsString( 'cpage=4', $link );
    3957        }
    4058}
  • trunk/tests/phpunit/tests/link/getPreviousCommentsLink.php

    r56547 r59081  
    1212                $this->go_to( get_permalink( $p ) );
    1313
    14                 $cpage = get_query_var( 'cpage' );
     14                $old_cpage = get_query_var( 'cpage' );
    1515                set_query_var( 'cpage', 3 );
    1616
    17                 $link = get_previous_comments_link( 'Next' );
     17                $link = get_previous_comments_link( 'Previous' );
     18
     19                set_query_var( 'cpage', $old_cpage );
    1820
    1921                $this->assertStringContainsString( 'cpage=2', $link );
    20 
    21                 set_query_var( 'cpage', $cpage );
    2222        }
    2323
    … …  
    2626                $this->go_to( get_permalink( $p ) );
    2727
    28                 $cpage = get_query_var( 'cpage' );
     28                $old_cpage = get_query_var( 'cpage' );
    2929                set_query_var( 'cpage', '' );
    3030
    31                 $link = get_previous_comments_link( 'Next' );
     31                $link = get_previous_comments_link( 'Previous' );
     32
     33                set_query_var( 'cpage', $old_cpage );
    3234
    3335                // Technically, it returns null here.
    3436                $this->assertNull( $link );
     37        }
    3538
    36                 set_query_var( 'cpage', $cpage );
     39        /**
     40         * @ticket 60806
     41         */
     42        public function test_page_should_respect_value_of_page_argument() {
     43                $p = self::factory()->post->create();
     44                $this->go_to( get_permalink( $p ) );
     45
     46                // Check setting the query var is ignored.
     47                $old_cpage = get_query_var( 'cpage' );
     48                set_query_var( 'cpage', 4 );
     49
     50                $link = get_previous_comments_link( 'Previous', 3 );
     51
     52                set_query_var( 'cpage', $old_cpage );
     53
     54                $this->assertStringContainsString( 'cpage=2', $link );
    3755        }
    3856}
Note: See TracChangeset for help on using the changeset viewer.