Blogs / WordPress

Cómo eliminar registros _transient innecesarios en WordPress

Explicamos a continuación lo que se debe hacer en WordPress para eliminar los registros _transient que ya no son necesarios. Al hacerlo conseguiremos que la base de datos elimine elementos que no llevan a cabo ninguna acción.

Cómo eliminar registros _transient innecesarios en WordPress

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.

Fabriciano González

Amante de la informática y de Internet entre otras muchas pasiones. Leo, descifro, interpreto, combino y escribo. Lo hago para seguir viviendo y disfrutando. Trato de dominar el tiempo para que no me esclavice.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.