Trucos para controlar WordPress con SQL

Ojalá tuviera un calendario donde poder planificar todas mis entradas… espera un momento, ¡si ya lo tengo! ¡Si es que incluso me ayuda a promocionarlas en las redes sociales! ¡Descúbrelo!

WordPress almacena todos los datos en un único sitio, la base de datos de WordPress. Si no sabes lo que es, ya hemos hablado anteriormente sobre su importancia y cómo monitorizarla. Incluso hicimos una petición a los desarrolladores de plugins para que no modifiquen las tablas de la base de datos.

Habitualmente, WordPress usa un sistema gestor de base de datos llamado MySQL (quizás esto te suene), donde define una serie de tablas estándar para guardar los datos de entradas, comentarios, usuarios y demás. Si quieres una descripción detallada de estas tablas, puedes ir al Codex y ahí encontrarás todo lo que necesites.

La mayoría de bases de datos relacionales, como MySQL, soportan un lenguaje específico (también estándar) para realizar consultas a los datos e incluso modificarlos. Este lenguaje se llama SQL y es bastante fácil de entender.

En esta entrada os voy a explicar algunos trucos que he ido recopilando de varios sitios, incluyendo la experiencia propia realizando migraciones de otras plataformas (Drupal, Joomla! y demás) a WordPress.

Cómo acceder a la base de datos

Pero antes de ir a los trucos, veamos cómo podemos acceder a nuestra base de datos y poder aplicar las sentencias SQL que vas a ver a continuación.

La forma más habitual, si utilizas un alojamiento web típico, es que el proveedor te de acceso a un panel de administración. Comúnmente se trata de cPanel, aunque existen otros muchas variantes similares.

Una vez dentro de cPanel, encontrarás un lugar donde aparece el icono de phpMyAdmin, el administrador de bases de datos MySQL que vamos a utilizar. Puedes verlo en la siguiente captura:

cPanel con la sección de bases de datos y el icono de phpMyAdmin
cPanel con la sección de bases de datos y el icono de phpMyAdmin

Tan solo has de hacer clic en phpMyAdmin y se abrirá el administrador. En el panel de la izquierda deberías ver un listado con las bases de datos disponibles (si es que hay más de una) y tendrás que seleccionar aquella que estés usando para WordPress.

Si no sabes cuál es, lo mejor que puedes hacer es consultarlo con tu proveedor de hosting, o bien mirarlo en el archivo wp-config.php del que os hablamos hace unos días.

Captura de phpMyAdmin
Captura de phpMyAdmin donde puedes ver las tablas WordPress y la pestaña SQL.

Una vez seleccionada la base de datos, en el panel de la izquierda vemos las tablas que WordPress crea durante la instalación. Sólo nos queda hacer clic en la pestaña SQL para abrir el editor que nos permitirá escribir las sentencias y ejecutarlas. Puedes ver a lo que me refiero en la siguiente captura:

Editor de sentencias SQL dentro de phpMyAdmin
Editor de sentencias SQL dentro de phpMyAdmin.

Ten en cuenta lo siguiente antes de continuar leyendo:

  • En todas las sentencias SQL que te voy a enseñar usamos el prefijo wp_ para las tablas WordPress (wp_posts, wp_users, wp_comments). Puede ser que en tu caso tu proveedor de alojamiento use un prefijo diferente (otro_pref_posts, otro_pref_users, otro_pref_comments). Si esto es así, tan solo sustituye wp_ por el valor que tu tengas en los nombres de tus tablas y listo.
  • Ejecutar sentencias SQL a lo loco puede ser peligroso. Haz una copia de seguridad de tu base de datos antes de hacer nada. Si la lías y corrompes tus datos, agradecerás poder recuperarlos.

Desactivar todos los plugins

Uno de los trucos más útiles es el de poder desactivar todos los plugins de una vez. Sí, ya se que lo puedes hacer desde el panel de Administrador de WordPress, seleccionándolos todos y desactivándolos. No obstante, si por lo que sea no puedes entrar a este panel (has instalado un plugin que lo ha roto todo, por ejemplo), con la siguiente sentencia los podrás desactivar todos usando SQL:

UPDATE wp_options 
SET option_value = '' 
WHERE option_name = 'active_plugins';

Modificar contenidos

Veamos ahora unos trucos sencillos para modificar todos los contenidos de entradas o cualquier tipo personalizado del tirón, sin tener que ir uno a uno.

Cambiar palabras o enlaces

Si quieres cambiar una palabra o una URL de todas tus entradas y páginas, tan sólo has de usar la siguiente sentencia SQL.

UPDATE wp_posts 
SET post_content = replace(post_content, 'güorpré', 'WordPress');

