Crad-wordpress-mgr: Herramienta de gestión de WordPress para Core-Admin


#1

1. Introducción

crad-wordpress-mgr.pyc es una herramienta de línea de comandos para la gestión centralizada de instalaciones WordPress en servidores administrados con Core-Admin. Permite listar, analizar, optimizar, reparar y gestionar múltiples instalaciones WordPress desde una única interfaz.

2. Requisitos

  • Acceso root al servidor
  • Core-Admin con el módulo wordpress_management instalado
  • Para funciones de Redis: módulo redis_management instalado
  • Para funciones de WP-CLI: acceso a Internet (se instala automáticamente si no está presente)

3. Referencia completa de opciones

Listados e información

Comando Descripción
-l, --list-wordpress Listar todas las instalaciones WordPress del sistema
-u, --list-users <wordpress> Listar usuarios de un WordPress específico
-U, --list-all-users Listar usuarios de todos los WordPress en una tabla consolidada
-p, --list-plugins <wordpress> Listar plugins instalados con estado y peso de código
-a, --show-admin-path <wordpress> Mostrar ruta de administración (detecta wps-hide-login)
--show-ok-login <dominio> Mostrar registros de login exitoso en WordPress

Gestión de usuarios

Comando Descripción
-c, --create-admin <wordpress> Crear un usuario administrador
-r, --remove-user <wordpress> Eliminar un usuario (requiere --login)
--reset-password Resetear contraseña a un valor aleatorio desconocido (requiere --user y --wordpress)
--set-password <contraseña> Establecer una contraseña específica (requiere --user y --wordpress)

Depuración

Comando Descripción
--enable-debug <wordpress> Activar WP_DEBUG y WP_DEBUG_LOG
--disable-debug <wordpress> Desactivar WP_DEBUG

Rendimiento y optimización

Comando Descripción
--check-performance <wordpress> Analizar rendimiento y mostrar recomendaciones
--fix-performance <wordpress> Aplicar todas las correcciones de rendimiento seguras
--clean-revisions <wordpress> Eliminar revisiones de posts
--clean-transients <wordpress> Eliminar transients expirados
--clean-postmeta <wordpress> Eliminar entradas postmeta huérfanas
--upgrade-php <wordpress> Actualizar PHP a la versión más reciente soportada
--fix-memory-limit <wordpress> Ajustar memory_limit a 256M
--fix-opcache <wordpress> Habilitar opcache si está desactivado

Gestión de plugins

Comando Descripción
--activate-plugin <wordpress> Activar un plugin (requiere --plugin)
--deactivate-plugin <wordpress> Desactivar un plugin (requiere --plugin)
--delete-plugin <wordpress> Desactivar y eliminar un plugin del disco (requiere --plugin)

Integración con Redis

Comando Descripción
--activate-redis-server <wordpress> Crear una instancia Redis dedicada y configurar Redis Object Cache
--reuse-redis-server <fqdn> <wordpress> Reutilizar una instancia Redis existente para un WordPress
--deactivate-redis-server <wordpress> Eliminar la configuración de Redis Object Cache
--redis-plan <nombre> Especificar el plan Redis al crear una instancia (con --activate-redis-server)

WP-CLI

Comando Descripción
--install-wp-cli Instalar o actualizar WP-CLI globalmente en /usr/local/bin/wp
--verify-core-checksums <wordpress> Verificar integridad de los ficheros del core de WordPress
--verify-plugin-checksums <wordpress> Verificar integridad de los ficheros de plugins
--repair-core <wordpress> Reparar el core redescargando los ficheros (preserva wp-content)
--repair-htaccess <wordpress> Restaurar .htaccess a la configuración estándar de WordPress
--wp-cli <wordpress> <comando...> Ejecutar un comando WP-CLI arbitrario
--wp-option <wordpress> <subcomando...> Ejecutar wp option (atajo)
--wp-query <wordpress> <SQL> Ejecutar wp db query (atajo)

Migración de dominio

Comando Descripción
--change-domain <wordpress> Cambiar todas las referencias del dominio antiguo al actual
--old-domain <dominio> Dominio antiguo a reemplazar (por defecto se autodetecta desde siteurl)
--dry-run Mostrar qué cambiaría sin aplicar modificaciones (con --change-domain)

