Media: Refactor search by filename within the admin.
Props vortfu, xknown, peterwilsoncc, paulkevan. Built from https://develop.svn.wordpress.org/trunk@54524 git-svn-id: http://core.svn.wordpress.org/trunk@54079 1a063a9b-81f0-0310-95a4-ce76da25c4cd
This commit is contained in:
@@ -445,6 +445,14 @@ class WP_Query {
|
||||
*/
|
||||
public $thumbnails_cached = false;
|
||||
|
||||
/**
|
||||
* Controls whether an attachment query should include filenames or not.
|
||||
*
|
||||
* @since 6.0.3
|
||||
* @var bool
|
||||
*/
|
||||
protected $allow_query_attachment_by_filename = false;
|
||||
|
||||
/**
|
||||
* Cached list of search stopwords.
|
||||
*
|
||||
@@ -1429,8 +1437,13 @@ class WP_Query {
|
||||
$q['search_orderby_title'][] = $wpdb->prepare( "{$wpdb->posts}.post_title LIKE %s", $like );
|
||||
}
|
||||
|
||||
$like = $n . $wpdb->esc_like( $term ) . $n;
|
||||
$search .= $wpdb->prepare( "{$searchand}(({$wpdb->posts}.post_title $like_op %s) $andor_op ({$wpdb->posts}.post_excerpt $like_op %s) $andor_op ({$wpdb->posts}.post_content $like_op %s))", $like, $like, $like );
|
||||
$like = $n . $wpdb->esc_like( $term ) . $n;
|
||||
|
||||
if ( ! empty( $this->allow_query_attachment_by_filename ) ) {
|
||||
$search .= $wpdb->prepare( "{$searchand}(({$wpdb->posts}.post_title $like_op %s) $andor_op ({$wpdb->posts}.post_excerpt $like_op %s) $andor_op ({$wpdb->posts}.post_content $like_op %s) $andor_op (sq1.meta_value $like_op %s))", $like, $like, $like, $like );
|
||||
} else {
|
||||
$search .= $wpdb->prepare( "{$searchand}(({$wpdb->posts}.post_title $like_op %s) $andor_op ({$wpdb->posts}.post_excerpt $like_op %s) $andor_op ({$wpdb->posts}.post_content $like_op %s))", $like, $like, $like );
|
||||
}
|
||||
$searchand = ' AND ';
|
||||
}
|
||||
|
||||
@@ -1825,6 +1838,16 @@ class WP_Query {
|
||||
// Fill again in case 'pre_get_posts' unset some vars.
|
||||
$q = $this->fill_query_vars( $q );
|
||||
|
||||
/**
|
||||
* Filters whether an attachment query should include filenames or not.
|
||||
*
|
||||
* @since 6.0.3
|
||||
*
|
||||
* @param bool $allow_query_attachment_by_filename Whether or not to include filenames.
|
||||
*/
|
||||
$this->allow_query_attachment_by_filename = apply_filters( 'wp_allow_query_attachment_by_filename', false );
|
||||
remove_all_filters( 'wp_allow_query_attachment_by_filename' );
|
||||
|
||||
// Parse meta query.
|
||||
$this->meta_query = new WP_Meta_Query();
|
||||
$this->meta_query->parse_query_vars( $q );
|
||||
@@ -2256,7 +2279,7 @@ class WP_Query {
|
||||
}
|
||||
}
|
||||
|
||||
if ( ! empty( $this->tax_query->queries ) || ! empty( $this->meta_query->queries ) ) {
|
||||
if ( ! empty( $this->tax_query->queries ) || ! empty( $this->meta_query->queries ) || ! empty( $this->allow_query_attachment_by_filename ) ) {
|
||||
$groupby = "{$wpdb->posts}.ID";
|
||||
}
|
||||
|
||||
@@ -2333,6 +2356,10 @@ class WP_Query {
|
||||
}
|
||||
$where .= $search . $whichauthor . $whichmimetype;
|
||||
|
||||
if ( ! empty( $this->allow_query_attachment_by_filename ) ) {
|
||||
$join .= " LEFT JOIN {$wpdb->postmeta} AS sq1 ON ( {$wpdb->posts}.ID = sq1.post_id AND sq1.meta_key = '_wp_attached_file' )";
|
||||
}
|
||||
|
||||
if ( ! empty( $this->meta_query->queries ) ) {
|
||||
$clauses = $this->meta_query->get_sql( 'post', $wpdb->posts, 'ID', $this );
|
||||
$join .= $clauses['join'];
|
||||
|
||||
Reference in New Issue
Block a user