Make WordPress Core

Changeset 53379


Ignore:
Timestamp:
05/10/2022 04:07:10 PM (3 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.