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_managementinstalado - Para funciones de Redis: módulo
redis_managementinstalado - 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:
- Actualización de PHP a la versión más reciente disponible
- Ajuste de
memory_limita 256M - Habilitación y configuración de opcache
- Limpieza de revisiones de posts
- Limpieza de transients expirados
- Limpieza de postmeta huérfanos
- 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:
- Crea una instancia Redis dedicada (nombre:
redis.<dominio>) si no existe - Configura los defines
WP_REDIS_*enwp-config.php - Instala y activa el plugin
redis-cachevía WP-CLI - 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:
-
Fase 1 - Actualizar
siteurlyhomeenwp_options(corte inmediato de redirección al dominio antiguo) -
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 varianteshttps://,http://y dominio desnudo -
Fase 3 - Actualizar
wp-config.php(definesWP_HOME,WP_SITEURLy cualquier otra referencia) -
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
-
Antes de optimizar: ejecutar
--check-performancepara ver el estado actual - Backups: realizar backup de la base de datos antes de limpiezas masivas
-
Plugins inactivos: revisar regularmente con
-p --show-inactivey eliminar los no necesarios con--delete-plugin -
Monitorización: ejecutar
--check-performanceperiódicamente para detectar problemas - Redis: activar Redis Object Cache en sitios con tráfico significativo para reducir la carga de base de datos
-
Verificación de integridad: ejecutar
--verify-core-checksumstras incidentes de seguridad o comportamientos anómalos -
Migración de dominio: usar siempre
--dry-runprimero 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-newerpara 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
.htaccesscrea un backup automático antes de sobrescribir y detecta elRewriteBasecorrecto según la estructura de carpetas - La migración de dominio normaliza los protocolos: tanto
http://comohttps://del dominio antiguo se reemplazan porhttps://del nuevo dominio
