The clean_attachment_cache() WordPress PHP function is used to delete attachments from the cache. Optionally, it can also clean the term object cache that is associated with the attachment ID. However, this function won’t run if $_wp_suspend_cache_invalidation is not empty.
Usage
Here’s a general way to use the clean_attachment_cache() function:
clean_attachment_cache($attachment_id, $clean_terms);
In this example, $attachment_id
is the ID of the attachment you want to remove from the cache, and $clean_terms
is a boolean value (true/false) that indicates whether to also clean the terms cache.
Parameters
- $id (int): This is a required parameter. It represents the attachment ID in the cache to clean.
- $clean_terms (bool): This is an optional parameter. It determines whether to clean the terms cache. The default value is false.
More information
See WordPress Developer Resources: clean_attachment_cache()
Examples
Cleaning a single attachment cache
In this example, we’ll clean the cache for the attachment with an ID of 123.
clean_attachment_cache(123);
Cleaning attachment and terms cache
Here we’re not only cleaning the attachment cache but also the terms cache for the attachment with ID 456.
clean_attachment_cache(456, true);
Attempt to clean cache while cache invalidation is suspended
This demonstrates that the function will not clean the cache if $_wp_suspend_cache_invalidation is not empty.
$_wp_suspend_cache_invalidation = true; clean_attachment_cache(789); $_wp_suspend_cache_invalidation = false;
In this case, the cache for attachment 789 will not be cleaned.
Cleaning multiple attachments cache
You can use this function in a loop to clean cache for multiple attachments.
$attachment_ids = array(101, 102, 103); foreach ($attachment_ids as $id) { clean_attachment_cache($id); }
Cleaning all attachments cache
If you want to clean the cache for all attachments, you can do so by fetching all attachment IDs and then cleaning their cache.
$all_attachments = get_posts(['post_type' => 'attachment', 'numberposts' => -1]); foreach ($all_attachments as $attachment) { clean_attachment_cache($attachment->ID); }