Todas las bases de datos acumulan en algunas circunstancias elementos basura que es conveniente eliminar. No solo basta con optimizar las tablas de vez en cuando utilizando la función adecuada en MySQL, sino que es también conveniente suprimir algunos registros innecesarios en algunas tablas.
Así, en WordPress, en la tabla wp_options (el prefijo puede ser diferente) se encuentran varios registros con instrucciones que llevan el prefijo _transient, algunas necesarias y otras que se pueden eliminar.
¿Cómo se producen las instrucciones _transient?
Estas instrucciones guardan referencias a entradas de la caché, como las que corresponden a los feeds RSS o a algunos plugins. Lo normal es que se borren cuando se ejecuta el CRON (administrador regular de procesos en segundo plano, que se ejecuta cada un determinado periodo de tiempo), pero esto no ocurre con las susodichas instrucciones _transient, que se van acumulando, haciendo que el tamaño de la tabla crezca de manera irregular.
Llevar a cabo la limpieza
Hace algún tiempo expliqué una forma de limpiar la tabla wp_options, eliminado los _transient obsoletos, utilizando una instrucción en phpMyAdmin, en el artículo escrito hace ya algún tiempo y titulado Optimizando WordPress. Hoy, después de examinar lo que explican en WordPress Answers, os propongo una solución diferente. Debéis añadir una porción de código, la que os pongo a continuación, en el archivo functions.php del tema que tenéis activo:
add_action( 'wp_scheduled_delete', 'delete_expired_db_transients' ); function delete_expired_db_transients() { global $wpdb, $_wp_using_ext_object_cache; if( $_wp_using_ext_object_cache ) return; $time = isset ( $_SERVER['REQUEST_TIME'] ) ? (int)$_SERVER['REQUEST_TIME'] : time() ; $expired = $wpdb->get_col( "SELECT option_name FROM {$wpdb->options} WHERE option_name LIKE '_transient_timeout%' AND option_value < {$time};" ); foreach( $expired as $transient ) { $key = str_replace('_transient_timeout_', '', $transient); delete_transient($key); } }
Cuando se ejecute el CRON, todas las instrucciones _transient no necesarias se eliminarán automáticamente.
Otras soluciones
También podéis hacer la limpieza utilizando, para mi, el mejor plugin de limpieza y optimización de la base de datos. Te recomiendo que le eches un vistazo a El mejor plugin para mantener optimizada la base de datos de WordPress.
Si tenemos instalado un plugin de optimización destinado a la elaboración de la caché de páginas como es el caso de WP Rocket, existe la opción de optimizar la base de datos de forma manual y también automática. En el caso de utilizar W3 Total Cache también existe la posibilidad de limpiar los _transients.
Sea cual sea la solución escogida debemos comprobar su funcionamiento. Es conveniente, en cualquier caso, eliminar estos registros ya que, si no hacemos, la base de datos crece demasiado, lo que repercute negativamente en el tiempo de carga de las páginas web en WordPress.