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?

Este tutorial ha sido creado en un VPS de Clouding.io. Puedes crear tu propio VPS desde 3€/mes.

Además, tienes la posibilidad de crear tu VPS con la imagen de WordPress en un clic.

COLABORACIÓN

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.