Si gestionas muchos sitios WordPress, o administras sitios con mucha actividad hay veces que el uso de plugins es demasiado lento, e ineficaz. En estas ocasiones es más rápido usar comandos MySQL.
Índice de contenidos
Seguridad ante todo
Como en este artículo vamos a trabajar directamente sobre la base de datos SIEMPRE antes haz una copia de seguridad de la misma. Un error tonto de tecleo puede ser la antesala del desastre.
¿Dónde se hace esto?
Puedes ejecutar comandos SQL de dos maneras principalemente:
- Desde la consola de comandos, con
mysql
. - Desde la herramienta PHPMyAdmin, disponible en todos los hosting.
Comandos MySQL útiles para sitios WordPress
Vamos a ello, no vamos a ver todos los posibles, pero sí algunos comandos MySQL realmente útiles para administradores de sitios WordPress.
Reemplazar URLs dentro del contenido
Comando muy útil tras una migración, por ejemplo, o si has cambiado una referencia a una web y quieres cambiarla rápidamente en tu sitio.
UPDATE wp_posts SET post_content = REPLACE (post_content, 'https://viejaurl.com', 'https://nuevaurl.com');
Cambiar usuario por defecto
Una medida de seguridad básica, más fácil desde MySQL:
UPDATE wp_users SET user_login = 'El puto amo' WHERE user_login = 'Admin';
Borrar spam sin tiempos de espera ni errores de ejecución
¿Cuántas veces has visto errores de tiempo de ejecución al borrar miles de mensajes de spam? Se acabó el problema con este comando:
DELETE FROM wp_comments WHERE wp_comments.comment_approved = 'spam';
Ejecútalo y lo borrarás todo el spam a la velocidad del rayo.
Borrar comentarios pendientes
¿No tienes tiempo ni ganas de andar revisando miles de comentarios pendientes de aprobar? Si no son importantes para tu sitio, así los borras todos de un plumazo.
DELETE FROM wp_comments WHERE comment_approved = 0
Borrar comentarios en entradas antiguas
Si no tienes configurada la caducidad de la publicación de nuevos comentarios en los ajustes de WordPress, pero quieres cerrar la posibilidad de comentar en entradas antiguas este comando MySQL es una maravilla:
UPDATE wp_posts SET comment_status = 'closed' WHERE post_date < '2018-01-01' AND post_status = 'publish';
Solo tienes que cambiar la fecha del ejemplo por la que quieras. Ya no se podrán dejar nuevos comentarios en todas las entradas con fecha de publicación anterior a la que pongas, respetando y mostrando los anteriores.
Borrar pingbacks
Cuando uno empieza un blog siempre gusta ver los pingbacks, esos enlaces en forma de comentarios que muestran cómo otros nos han enlazado.
Pero, con el tiempo, muchas veces te das cuenta de que no aportan nada ahí, en medio de la conversación de tus entradas, y de paso generan mucho tráfico de salida, así que es momento de borrarlos todos.
DELETE FROM wp_comments WHERE comment_type = 'pingback';
Restablecer la contraseña de un usuario
Esto te tocará hacerlo más de una vez, a veces incluso por necesidad, si la olvidas.
UPDATE wp_users SET user_pass = MD5( 'nuevaclave' ) WHERE user_login = 'miusuario';
Cambiar autor de contenidos
¿Se ha ido uno de los redactores y quieres reasignar el contenido a otro? ¿Has cambiado de usuario y quieres asignarte tus contenidos a tu nuevo usuario? Nada, fácil…
UPDATE wp_posts SET post_author = 'id-del-nuevo-autor' WHERE post_author = 'id-del-autor-anterior';
En este caso solo tienes que saber el ID de los autores anterior y saliente. Lo podrás identificar en la base de datos por su email, por ejemplo, o al editarlo en WordPress observando la URL generada, que sería algo así:
¿Te he dicho que siempre hagas copia de seguridad antes de ejecutar comandos MySQL? ¡Ah! ¿Sí? Bueno, nunca está de más recordarlo. Seguimos …
Borrar todas las revisiones
Las revisiones de entrada son muy útiles si quieres volver a versiones anteriores de un mismo contenido, pero cuando ya has publicado, salvo manías, raramente son útiles, y llenan de residuo tu base de datos.
Si lo tienes claro, así las borras rápidamente:
DELETE a,b,c FROM wp_posts a LEFT JOIN wp_term_relationships b ON (a.ID = b.object_id) LEFT JOIN wp_postmeta c ON (a.ID = c.post_id) WHERE a.post_type = 'revision'
Convertir páginas en entradas o viceversa
Quizás ni te lo hayas planteado, pero los que tenemos sitios WordPress migrados de otras plataformas, o simplemente teníamos la costumbre de usar un CMS de otro modo, a veces nos encontramos con entradas que tendrían más sentido como páginas o lo contrario.
Puedes cambiarles fácilmente el tipo de contenido así:
Convertir entradas en páginas:
UPDATE wp_posts SET post_type = 'page' WHERE post_type = 'post'
Convertir páginas en entradas:
UPDATE wp_posts SET post_type = 'post' WHERE post_type = 'page'
Eso sí, ojo, que esto son cambios totales, convierten TODAS las páginas en entradas y viceversa. Úsalo solo si estás muy seguro.
Eliminar shortodes
¿Has dejado de usar un plugin o maquetador que usaste durante años y te han quedado montones de shortcodes en tus contenidos?
Con comandos MySQL puedes borrarlos fácilmente, por ejemplo:
UPDATE wp_post SET post_content = replace(post_content, '[el-shortcode-a-borrar]', '' ) ;
Usa este comando tantas veces y con tantos shortcodes como necesites eliminar.
Reemplaza cualquier texto en el contenido
Terminamos con un comando casi para todo, genial para sustituir cualquier texto, URL, shortcode, lo que sea, por otro lo que sea. Tú sabrás.
UPDATE wp_posts SET 'post_content' = REPLACE ('post_content', 'TextoViejo', 'TextoNuevo');
¿Hay más?
Claro, cientos, sino miles de comandos MySQL útiles para sitios WordPress.
Y si te sabes alguno de estos que uses habitualmente compártelo en los comentarios 😉
¿Te gustó este artículo? ¡Ni te imaginas lo que te estás perdiendo en YouTube!
En este tipo de comandos:
UPDATE wp_posts SET post_content = REPLACE (post_content, 'https://viejaurl.com', 'https://nuevaurl.com');
Hay que tener cuidado con los datos serializados porque el REPLACE de SQL no los tiene en cuenta y te cargas la serialización que es bastante frecuente en WordPress.
Muy buen apunte 😉
¿Con datos serializados os referís a los que se cogen con un array o algo de de otro lugar?
Sí, arrays y objetos guardados en base de datos. WordPress lo hace mucho, en la tabla postmeta es muy frecuente por ejemplo.
Artículo para guardarlo en favoritos!
Y cómo dice la canción «No te olvides de poner un WHERE en un DELETE FROM»
jaja
Mola. Explicas faenas que uno desiste de hacerlas a mano porque pueden llevar días o semanas de trabajo. Y con estos comandos…. chás… magia.
Hola Fernando, ya que te veo enredando con el SQL y si tienes tiempo, para los que odiamos a woocomerce lo lento que es …, borrar todos los artículos sea cual sea la fecha y borrar todas las imágenes pero de un determinada fecha, ¿se puede hacer desde SQL?, he visto algo realizado con wordpress snippets, pero creo que podría ser mejor darle directamente al SQL
BuenaS
Tengo un problema que me está volviendo loco y es que al importar un CSV, tengo los productos con las fechas «hacia atrás», los productos antiguos con la fecha de publicación más reciente y los productos más nuevos con la fecha anterior.
¿Cómo puedo «darle la vuelta» masivamente y ponerlos bien con fechas? Ya que hay miles de artículos. Por ejemplo con un aumento de +5 minutos.
Ejemplo de como los tengo:
1. Producto muy antiguo (fecha 25/05/2019).
2. Producto antiguo (fecha 24/05/2019).
3. Producto nuevo (fecha 23/05/2019).
Los necesito así:
1. Nuevo producto (fecha 21/10/2019).
2. Producto nuevo (fecha 25/05/2019).
3. Producto antiguo (fecha 24/05/2019).
4. Producto muy antiguo (fecha 23/05/2019).
Pero no necesito un «order by», necesito cambiar las fechas «hacia atrás» porque si cambio el «order by» , al agregar nuevos productos con fecha de hoy, aparecerían al final.
¡Gracias por su tiempo y ayuda!