Encontrar todos los WordPress que tenemos

¿Cuántos WordPress tienes? ¿Lo sabes? Yo a veces no… y esa duda me genera una cuestión: ¿cómo puedo saber cuántos tengo y si están actualizados?

Para usar esta herramienta deberemos tener WP-CLI previamente instalado, y lo más probable es que necesites acceder al servidor como root, aunque un usuario «normal» también debería poderlo usar.

Lo único que deberemos actualizar en el fichero es la ruta principal completa del servidor donde comenzar a buscar, y por eso deberíamos tener todos los sitios restringidos en una carpeta general, tipo /home/wordpress/, /data/ o /webs/, por ejemplo. En este ejemplo vamos a usar la última: /webs/.

Primero crearemos nuestro fichero buscador.

cd /webs/
touch wordpress-finder.sh
chmod +x wordpress-finder.sh
vim wordpress-finder.sh

E incluiremos este código:

#!/bin/bash

#####
HOST_PATH="/webs/"
#####

# PONIENDO AL DIA WP-CLI

echo ""
echo "Actualizando WP-CLI a la última versión:"
wp cli check-update --quiet --allow-root
wp cli update --quiet --allow-root
wp cli version --allow-root

# INSTALANDO WP-CLI FIND

echo ""
echo "Revisando el buscador de WP-CLI:"
if [ `wp package list --fields=name --format=csv --allow-root | grep 'wp-cli/find-command'` ]
then
  echo "Buscador de WP-CLI instalado."
else
  echo "Instalando buscador de WP-CLI:"
  wp package install wp-cli/find-command --quiet --allow-root
  if [ -z wp package list --fields=name --format=csv --allow-root | grep 'wp-cli/find-command' ]
  then
  echo "Buscador de WP-CLI instalado."
  else
    echo "Se ha producido un error. No se ha podido instalar el buscador de WP-CLI."
    echo "Prueba a instalarlo manualmente."
    echo ""
    echo "wp package install wp-cli/find-command"
    echo ""
    exit 1
  fi
fi

# BUSCANDO SITIOS

echo ""
echo "Buscando sitios WordPress:"

WP_DATA=`wp find $HOST_PATH --format=csv --fields=wp_path,version --allow-root`
WP_TOTAL=`echo "$WP_DATA" | wc -l`
if [ WP_TOTAL > 0 ]
then 
  let WP_TOTAL=WP_TOTAL-1
else
  WP_TOTAL=0
fi

echo "Se ha encontrado un total de ${WP_TOTAL} WordPress".

for WP_D in $WP_DATA
do
  echo ""
  echo "********************************************************************************"
  echo ""
  echo "WordPress"
  echo ""

  WP_PATH=`echo "$WP_D" | awk -F, 'NR { print $1 }'`
  echo "- Ruta:                ${WP_PATH}"

  WP_SITE_NAME=`wp option get blogname --path="${WP_PATH}" --allow-root`
  echo "- Nombre:              ${WP_SITE_NAME}"

  WP_SITE_URL=`wp option get siteurl --path="${WP_PATH}" --allow-root`
  echo "- URL:                 ${WP_SITE_URL}"

  WP_VERSION=`echo "$WP_D" | awk -F, 'NR { print $2 }'`
  echo "- Versión WP:          ${WP_VERSION}"

  WP_VERSION_UPD=`wp core check-update --path="${WP_PATH}" --format=csv --allow-root | awk FNR-1 | awk -F, 'NR { print $1 }'`
  if [ $WP_VERSION_UPD ]
  then
    echo "- Actualización:       ${WP_VERSION_UPD}"
  fi

  echo ""
  echo "Themes"
  echo ""

  WP_THEMES=`wp theme list --fields=name,update,version,update_version --format=csv --path="${WP_PATH}" --allow-root | awk FNR-1`
  WP_TOTAL_THEMES=`echo "$WP_THEMES" | wc -l`
  echo "- Temas:               ${WP_TOTAL_THEMES} temas".

  for WP_T in $WP_THEMES
  do
    WP_THEME_UPD=`echo "${WP_T}" | awk -F, 'NR { print $2 }'`
    if [ $WP_THEME_UPD == "available" ]
    then
      WP_THEME_NAME=`echo "${WP_T}" | awk -F, 'NR { print $1 }'`
      WP_THEME_ACT=`echo "${WP_T}" | awk -F, 'NR { print $3 }'`
      WP_THEME_NEW=`echo "${WP_T}" | awk -F, 'NR { print $4 }'`
      echo "- Tema actualizable:   ${WP_THEME_NAME} ${WP_THEME_ACT} -> ${WP_THEME_NEW}"
    fi
  done

  echo ""
  echo "Plugins"
  echo ""
  WP_PLUGINS=`wp plugin list --fields=name,update,version,update_version --format=csv --path="${WP_PATH}" --allow-root | awk FNR-1`
  WP_TOTAL_PLUGINS=`echo "$WP_PLUGINS" | wc -l`
  echo "- Plugins:             ${WP_TOTAL_PLUGINS} plugins".

  for WP_P in $WP_PLUGINS
  do
    WP_PLUGIN_UPD=`echo "${WP_P}" | awk -F, 'NR { print $2 }'`
    if [ $WP_PLUGIN_UPD == "available" ]
    then
      WP_PLUGIN_NAME=`echo "${WP_P}" | awk -F, 'NR { print $1 }'`
      WP_PLUGIN_ACT=`echo "${WP_P}" | awk -F, 'NR { print $3 }'`
      WP_PLUGIN_NEW=`echo "${WP_P}" | awk -F, 'NR { print $4 }'`
      echo "- Plugin actualizable: ${WP_PLUGIN_NAME} ${WP_PLUGIN_ACT} -> ${WP_PLUGIN_NEW}"
    fi
  done

  echo ""
  echo "********************************************************************************"

