¿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.