Make WordPress Core

Changeset 53379


Ignore:
Timestamp:
05/10/2022 04:07:10 PM (4 years ago)
Author:
SergeyBiryukov
Message:

Query: Restore late compact() call for the posts_clauses_request filter.

This addresses a backward compatibility break where posts_join_request and other filters were applied, but their results were subsequently discarded and earlier values were used instead.

Follow-up to [52974], [53175].

Props 5um17, johnbillion, peterwilsoncc, hellofromTonya, SergeyBiryukov.
Merges [53370] and [53375] to the 6.0 branch.
Fixes #55699.

Location:
branches/6.0
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • branches/6.0

  • branches/6.0/src/wp-includes/class-wp-query.php

    r53277 r53379  
    27552755                }
    27562756
    2757                 $clauses = array( 'where', 'groupby', 'join', 'orderby', 'distinct', 'fields', 'limits' );
     2757                $pieces = array( 'where', 'groupby', 'join', 'orderby', 'distinct', 'fields', 'limits' );
    27582758
    27592759                /*
    … …  
    28572857                         * @param WP_Query $query   The WP_Query instance (passed by reference).
    28582858                         */
    2859                         $clauses = (array) apply_filters_ref_array( 'posts_clauses', array( compact( $clauses ), &$this ) );
     2859                        $clauses = (array) apply_filters_ref_array( 'posts_clauses', array( compact( $pieces ), &$this ) );
    28602860
    28612861                        $where    = isset( $clauses['where'] ) ? $clauses['where'] : '';
    … …  
    29912991                         * @param WP_Query $query  The WP_Query instance (passed by reference).
    29922992                         */
    2993                         $clauses = (array) apply_filters_ref_array( 'posts_clauses_request', array( $clauses, &$this ) );
     2993                        $clauses = (array) apply_filters_ref_array( 'posts_clauses_request', array( compact( $pieces ), &$this ) );
    29942994
    29952995                        $where    = isset( $clauses['where'] ) ? $clauses['where'] : '';
  • branches/6.0/tests/phpunit/tests/query.php

    r52822 r53379  
    720720                $this->assertSame( get_queried_object_id(), $user_id );
    721721        }
     722
     723        /**
     724         * Tests that the `posts_clauses` filter receives an array of clauses
     725         * with the other `posts_*` filters applied, e.g. `posts_join_paged`.
     726         *
     727         * @ticket 55699
     728         * @covers WP_Query::get_posts
     729         */
     730        public function test_posts_clauses_filter_should_receive_filtered_clauses() {
     731                add_filter(
     732                        'posts_join_paged',
     733                        static function() {
     734                                return '/* posts_join_paged */';
     735                        }
     736                );
     737
     738                $filter = new MockAction();
     739                add_filter( 'posts_clauses', array( $filter, 'filter' ), 10, 2 );
     740                $this->go_to( '/' );
     741                $filter_args   = $filter->get_args();
     742                $posts_clauses = $filter_args[0][0];
     743
     744                $this->assertArrayHasKey( 'join', $posts_clauses );
     745                $this->assertSame( '/* posts_join_paged */', $posts_clauses['join'] );
     746        }
     747
     748        /**
     749         * Tests that the `posts_clauses_request` filter receives an array of clauses
     750         * with the other `posts_*_request` filters applied, e.g. `posts_join_request`.
     751         *
     752         * @ticket 55699
     753         * @covers WP_Query::get_posts
     754         */
     755        public function test_posts_clauses_request_filter_should_receive_filtered_clauses() {
     756                add_filter(
     757                        'posts_join_request',
     758                        static function() {
     759                                return '/* posts_join_request */';
     760                        }
     761                );
     762
     763                $filter = new MockAction();
     764                add_filter( 'posts_clauses_request', array( $filter, 'filter' ), 10, 2 );
     765                $this->go_to( '/' );
     766                $filter_args           = $filter->get_args();
     767                $posts_clauses_request = $filter_args[0][0];
     768
     769                $this->assertArrayHasKey( 'join', $posts_clauses_request );
     770                $this->assertSame( '/* posts_join_request */', $posts_clauses_request['join'] );
     771        }
    722772}
Note: See TracChangeset for help on using the changeset viewer.