En este caso lo que hacemos es cambiar toda aparición de la palabra «guorpré» por la palabra (ahora sí, bien escrita) «WordPress». Puedes modificar esto para cambiar los contenidos que quieras. Es especialmente útil para URLs si, por ejemplo, cambias de nombre de dominio.

Si el cambio sólo lo quieres hacer en páginas pero no en entradas, es tan fácil como añadir una siguiente condición a tu sentencia SQL. Puedes cambiar 'page' por 'post' o por cualquier otro tipo personalizado que tengas definido en tu WordPress:

UPDATE wp_posts 
SET post_content = replace(post_content, 'güorpré', 'WordPress')
WHERE post_type = 'page';

Eliminar Shortcodes

Si tenías shortcodes básicos en tu contenido que ya no se usan, del mismo modo que cambiábamos palabras, puedes eliminar estos siguiendo la misma idea:

UPDATE wp_posts 
SET post_content = replace(post_content, '[hola]', '');

El problema surge cuando el shortcode no es tan simple como [hola], sino que incluye atributos o texto, como por ejemplo en [hola nombre='Toni']Que tal estás?[/hola]. Para casos más complejos como este tendrás que usar una función cómo REGEXP_REPLACE, la cual puedes instalar en tu servidor (si tienes el control de éste) y que puedes obtener desde este proyecto de GitHub. Aunque tengo que reconocer que hacer esto es algo ya más completo… yo lo recomiendo sólo a WProfesionales con experiencia 😉

Limpiar Spam

Veamos ahora algunos trucos para deshacernos del contenido no deseado.

Borrar comentarios marcados como spam

Si tienes un montón de comentarios que has marcado como spam pero no has ido borrando, no te preocupes. Con la siguiente instrucción los eliminarás completamente de tu base de datos:

DELETE FROM wp_comments 
WHERE comment_approved = 'spam';

Borrar comentarios no aprobados

Del mismo modo, podemos eliminar todos aquellos comentarios que no estén aprobados:

DELETE FROM wp_comments 
WHERE comment_approved = '0';

Borrar comentarios que contengan una URL específica

Seguro que a veces te han llegado comentarios que son spam porque contienen cierta dirección URL, o porque el autor indica que la URL de su web es la URL de una página de spam. Para el primer caso, podemos usar una sentencia que busque todos los comentarios que incluyan la URL spam.com (cámbialo por lo que quieras) y los borre:

DELETE FROM wp_comments 
WHERE comment_content LIKE "%spam.com%";

Para el segundo caso, tenemos esta otra instrucción que funciona de forma muy parecida:

DELETE FROM wp_comments 
WHERE comment_author_url LIKE "%spam.com%";

Eliminar los pingbacks y trackbacks

Cuando alguien enlaza desde WordPress tus contenidos, aparecerá un pingback o trackback como si de un comentario adicional se tratase. Esto es algo que tampoco tiene demasiado interés y, de hecho, yo prefiero no mostrarlos.

DELETE FROM wp_comments 
WHERE comment_type='trackback' OR comment_type='pingback';

Para ello, con la anterior sentencia nos cargamos todos los pingbacks y trackbacks de WordPress.

Cerrar los comentarios y pingbacks

Otra opción más radical aún es la de hacer que todas las entradas no permitan incluir comentarios. Para no tener que ir una a una, con la siguiente instrucción puedes cerrar los comentarios de todo de una vez:

UPDATE wp_posts 
SET ping_status = 'closed', comment_status = 'closed';

Y si sólo quieres cerrar los comentarios para un tipo específico, has de añadir la condición (WHERE) que ya habíamos visto anteriormente con el tipo concreto que te interese (en este caso, por ejemplo, 'post'):

UPDATE wp_posts 
SET ping_status = 'closed', comment_status = 'closed'
WHERE post_type = 'post';

Añadir un campo personalizado a tus entradas

Esto es un poquito más complejo, pero de gran utilidad. Imagina que a partir de ahora quieres guardar en un campo personalizado el número de visitas de las entradas. Para ello necesitas crear el campo visitas con un valor inicial de cero. La siguiente instrucción te indica cómo hacerlo:

INSERT INTO wp_postmeta (post_id, meta_key, meta_value)
SELECT p.ID AS post_id, 
       'visitas' AS meta_key,
       '0' AS meta_value
FROM wp_posts p
WHERE ID NOT IN
  (SELECT pm.post_id 
   FROM wp_postmeta pm
   WHERE pm.meta_key = 'visitas' AND p.post_type = 'post');

Hay que hacer una inserción en la tabla wp_postmeta con los valores extraídos de la tabla wp_posts donde se guardan las entradas (post_type = 'post').

Actualizar la contraseña de un usuario

Esto es muy sencillo y, de hecho, ya lo discutimos en una entrada anterior. Sólo has de usar la siguiente instrucción indicando cuál es la nueva contraseña y cuál es el nombre de usuario del usuario que quieras modificar:

