Make WordPress Core


Ignore:
Timestamp:
10/18/2022 03:06:48 PM (3 years ago)
Author:
spacedmonkey
Message:

Query: Remove placeholder from query cache key.

Remove escape placeholder from query cache key, as placeholders are a based on a unique id on every request. This means that it is impossible for a cache to be reused, making queries that use escape placeholders such as LIKE searches, unable to be cached.

Props dhl, spacedmonkey, peterwilsoncc, desrosj, chaion07, davidbaumwald, mukesh27.
Fixes #56802.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/class-wp-query.php

    r54524 r54634  
    31163116                $cache_args['update_post_term_cache'],
    31173117                $cache_args['lazy_load_term_meta'],
    3118                 $cache_args['update_menu_item_cache']
     3118                $cache_args['update_menu_item_cache'],
     3119                $cache_args['search_orderby_title']
    31193120            );
    31203121
    31213122            $new_request = str_replace( $fields, "{$wpdb->posts}.*", $this->request );
     3123            $new_request = $wpdb->remove_placeholder_escape( $new_request );
    31223124            $key         = md5( serialize( $cache_args ) . $new_request );
    31233125
     
    31273129            }
    31283130
    3129             $cache_key   = "wp_query:$key:$last_changed";
     3131            $cache_key = "wp_query:$key:$last_changed";
     3132
     3133            /**
     3134             * Filters query cache key.
     3135             *
     3136             * @since 6.1.0
     3137             *
     3138             * @param string   $cache_key   Cache key.
     3139             * @param array    $cache_args  Query args used to generate the cache key.
     3140             * @param string   $new_request SQL Query.
     3141             * @param WP_Query $query       The WP_Query instance.
     3142             */
     3143            $cache_key = apply_filters( 'wp_query_cache_key', $cache_key, $cache_args, $new_request, $this );
     3144
    31303145            $cache_found = false;
    31313146            if ( null === $this->posts ) {
Note: See TracChangeset for help on using the changeset viewer.