Opciones generales

Opción Descripción
--json Salida en formato JSON
--csv Salida en formato CSV (con --show-ok-login)
-v, --verbose Modo verboso
-y, --yes Omitir confirmaciones (usar con precaución)
--show-credentials Mostrar credenciales de base de datos (ocultas por defecto)
--show-inactive Mostrar solo plugins inactivos (con -p)
--sort-by-weight Ordenar plugins por peso de código (con -p)
--login <usuario> Nombre de usuario para crear/eliminar
--email <email> Email para crear usuario
--password <contraseña> Contraseña para crear usuario (se genera automáticamente si no se especifica)
--user <usuario> Usuario WordPress (con --reset-password y --set-password)
--wordpress <wordpress> Identificador de WordPress (con --reset-password y --set-password)
--plugin <nombre> Nombre del plugin (con --activate-plugin, --deactivate-plugin, --delete-plugin)

4. Identificación de WordPress

La mayoría de comandos aceptan un identificador de WordPress que puede ser:

  • Ruta de carpeta: /var/webs/ejemplo.com/html
  • Ruta a wp-config.php: /var/webs/ejemplo.com/html/wp-config.php (más rápido, evita búsqueda)
  • Nombre de dominio: ejemplo.com (busca entre todas las instalaciones)

Ejemplo de las tres formas equivalentes:

crad-wordpress-mgr.pyc --enable-debug=/var/webs/ejemplo.com/html/wp-config.php  # más rápido
crad-wordpress-mgr.pyc --enable-debug=/var/webs/ejemplo.com/html/               # rápido
crad-wordpress-mgr.pyc --enable-debug=ejemplo.com                                # busca por dominio

5. Ejemplos de uso

Listar instalaciones WordPress

crad-wordpress-mgr.pyc -l

Salida:

Id  Is_active  Hosting_name         Url                        Folder
--  ---------  ------------         ---                        ------
1  |[*]       |ejemplo.com         |https://ejemplo.com       |/var/webs/ejemplo.com/html
2  |[*]       |blog.ejemplo.com    |https://blog.ejemplo.com  |/var/webs/blog.ejemplo.com/html

Con --show-credentials se muestran además las credenciales de base de datos. Con --json la salida se devuelve en formato JSON, útil para integración con scripts.

Listar y gestionar usuarios

# Listar usuarios de un WordPress específico
crad-wordpress-mgr.pyc --list-users /var/webs/ejemplo.com/html

# Listar todos los usuarios de todos los WordPress
crad-wordpress-mgr.pyc --list-all-users

# Crear un usuario administrador (genera contraseña automáticamente)
crad-wordpress-mgr.pyc --create-admin=ejemplo.com --login=admin --email=admin@ejemplo.com

# Crear un usuario con contraseña específica
crad-wordpress-mgr.pyc --create-admin=ejemplo.com --login=admin --email=admin@ejemplo.com --password=MiClave123

# Eliminar un usuario
crad-wordpress-mgr.pyc --remove-user=ejemplo.com --login=usuario-antiguo

Cambiar o resetear contraseñas

# Resetear contraseña a un valor aleatorio desconocido (útil para bloquear acceso)
crad-wordpress-mgr.pyc --reset-password --user=nombre-usuario --wordpress=ejemplo.com

# Establecer una contraseña específica
crad-wordpress-mgr.pyc --set-password=NuevaContraseña --user=nombre-usuario --wordpress=ejemplo.com

Mostrar ruta de administración

crad-wordpress-mgr.pyc -a ejemplo.com

Detecta automáticamente si el plugin wps-hide-login está activo y muestra la ruta personalizada:

WordPress folder: /var/webs/ejemplo.com/html
Admin path:       /mi-acceso-secreto
Login path:       /mi-acceso-secreto
WPS Hide Login:   Active (custom slug: mi-acceso-secreto)

Ver registros de login exitoso

# Formato tabla (por defecto)
crad-wordpress-mgr.pyc --show-ok-login=ejemplo.com

# Formato JSON
crad-wordpress-mgr.pyc --show-ok-login=ejemplo.com --json

# Formato CSV (para importar en hoja de cálculo)
crad-wordpress-mgr.pyc --show-ok-login=ejemplo.com --csv

