/**
* Optimized attachment_url_to_postid using pre_attachment_url_to_postid for improved performance with Memcached.
*
* Why this helps:
* - **Reduced Database Load:** By caching attachment IDs, we significantly decrease the number of queries to the wp_postmeta table.
* - **Faster Response Times:** Cached results from Memcached are returned instantly, improving page load speeds.
* - **Efficient Cache Usage:** wp_cache_set ensures optimal cache hit rates in memory.
* - **Scalable Solution:** Ideal for large sites with high traffic, reducing MySQL CPU spikes caused by repetitive queries.
*/
add_filter('pre_attachment_url_to_postid', function ($pre, $url) {
if (empty($url)) {
return null;
}
// Generate a unique cache key based on the URL
$cache_key = 'attachment_url_to_postid_' . md5($url);
// Check object cache (Memcached)
$cached_post_id = wp_cache_get($cache_key, 'attachment_url_to_postid');
if (false !== $cached_post_id) {
return (int) $cached_post_id; // Return cached ID if available
}
global $wpdb;
// Optimize the query to fetch the attachment ID
$post_id = $wpdb->get_var($wpdb->prepare(
"SELECT post_id FROM {$wpdb->postmeta} WHERE meta_key = '_wp_attached_file' AND meta_value = %s LIMIT 1",
ltrim(parse_url($url, PHP_URL_PATH), '/')
));
// Cache in object cache (Memcached) for quick retrieval
wp_cache_set($cache_key, $post_id, 'attachment_url_to_postid', 12 * HOUR_IN_SECONDS);
return $post_id ? (int) $post_id : null;
}, 10, 2);
Comments
0 B
|👍
/👎
0 B
|👍
/👎