1

Modificar artículos de WordPress vía comandos MySQL

Wordpress vía comandos MySQL viejos artículos sin plugins

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.

Modificar posts en WordPress via cron shell

Añadir texto a la tabla posts

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)

Añadir el texto cada post

Para ello usamos UPDATE y SET, y escapamos las comillas dobles con \”

Condiciones para elegir los post que modificaremos

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.

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

Ejecución en consola o en tarea cron

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.

Permisos de ejecución de comandos mysql

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

Ejemplo de inseguridad en la ejecución de comandos MySQL

Otro trabajo: Eliminar algún código o modificarlo

En este caso sólo queremos eliminar un código de ciertos post de WordPress

Hosting con SSH
Un hosting sin SSH es como un jardín sin flores. Señal inequívoca que tras esa ausencia, viene otras deficiencias ya sea, por la ausencia de otras facilidades, la incorporación de mecanismos orientados a capar por debajo al usuario o incluso una deficitaria formación de los encargados de sistemas de dicha empresa. Bajo la letra de sus marketing, subyace, casi siempre, el trato al cliente que les interesa, y dando largas al que no les interesa. Sin SSH estamos obligados a realizar muchas operaciones, mediante aplicaciones web de terceros, que en determinadas circunstancias, son un verdadero handicap para nuestro trabajo. Yo, no podría trabajar sin SSH, rsync, scp, o sin poder ver los logs de apache en tiempo real.

Imagen original Designed by Freepik‘> by Freepik diseñada por StartLine y retocada por Abdelkarim Mateos

Comparte este artículo

Comments 1

  1. Pingback: Mysql comandos shell: Ejecutar comandos en el cliente mysql - Tamainut

Deja un comentario

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

To create code blocks or other preformatted text, indent by four spaces:

    This will be displayed in a monospaced font. The first four 
    spaces will be stripped off, but all other whitespace
    will be preserved.
    
    Markdown is turned off in code blocks:
     [This is not a link](http://example.com)

To create not a block, but an inline code span, use backticks:

Here is some inline `code`.

For more help see http://daringfireball.net/projects/markdown/syntax