done

echo ""
echo " -- FIN --"
echo ""
echo ""

Una vez lo tengamos, podemos ejecutar el fichero

bash wordpress-finder.sh

Lo que nos devolverá algo tal que así:

Actualizando WP-CLI a la última versión:
WP-CLI 2.5.0

Revisando el buscador de WP-CLI:
Buscador de WP-CLI instalado.

Buscando sitios WordPress:
Se ha encontrado un total de 2 WordPress.

********************************************************************************

WordPress

- Ruta:                /webs/example/www.example.com/
- Nombre:              Example
- URL:                 https://www.example.com
- Versión WP:          5.7.2
- Actualización:       5.8

Themes

- Temas:               2 temas.
- Tema actualizable:   twentytwentyone 1.3 -> 1.4

Plugins

- Plugins:             10 plugins.
- Plugin actualizable: autoptimize 2.8.4 -> 2.9.0
- Plugin actualizable: gutenberg 11.0.0 -> 11.1.0
- Plugin actualizable: redis-cache 2.0.18 -> 2.0.21
- Plugin actualizable: flush-opcache 4.1.0 -> 4.1.1
- Plugin actualizable: wp-super-cache 1.7.3 -> 1.7.4

********************************************************************************

********************************************************************************

WordPress

- Ruta:                /webs/example/test.example.com/
- Nombre:              Test example
- URL:                 https://test.example.com
- Versión WP:          5.8

Themes

- Temas:               1 temas.

Plugins

- Plugins:             8 plugins.

********************************************************************************

 -- FIN --

Y, con este sistema, además de encontrar WordPress que quizá teníamos olvidados, también encontraremos aquellas actualizaciones pendientes.

NOTA FINAL: Este es uno de mis primeros scripts bash más complejos que he hecho… así que, por favor, si tienes alguna sugerencia de mejora, por favor, házmela llegar para mejorar el código.


Sobre este documento

Este documento está regulado por la licencia EUPL v1.2, publicado en WP SysAdmin y creado por Javier Casares. Por favor, si utilizas este contenido en tu sitio web, tu presentación o cualquier material que distribuyas, recuerda hacer una mención a este sitio o a su autor, y teniendo que poner el material que crees bajo licencia EUPL.

Servicios de Administración de Sistemas WordPress

¿Tienes un sitio web con WordPress de alto tráfico? ¿Eres una Agencia con servidores con cPanel, Plesk u otro panel en los que mantienes WordPress para tus clientes?

Si es así y te interesa un servicio profesional de mantenimiento de infraestructura WordPress y de mejora del rendimiento de tus sitios web o los de tus clientes, contacta conmigo.

Deja un comentario