WordPress elimina en un plazo de treinta días cualquier cosa que va a la papelera, desde comentarios o borradores, hasta pedidos de WooCommerce. De esta forma, la información continúa en la base de datos durante un tiempo prudencial por si hay que recuperarla. Sin embargo ocurre que no siempre queremos que sea así. Hay gente que usa la papelera como una especie de almacén y no quiere que se elimine lo que hay en ella, y hay quien no quiere mantener información inútil durante tanto tiempo en la base de datos.
Así que vamos a ver cómo podemos modificar ese comportamiento de WordPress: aprenderemos a cambiar el tiempo que los objetos (un comentario, una entrada, un pedido…) se mantienen en la papelera y a evitar su vaciado automático.
Tabla de contenidos
La papelera de WordPress
Como decía más arriba, cuando se borra cualquier tipo de contenido en WordPress (comentarios, entradas, páginas, pedidos, productos…) éste no es eliminado inmediatamente de la base de datos, sino que queda en la papelera.
En realidad, el dato en sí no sufre ninguna variación: continúa en la base de datos tal como estaba, y se puede recuperar de la papelera si es necesario, sin cambios respecto al momento en que envió a ella.
Esto es, obviamente, una medida de seguridad: así, en lugar de simplemente eliminar los datos para siempre de forma irremisible, estos aún se pueden recuperar en caso de que la eliminación haya sido un error.
Sin embargo estos datos (repito, sean los que sean: entradas, comentarios, productos, valoraciones…) no se quedan en la papelera de forma indefinida: por defecto, pasados treinta días desde que se enviaron a la papelera WordPress los elimina de forma definitiva.
Por supuesto, este borrado definitivo se puede aligerar o evitar de forma manual, usando los enlaces que tienen los objetos que hay en la papelera: Restaurar para recuperarlo y Borrar permanentemente para eliminarlo de forma definitiva.
Los objetos en la papelera de WordPress
He dicho antes que los datos en sí no experimentan ningún cambio, aunque eso no es del todo exacto. En realidad, hay ciertos cambios sutiles que permiten marcar al objeto como «a eliminar». Por ejemplo:
- El estado del contenido (entrada, producto, página, pedido…) pasa a ser trash
- El slug también cambia, y pasa a ser slug-anterior__trashed
Además, se generan algunos datos asociados a su nuevo estado, creados como post meta:
- Se establece un _edit_lock, que evita que el contenido pueda ser editado
- El estado en que se encontraba antes de ser enviado a la papelera se guarda como _wp_trash_meta_status para, en caso de que sea restaurado, saber en qué estado ha de estar (recordemos que el estado ha cambiado a trash, por lo que el dato del estado anterior se perdería si no se almacena aparte)
- El momento exacto en que se envía a la papelera queda almacenado como _wp_trash_meta_time en formato de tiempo UNIX
- El slug original queda guardado como _wp_desired_post_slug, también por si es necesario restaurarlo
Esto cambia algo en el caso de comentarios a entradas y de valoraciones de productos, lógicamente, ya que las tablas no contienen los mismos datos que las referentes a contenidos:
- El comment_approved pasa a tener el valor trash
- Los únicos valores almacenados como comment meta son, en analogía con los contenidos, _wp_trash_meta_status y _wp_trash_meta_time
Cambiar el tiempo que los objetos pasan en la papelera antes de borrarse
Como he señalado algo más arriba, todos los objetos que se encuentren en la papelera son eliminados tras un periodo concreto. WordPress utiliza para ello una tarea programada que ejecuta la función wp_scheduled_delete().
Esta función elimina definitivamente cualquier dato que lleve en la papelera el número de días definido por la constante EMPTY_TRASH_DAYS o, si esta constante no está definida, después de treinta días, como dije antes.
¿Estás construyendo tu tienda online o eres implementador WordPress?
¿Necesitas plugins de calidad y con soporte para implementar funcionalidades concretas?
Consigue todos los plugins a la venta en la sección de plugins de esta web y todos los que siga añadiendo. Acceso a los 96 plugins (y subiendo) con soporte directo del desarrollador, actualizaciones y uso ilimitado: úsalos en tantas webs como lo necesites.
Ajustando el valor de EMPTY_TRASH_DAYS
Dicho esto es fácil pensar cómo podemos cambiar este valor: simplemente hemos de definir la constante EMPTY_TRASH_DAYS para establecer la cantidad de días que a nosotros nos convenga que los objetos se conserven en la papelera.
Esto lo hacemos, como con cualquier constante de WordPress, en el archivo wp-config.php. Basta con editarlo (recuerda hacer siempre copia de seguridad antes de cambiar nada, más vale un por si acaso que un quién lo iba a decir) y añadir:
define( 'EMPTY_TRASH_DAYS', 7 );
Por ejemplo, en el caso de que quieras mantener los datos en la papelera durante una semana. Puedes establecer la cantidad de quieras, como 365 o 1000000.
Deshabilitar la papelera de WordPress
Hay dos casos especiales que merece la pena mencionar aparte y que deshabilitan la papelera de WordPress de dos formas muy diferentes.
Uno es el caso en que no queramos que ésta exista en absoluto (queremos que cuando se elimine algo sea inmediatamente borrado de la base de datos, sin pasar por la papelera) y el otro es el caso en que no queremos que actúe como papelera, sino como una especie de cajón desastre (es decir, que nada sea nunca borrado de la papelera).
Eliminar definitivamente sin pasar por la papelera
Quizá al leer que podíamos ajustar el número de días que los objetos eliminados han de estar en la papelera te habrá surgido la pregunta: ¿Qué pasa si lo establecemos en cero?.
Obviamente éste es un caso algo especial. En caso de añadir la siguiente definición en wp-config.php:
define( 'EMPTY_TRASH_DAYS', 0 );
Lo que haremos es eliminar de WordPress la funcionalidad de papelera. De hecho, el enlace Enviar a la papelera será sustituido por el enlace Borrar permanentemente, que no tiene vuelta atrás:
Evitar que la papelera de WordPress se vacíe automáticamente
El otro caso especial es el de querer evitar que la papelera se vacíe, haciendo que todo lo que enviemos a ella quede ahí de forma indefinida.
Por lo que he dicho anteriormente, es obvio que podemos hacer algo como:
define( 'EMPTY_TRASH_DAYS', 10000000 );
Esto no hace que todo quede en la papelera de forma indefinida, pero sí hace que el tiempo en que permanecerá en ella antes de ser eliminado pase a ser de diez millones de días, lo que en la práctica significa que nunca se va a borrar (o, al menos, nos asegura que cuando esto suceda a nosotros ya no nos importará en absoluto).
Sin embargo esto es derrochar recursos: si no queremos que se elimine lo que hay en la papelera, ¿para qué tener una tarea programada que comprueba a diario si lo que tenemos en ella ha llegado a su límite de días?
No, lo correcto y eficiente es, simplemente, eliminar esta tarea programada. Esto lo podemos hacer de forma muy fácil con una sencilla función personalizada, que elimina de las tareas programadas la acción wp_scheduled_delete:
add_action( 'init', function() { remove_action( 'wp_scheduled_delete', 'wp_scheduled_delete' ); });
Con ello lo que estamos haciendo es evitar que la comprobación se lleve a cabo, con lo que es indiferente el número de días establecidos para conservar los datos en la papelera. Si «nadie» comprueba si les corresponde seguir ahí o no, nunca se van a eliminar.
Maria dice
Hola Enrique, me encuentro con el siguiente problema con la papelera de reciclaje, no muestra nada pero en el la parte superior dice que hay dos paginas en ella, tenes idea de que puede ser?
Gracias
Enzo dice
Este código podríamos ponerlo en el plugins snippets? O debe ir en el archivo functions.php?
add_action( ‘init’, function() {
remove_action( ‘wp_scheduled_delete’, ‘wp_scheduled_delete’ );
});
Enrique J. Ros dice
Buenos días Enzo
Puedes ponerlo en cualquier de los dos sitios. Si ya usas Code Snippets, es más recomendable ponerlo ahí.
Un saludo