Muestra timestamp, fecha, usuario, dominio, IP de origen e información de geolocalización.

Activar modo debug

crad-wordpress-mgr.pyc --enable-debug ejemplo.com

Esto modifica wp-config.php para activar WP_DEBUG, WP_DEBUG_LOG y desactivar WP_DEBUG_DISPLAY. Los errores se registran en wp-content/debug.log sin mostrarse en pantalla.

crad-wordpress-mgr.pyc --disable-debug ejemplo.com

Analizar rendimiento

crad-wordpress-mgr.pyc --check-performance ejemplo.com

Realiza un análisis completo en 9 pasos:

======================================================================
WordPress Performance Analysis: ejemplo.com
======================================================================

[1/9] Checking PHP version...
[2/9] Checking Opcache status...
[3/9] Checking PHP memory limit...
[4/9] Checking autoloaded options size...
[5/9] Checking post revisions...
[6/9] Checking postmeta table size...
[7/9] Checking active plugins...
[8/9] Checking expired transients...
[9/9] Checking Redis Object Cache...

----------------------------------------------------------------------
SUMMARY
----------------------------------------------------------------------

Configuration:
  PHP Version:              8.2.28
  Opcache:                  Enabled and configured
  PHP Memory Limit:         256M
  Autoloaded Options:       0.34 MB
  Post Revisions:           1250
  Postmeta Rows:            45000
  Active Plugins:           25
  Expired Transients:       150
  Redis Object Cache:       Not configured

WARNINGS (consider fixing):
  [~] Found 1250 post revisions. Consider cleaning up
  [~] Found 150 expired transients. Consider cleanup
  [~] Redis Object Cache is not configured

RECOMMENDATIONS:
  1. Delete old revisions
  2. Clean expired transients
  3. Contact your system administrator to deploy a Redis instance

----------------------------------------------------------------------
ELEMENTOR-SPECIFIC TIPS
----------------------------------------------------------------------
  - Regenerate CSS: Elementor > Tools > Regenerate CSS
  - Disable unused widgets in Elementor > Settings > Features
  - Use 'Improved Asset Loading' in Elementor > Experiments

El análisis detecta además plugins conocidos por su impacto en el rendimiento (Broken Link Checker, YARPP, WP Statistics) y tablas de gran tamaño.

Aplicar correcciones automáticas de rendimiento

crad-wordpress-mgr.pyc --fix-performance ejemplo.com

Aplica automáticamente 7 correcciones en secuencia:

  1. Actualización de PHP a la versión más reciente disponible
  2. Ajuste de memory_limit a 256M
  3. Habilitación y configuración de opcache
  4. Limpieza de revisiones de posts
  5. Limpieza de transients expirados
  6. Limpieza de postmeta huérfanos
  7. Verificación de Redis Object Cache

Cada paso muestra si se aplicó una corrección ([FIXED]), si ya estaba correcto ([OK]) o si se omitió ([SKIP]). Con -y se omiten todas las confirmaciones.

Las correcciones también se pueden aplicar individualmente:

crad-wordpress-mgr.pyc --clean-revisions=ejemplo.com
crad-wordpress-mgr.pyc --clean-transients=ejemplo.com
crad-wordpress-mgr.pyc --clean-postmeta=ejemplo.com
crad-wordpress-mgr.pyc --upgrade-php=ejemplo.com
crad-wordpress-mgr.pyc --fix-memory-limit=ejemplo.com
crad-wordpress-mgr.pyc --fix-opcache=ejemplo.com

Gestión de plugins

# Listar todos los plugins con estado y peso de código
crad-wordpress-mgr.pyc --list-plugins=ejemplo.com

# Listar ordenando por peso (plugins más pesados primero)
crad-wordpress-mgr.pyc --list-plugins=ejemplo.com --sort-by-weight

# Ver solo plugins inactivos (candidatos a eliminar)
crad-wordpress-mgr.pyc --list-plugins=ejemplo.com --show-inactive

# Activar un plugin
crad-wordpress-mgr.pyc --activate-plugin=ejemplo.com --plugin=akismet

# Desactivar un plugin
crad-wordpress-mgr.pyc --deactivate-plugin=ejemplo.com --plugin=akismet

