Modificar artículos de WordPress via comandos de MySQL, se me ocurrió tras buscar plugins para añadir una advertencia a los posts antiguos, ya que al ser temas de Internet, programación y sistemas, la relevancia del tiempo es muy grande. No soy amigo de los plugins pues he aprendido, que en WordPress, un plugin puede ser la antesala de muchos problemas y localizarlos y encontrarlos se traduce en muchas horas de trabajo perdido, y lo que se suponía un software para hacer fácil tu trabajo, acaba siendo un odioso monstruo devorador de tu tiempo profesional. Así que decidí, hacerlo modificar directamente la base de datos.
Contenidos
En nuestro caso queríamos añadir un shortcode para mostrar un texto destacado en modo warning, que advirtiera de la antigüedad del artículo, y también tras deshabilitar un molesto plugin para compartir artículos (Social Plugin) que no conseguía ajustar su javascript para ser optimizado, otro shortcode interno de el tema que usamos, X Theme.
Para la fecha necesitábamos calcular la fecha, y decimos que todos los post más antiguos de dos años, llevarán esa advertencia. Además no debería repetirse el texto, ya que pasaríamos la tarea cron todas las noches (un poco antes de la media noche para no complicarnos mucho en el código)
# Fecha: Mayor de dos años # Texto a añadir: [shortcode heading="Titulo del shortcode" type="algunvalor"]Algún texto de advertencia[/shortcode] # Nombre de la BD: myuser_mydb # Prefijo de las tablas de wordpress: xf mysql -e "UPDATE myuser_mydb.xf_posts SET post_content = CONCAT_WS(CHAR(10 USING UTF8), post_content, '[shortcode heading=\"Titulo del shortcode\" type=\"algunvalor\"]Algún texto de advertencia[/shortcode]') WHERE post_status = 'publish' AND post_type = 'post' AND post_date < '$(echo `date +%Y` - 2 | bc)/$(date +%m)/$(date +%d)' AND post_content NOT LIKE ('%[shortcode heading=\"Titulo del shortcode\" type=\"algunvalor\"]Algún texto de advertencia[/shortcode]%')"
Para ello usamos UPDATE y SET, y escapamos las comillas dobles con \"
SET post_content = CONCAT_WS(CHAR(10 USING UTF8), post_content, '[shortcode heading=\"Titulo del shortcode\" type=\"algunvalor\"]Algún texto de advertencia[/shortcode]')
La condición es que sea un articulo mayor de 2 años de antigüedad (publicación, no última edición). Para ello calcularemos con shell script el valor de la fecha que añadiremos a la parte de la secuencia de comando sql que hará la selección.
Deberá ser un artículo cuyo estado sea publish (publicado), del tipo post (artículo) y de fecha de publicación inferior a dos años en el momento de ejecutarse el script.
WHERE post_status = 'publish' AND post_type = 'post' AND post_date < '$(echo `date +%Y` - 2 | bc)/$(date +%m)/$(date +%d)'
Para evitar la duplicidad del código deberemos añadir una ultima condición. El campo post_content no deberá contener el mismo código
AND post_content NOT LIKE ('%[shortcode heading=\"Titulo del shortcode\" type=\"algunvalor\"]Algún texto de advertencia[/shortcode]%')"
Podemos ejecutar el comando en consola o en tarea cron, ya sea como una única linea de comando o añadiéndolo a una bash script donde tenemos más operaciones a realizar en la misma tarea.
Pero el comando no tiene permisos, no es el típico comando que veo en todos los post sobre comandos mysql desde el shell. Claro, tanto copiar y pegar hace una internet a veces, un poco sosa y vacía de nuevas y mejores ideas.
En mi trabajo, uso otras alternativas como mysql_config_editor para crear el fichero .mylogin.cnf y otros casos directamente uso .my.cnf. Puedes encontrar más información sobre esto y sobre la inseguridad que es, el método propuesto por la mayoría, que consiste en añadir el usuario y la contraseña en el comando a ejecutar, en End-User Guidelines for Password Security
mysql -u " -e "ALGUN CODIGO"
En este caso sólo queremos eliminar un código de ciertos post de WordPress
mysql -e "UPDATE myuser_mydb.xf_posts SET post_content = REPLACE(post_content,'','') WHERE post_type = 'page'" # UPDATE database.table SET field = REPLACE(field,'Texto a reemplazar','Texto de reemplazo') WHERE "algunas condiciones"Share this Post
Imagen original Designed by Freepik'> by Freepik diseñada por StartLine y retocada por Abdelkarim Mateos
Comparte este artículo
Comparte este articulo en
¡Hola a todos! Vamos a sumergirnos en el fascinante mundo de Mod Security y aprender…
Ya son muchos años en el sector, muchos años pasando por varios paneles de control,…
La lista UCEPROTECT es una herramienta utilizada por muchos administradores de sistemas y proveedores de…
No es la primera vez que me encuentro con el agotamiento de la memoria en…
Descubre cómo solucionar problemas de acceso a servidores con Centos 7, Almalinux 8, Ubuntu 20.04…
Uno de los mensajes más alarmantes que puedes encontrarte es aquel que indica que tu…
Ver comentarios