Automatically Delete Expired WordPress Transients using WP-CLI

WordPress plugins and themes can store a lot of temporary data known as transients. By default these transients are stored in the wp_options table and can accumulate rather quickly. Recently on codeable I cleaned a site with 58000 expired transients that were causing the database to crash daily. Due to an idiosyncrasy in WordPress core, expired transients are only removed from the database if access to them is attempted, if no access to them is made then the transients stay in the wp_options table. This tutorial will show you how to delete expired transients using WP-CLI from wp_options or your external object cache and automate the deletion of these transients ever day using a cronjob.

Automatically Delete Expired WordPress Transients using WP-CLI

Deleting expired transients from your WordPress database with WP-CLI is very easy

wp transient delete --expired

If you use an external object cache like Redis Memcached or PHP-APCu, then you empty it with this command

wp cache flush

So you do not have to do this manually, I put this in a real cronjob

crontab -e

For users without an external object cache use this cronjob, replace www-data with your user and /var/www/guides.wp-bullet.com with your WordPress path

@daily sudo -u www-data wp transient delete --expired --path=/var/www/guides.wp-bullet.com

If you are using an object cache then you can use this command to flush the object cache using WP-CLI

@daily sudo -u www-data wp cache flush --path=/var/www/guides.wp-bullet.com

Now you won’t have to worry about expired transients accumulating and potentially slowing down your site :).

Sources

Clear Transients Stackexchange
wp transient delete
wp cache flush
The Deal with WordPress Transients
Transients API
You’re Using Transients Wrong
WordPress Core Ticket