# Desactivar y eliminar un plugin completamente (borra ficheros del disco)
crad-wordpress-mgr.pyc --delete-plugin=ejemplo.com --plugin=akismet

Ejemplo de salida de --list-plugins --sort-by-weight:

Name                     Is_active  Php_files  Lines   Size
----                     ---------  ---------  -----   ----
woocommerce             |[*]       |3511      |678.5K |72.5 MB
elementor               |[*]       |1273      |198.2K |67.5 MB
wordfence               |[*]       |553       |145.8K |20.9 MB
advanced-custom-fields  |[ ]       |268       |60.3K  |23.2 MB

Total: 25 plugins (20 active, 5 inactive)
Active plugins code weight: 1250.5K lines of PHP
Inactive plugins code weight: 180.2K lines (can be deleted to free space)

La herramienta también detecta y muestra mu-plugins (must-use plugins) marcándolos con el sufijo (mu).

Integración con Redis

Redis Object Cache reduce significativamente las consultas a base de datos, mejorando el tiempo de respuesta de WordPress.

# Crear una instancia Redis dedicada y configurar WordPress
crad-wordpress-mgr.pyc --activate-redis-server=ejemplo.com

# Usar un plan Redis específico
crad-wordpress-mgr.pyc --activate-redis-server=ejemplo.com --redis-plan=premium

# Reutilizar una instancia Redis existente para otro WordPress
crad-wordpress-mgr.pyc --reuse-redis-server redis.otrodominio.com ejemplo.com

# Desactivar Redis Object Cache (no elimina la instancia Redis)
crad-wordpress-mgr.pyc --deactivate-redis-server=ejemplo.com

El proceso de activación:

  1. Crea una instancia Redis dedicada (nombre: redis.<dominio>) si no existe
  2. Configura los defines WP_REDIS_* en wp-config.php
  3. Instala y activa el plugin redis-cache vía WP-CLI
  4. Habilita Redis Object Cache

Al desactivar, se elimina la configuración de wp-config.php y se desactiva el plugin, pero la instancia Redis se conserva para poder reutilizarla o eliminarla manualmente.

WP-CLI: Verificación y reparación

La herramienta integra WP-CLI para operaciones avanzadas. Si WP-CLI no está instalado, se descarga e instala automáticamente.

# Instalar o actualizar WP-CLI manualmente
crad-wordpress-mgr.pyc --install-wp-cli

# Verificar integridad de los ficheros del core
crad-wordpress-mgr.pyc --verify-core-checksums=ejemplo.com

# Verificar integridad de los ficheros de plugins
crad-wordpress-mgr.pyc --verify-plugin-checksums=ejemplo.com

# Reparar el core redescargando los ficheros originales
# (preserva wp-content: temas, plugins, uploads)
crad-wordpress-mgr.pyc --repair-core=ejemplo.com

# Restaurar .htaccess a la configuración estándar de WordPress
# (crea backup automático del fichero actual)
crad-wordpress-mgr.pyc --repair-htaccess=ejemplo.com

La verificación de checksums detecta ficheros modificados, añadidos o eliminados respecto a la versión original distribuida por WordPress.org. Esto es especialmente útil para detectar inyecciones de código malicioso.

WP-CLI: Comandos genéricos

Se puede ejecutar cualquier comando WP-CLI directamente:

# Ejecutar un comando WP-CLI arbitrario
crad-wordpress-mgr.pyc --wp-cli=ejemplo.com option get blogname
crad-wordpress-mgr.pyc --wp-cli=ejemplo.com plugin list
crad-wordpress-mgr.pyc --wp-cli=ejemplo.com core version

# Atajo para wp option
crad-wordpress-mgr.pyc --wp-option=ejemplo.com get blogname
crad-wordpress-mgr.pyc --wp-option=ejemplo.com update blogdescription "Mi nuevo lema"

# Atajo para wp db query (consultas SQL directas)
crad-wordpress-mgr.pyc --wp-query=ejemplo.com "SELECT * FROM wp_options LIMIT 5;"
crad-wordpress-mgr.pyc --wp-query=ejemplo.com "SELECT option_name, LENGTH(option_value) as size FROM wp_options WHERE autoload='yes' ORDER BY size DESC LIMIT 10;"

