Make WordPress Core


Ignore:
Timestamp:
10/18/2022 03:06:48 PM (4 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.