Make WordPress Core


Ignore:
Timestamp:
05/09/2022 01:49:29 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, SergeyBiryukov.
Fixes #55699.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/tests/phpunit/tests/query.php

    r52822 r53370  
    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.