WordPress.org

Make WordPress Core

Ticket #22744: 22744.14.diff

File 22744.14.diff, 4.6 KB (added by flixos90, 21 months ago)
  • src/wp-admin/includes/ajax-actions.php

     
    23982398                $query['post_status'] .= ',private';
    23992399
    24002400        // Filter query clauses to include filenames.
    2401         add_filter( 'posts_clauses', '_filter_query_attachment_filenames' );
     2401        if ( isset( $query['s'] ) ) {
     2402                add_filter( 'posts_clauses', '_filter_query_attachment_filenames' );
     2403        }
    24022404
    24032405        /**
    24042406         * Filters the arguments passed to WP_Query during an Ajax
  • src/wp-admin/includes/post.php

     
    11451145        }
    11461146
    11471147        // Filter query clauses to include filenames.
    1148         add_filter( 'posts_clauses', '_filter_query_attachment_filenames' );
     1148        if ( isset( $q['s'] ) ) {
     1149                add_filter( 'posts_clauses', '_filter_query_attachment_filenames' );
     1150        }
    11491151
    11501152        return $q;
    11511153}
     
    11641166        global $wpdb;
    11651167        remove_filter( 'posts_clauses', __FUNCTION__ );
    11661168
    1167         $clauses['join'] = " INNER JOIN {$wpdb->postmeta} ON ( {$wpdb->posts}.ID = {$wpdb->postmeta}.post_id )";
     1169        // Add a LEFT JOIN of the postmeta table so we don't trample existing JOINs.
     1170        $clauses['join'] .= " LEFT JOIN {$wpdb->postmeta} AS sq1 ON ( {$wpdb->posts}.ID = sq1.post_id AND sq1.meta_key = '_wp_attached_file' )";
     1171
    11681172        $clauses['groupby'] = "{$wpdb->posts}.ID";
    11691173
    11701174        $clauses['where'] = preg_replace(
    11711175                "/\({$wpdb->posts}.post_content (NOT LIKE|LIKE) (\'[^']+\')\)/",
    1172                 "$0 OR ( {$wpdb->postmeta}.meta_key = '_wp_attached_file' AND {$wpdb->postmeta}.meta_value $1 $2 )",
     1176                "$0 OR ( sq1.meta_value $1 $2 )",
    11731177                $clauses['where'] );
    11741178
    11751179        return $clauses;
  • tests/phpunit/tests/query/search.php

     
    384384                $this->assertNotEquals( array( $attachment ), $q->posts );
    385385        }
    386386
     387        /**
     388         * @ticket 22744
     389         */
     390        public function test_include_file_names_in_attachment_search_with_meta_query() {
     391                $attachment = self::factory()->post->create( array(
     392                        'post_type'    => 'attachment',
     393                        'post_status'  => 'publish',
     394                        'post_title'   => 'bar foo',
     395                        'post_content' => 'foo bar',
     396                        'post_excerpt' => 'This post has foo',
     397                ) );
     398
     399                add_post_meta( $attachment, '_wp_attached_file', 'some-image4.png', true );
     400                add_post_meta( $attachment, '_test_meta_key', 'value', true );
     401                add_filter( 'posts_clauses', '_filter_query_attachment_filenames' );
     402
     403                // Pass post_type a string value.
     404                $q = new WP_Query( array(
     405                        's'           => 'image4',
     406                        'fields'      => 'ids',
     407                        'post_type'   => 'attachment',
     408                        'post_status' => 'inherit',
     409                        'meta_query'  => array(
     410                                array(
     411                                        'key'     => '_test_meta_key',
     412                                        'value'   => 'value',
     413                                        'compare' => '=',
     414                                ),
     415                        ),
     416                ) );
     417
     418                $this->assertSame( array( $attachment ), $q->posts );
     419        }
     420
     421        /**
     422         * @ticket 22744
     423         */
     424        public function test_include_file_names_in_attachment_search_with_tax_query() {
     425                $attachment = self::factory()->post->create( array(
     426                        'post_type'    => 'attachment',
     427                        'post_status'  => 'publish',
     428                        'post_title'   => 'bar foo',
     429                        'post_content' => 'foo bar',
     430                        'post_excerpt' => 'This post has foo',
     431                ) );
     432
     433                // Add a tag to the post.
     434                wp_set_post_terms( $attachment, 'test', 'post_tag' );
     435
     436                add_post_meta( $attachment, '_wp_attached_file', 'some-image5.png', true );
     437                add_filter( 'posts_clauses', '_filter_query_attachment_filenames' );
     438
     439                // Pass post_type a string value.
     440                $q = new WP_Query( array(
     441                        's'           => 'image5',
     442                        'fields'      => 'ids',
     443                        'post_type'   => 'attachment',
     444                        'post_status' => 'inherit',
     445                        'tax_query' => array(
     446                                array(
     447                                        'taxonomy' => 'post_tag',
     448                                        'field'    => 'slug',
     449                                        'terms'    => 'test',
     450                                ),
     451                        ),
     452                ) );
     453
     454                $this->assertSame( array( $attachment ), $q->posts );
     455        }
     456
     457        /**
     458         * @ticket 22744
     459         */
     460        public function test_filter_query_attachment_filenames_unhooks_itself() {
     461                add_filter( 'posts_clauses', '_filter_query_attachment_filenames' );
     462
     463                apply_filters( 'posts_clauses', array(
     464                        'where'    => '',
     465                        'groupby'  => '',
     466                        'join'     => '',
     467                        'orderby'  => '',
     468                        'distinct' => '',
     469                        'fields'   => '',
     470                        'limit'    => '',
     471                ) );
     472
     473                $result = has_filter( 'posts_clauses', '_filter_query_attachment_filenames' );
     474
     475                $this->assertFalse( $result );
     476        }
     477
    387478        public function filter_posts_search( $sql ) {
    388479                return $sql . ' /* posts_search */';
    389480        }