La herramienta detecta y utiliza automáticamente el binario PHP específico del hosting (si existe en /var/webs/<hosting>/php), y ejecuta los comandos como el usuario propietario del hosting para respetar los permisos de ficheros.

Migración de dominio

Cuando se migra un sitio WordPress desde otro dominio, la base de datos y la configuración aún contienen referencias al dominio antiguo. --change-domain corrige todas las referencias automáticamente.

# Autodetectar el dominio antiguo desde siteurl y reemplazar
crad-wordpress-mgr.pyc --change-domain=ejemplo.com

# Previsualizar cambios sin aplicarlos
crad-wordpress-mgr.pyc --change-domain=ejemplo.com --dry-run

# Especificar el dominio antiguo explícitamente
crad-wordpress-mgr.pyc --change-domain=ejemplo.com --old-domain=dominio-antiguo.com

# Saltar confirmación
crad-wordpress-mgr.pyc --change-domain=ejemplo.com --yes

El proceso se ejecuta en 4 fases:

  1. Fase 1 - Actualizar siteurl y home en wp_options (corte inmediato de redirección al dominio antiguo)
  2. Fase 2 - Búsqueda y reemplazo en toda la base de datos vía WP-CLI search-replace (posts, postmeta, comentarios, todas las tablas). Reemplaza variantes https://, http:// y dominio desnudo
  3. Fase 3 - Actualizar wp-config.php (defines WP_HOME, WP_SITEURL y cualquier otra referencia)
  4. Fase 4 - Actualizar .htaccess (cualquier referencia al dominio antiguo)

Antes de aplicar cambios, la herramienta muestra un resumen completo de las referencias encontradas en cada ubicación. Con --dry-run se puede revisar este resumen sin modificar nada.

6. Uso en scripts

Para automatización, usar la opción -y para omitir confirmaciones y --json para salida estructurada:

# Limpiar todas las instalaciones WordPress
for domain in $(crad-wordpress-mgr.pyc -l --json | jq -r '.[].hosting_name'); do
    crad-wordpress-mgr.pyc --fix-performance "$domain" -y
done

# Verificar integridad de todos los WordPress
for domain in $(crad-wordpress-mgr.pyc -l --json | jq -r '.[].hosting_name'); do
    echo "=== $domain ==="
    crad-wordpress-mgr.pyc --verify-core-checksums="$domain"
done

# Exportar logins de WordPress en CSV
crad-wordpress-mgr.pyc --show-ok-login=ejemplo.com --csv > logins.csv

# Listar todos los usuarios en JSON
crad-wordpress-mgr.pyc --list-all-users --json | jq '.[] | select(.is_admin == true)'

7. Buenas prácticas

  1. Antes de optimizar: ejecutar --check-performance para ver el estado actual
  2. Backups: realizar backup de la base de datos antes de limpiezas masivas
  3. Plugins inactivos: revisar regularmente con -p --show-inactive y eliminar los no necesarios con --delete-plugin
  4. Monitorización: ejecutar --check-performance periódicamente para detectar problemas
  5. Redis: activar Redis Object Cache en sitios con tráfico significativo para reducir la carga de base de datos
  6. Verificación de integridad: ejecutar --verify-core-checksums tras incidentes de seguridad o comportamientos anómalos
  7. Migración de dominio: usar siempre --dry-run primero para revisar los cambios antes de aplicarlos

Notas técnicas

  • La herramienta requiere acceso root
  • Detecta automáticamente el prefijo de tablas de cada WordPress
  • Las credenciales de base de datos se leen directamente de wp-config.php
  • El análisis de plugins cuenta líneas de código PHP para estimar la carga de parseo
  • La actualización de PHP respeta --only-if-newer para evitar downgrades
  • WP-CLI se instala automáticamente cuando es necesario (en /usr/local/bin/wp)
  • Los comandos WP-CLI se ejecutan como el usuario propietario del hosting y utilizan el PHP específico del hosting si está disponible
  • La reparación de .htaccess crea un backup automático antes de sobrescribir y detecta el RewriteBase correcto según la estructura de carpetas
  • La migración de dominio normaliza los protocolos: tanto http:// como https:// del dominio antiguo se reemplazan por https:// del nuevo dominio