WordPress SQL Eliminar tipos de publicaciones personalizadas y metadatos

2 minutos de lectura

Tengo la siguiente consulta SQL que puede recuperar y eliminar todas las publicaciones de un tipo de publicación personalizado que tiene más de X días.

SELECT * FROM `wp_posts`
WHERE `post_type` = ‘clothing’
AND DATEDIFF(NOW(), `post_date`) > 2

DELETE * FROM `wp_posts`
WHERE `post_type` = ‘clothing’
AND DATEDIFF(NOW(), `post_date`) > 2

Sin embargo, por lo que he leído en línea, parece que el código anterior en realidad no elimina la metainformación de las publicaciones, por lo que todavía tendré un montón de datos sobrantes.

Mi pregunta es, ¿cómo puedo modificar este código para que toda la metainformación relacionada también se elimine de las publicaciones eliminadas?

Gracias

  • Usé el editor de texto de Mac OS con el modo de texto sin formato

    – usuario2028856

    18 de noviembre de 2014 a las 11:25

  • Bueno, en ese caso, desmarque “Comillas inteligentes” en Editar> Sustituciones> Comillas inteligentes, o donde sea que esté en estos días

    – Fresa

    18 de noviembre de 2014 a las 11:27

Puede eliminar los datos uniendo las tablas. En WP wp_posts y wp_postmeta están relacionados con post_id en el wp_postmeta mesa. Usando la consulta a continuación, se eliminará de ambas tablas. Sin embargo, también hay otras opciones, es decir, puede activar un disparador después de eliminar en wp_posts para eliminar los datos de la tabla relacionada o una restricción de clave externa con la cascada de eliminación

delete
p,pm
from wp_posts p
join wp_postmeta pm on pm.post_id = p.id
where p.post_type="clothing"
and DATEDIFF(NOW(), p.post_date) > 2

  • Probé esta consulta pero por alguna razón PHPMyAdmin me dijo que p,pm da como resultado un error. Lo reemplacé con * y funcionó. ¿Sería esto también correcto en este caso?

    – usuario2028856

    18 de noviembre de 2014 a las 11:29

  • Error ? p y pm son solo los nombres de alias y no deberían dar error aquí hay una demostración sqlfiddle.com/#!2/507a38

    – Abhik Chakraborty

    18 de noviembre de 2014 a las 11:33

  • Lo siento, el error se debió a que reemplacé eliminar con seleccionar. Esto funciona perfectamente bien 🙂

    – usuario2028856

    18 de noviembre de 2014 a las 11:34

  • Un poco tarde, pero para cualquier otra persona que lea esto, asegúrese de usar LEFT JOIN en wp_postmeta; de lo contrario, cualquier publicación que actualmente no tenga metadatos asociados permanecerá en la base de datos.

    – versalle88

    29 de enero de 2015 a las 17:47

  • No olvides usar $wpdb->prefix en vez de wp_ para el caso en que WP usa un prefijo de base de datos no predeterminado.

    – Juraj.Lorinc

    21 de julio de 2020 a las 11:41

¿Ha sido útil esta solución?