UPDATE wp_users 
SET user_pass = MD5( 'nueva-contraseña' ) 
WHERE user_login = 'mi-usuario';

Cambiar el autor de tus entradas

Si has creado un nuevo usuario y quieres asignarle las entradas de otro usuario que ya no vas a utilizar, sólo necesitas saber cuales son los identificadores de estos usuarios (cada usuario se identifica con un número único, que encontrarás en la tabla wp_users).

Con esta información puedes rellenar la siguiente instrucción SQL y traspasar las entradas del usuario viejo al usuario nuevo.

UPDATE wp_posts 
SET post_author = 'id-autor-nuevo' 
WHERE post_author = 'id-autor-viejo';

Cambiar el nombre de usuario

Esto es algo que ya os explicamos recientemente en este artículo. Una de las formas que vimos para hacerlo era, evidentemente, usando SQL:

UPDATE wp_users
SET user_login = 'nuevo-nombre',
    user_nicename = 'nuevo-nombre' 
WHERE user_login = 'viejo-nombre';

Sólo hemos de cambiar viejo-nombre por el nombre del usuario al que queremos cambiarle el nombre, y en nuevo-nombre poner el nuevo nombre de usuario que hayamos elegido.

Obtener un listado con toda la gente que puso un comentario

Esto es muy útil si quieres hacer una campaña a través de email para promocionarte. Seguramente todo aquel que puso un comentario en tu web y dejó su correo puede estar interesado. Esta consulta te devolverá una lista con todos los correos de estos usuarios comentadores, que podrás copiar y pegar en tu sistema de gestión de campañas de correo:

SELECT DISTINCT comment_author_email 
FROM wp_comments;

Reducir el tamaño de la base de datos

Os hemos hablado ya anteriormente de lo importante que es el mantenimiento de tu web WordPress. Y la base de datos es uno de los puntos centrales. Veamos una serie de trucos para limpiarla de basura inútil.

Eliminar Transients

Los transients son información temporal que se guarda en la tabla wp_options y se va borrando sola. No obstante, si algo falla es posible que tengamos esta tabla llena de transients que no sirven para nada. Si los queremos borrar tan solo hemos de ejecutar la siguiente instrucción SQL:

DELETE FROM wp_options
WHERE option_name LIKE "%\_transient\_%";

Eliminar etiquetas que no usemos

Muchas veces nos volvemos locos creando etiquetas, pero resulta que no las añadimos en ninguna entrada, por lo que no nos sirven para nada. Para evitarlo, podemos ejecutar esta instrucción, que las elimina si no se usan:

DELETE FROM wp_terms t
INNER JOIN wp_term_taxonomy tt
ON t.term_id = tt.term_id
WHERE tt.taxonomy = 'post_tag'
AND tt.count = 0;

Eliminar revisiones y datos asociados

Vimos en el artículo donde os hablé del archivo wp-config.php que las revisiones son versiones anteriores de nuestras entradas que se guardan en la base de datos a medida que vamos escribiendo esas entradas. También vimos la manera de desactivarlas. Pues ahora vamos a ver la instrucción SQL que nos permite borrar las revisiones de la base de datos y todo aquello asociado a estas (básicamente enlaces con etiquetas o categorías).

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';

Tan solo cópiala y ejecútala en tu editor SQL de phpMyAdmin para borrar todas las revisiones de tu base de datos.

Borrar entradas antiguas

Y, por último, algo también bastante radical, pero que puede ser útil si nos quedamos sin espacio y no hay otra alternativa posible (lo sé, es un caso extremo…):

DELETE FROM wp_posts 
WHERE post_date < '1990-01-01 00:00:00' 
AND post_status = 'publish'

Con la instrucción anterior podemos borrar todas las entradas más viejas que una cierta fecha (en el ejemplo, el 1 de enero de 1990).

Resumen Final

En este artículo, hemos visto diferentes trucos SQL para poder ser más productivos y realizar tareas pesadas de forma casi instantánea. Puedes probarlas y ver si así consigues adelgazar tu base de datos o realizar cambios rápidamente.

Si tienes problemas, no dudes en contactarnos mediante la sección de comentarios, y si tienes más trucos guardados, compártelos con nosotros. Estaremos encantados de recibir tus sugerencias.

Imagen destacada de Christophe BENOIT

por

Doctor en Computación por la UPC, con publicaciones en el campo de la minería de datos y de la explotación de información relevante de grandes volúmenes de datos en el campo de la salud. Especializado en el diseño, desarrollo e integración de servicios y aplicaciones web en el cloud. Contribuye muy activamente en la comunidad WordPress participando en meetups, seminarios y WordCamps.

3 comentarios en “Trucos para controlar WordPress con SQL

Deja un comentario

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