Abrir code snippets añadir snippets / luego herramientas añadir nuevo correo.
Nota: Requiere acceso a WordPress
Verifique que el cambio se hizo en Configuración/general
Proceda a eliminar antiguo administrador y/o cambiar perfil o permisos
Código
<?php
/**
* Panel en Herramientas: Cambiar correo/administrador general sin confirmación
* Requiere capacidad manage_options
*/
add_action('admin_menu', function () {
add_management_page(
'Cambiar Administrador',
'Cambiar Admin',
'manage_options',
'cambiar-admin-general',
'cag_render_panel'
);
});
function cag_render_panel() {
if (!current_user_can('manage_options')) {
wp_die('No tienes permisos suficientes.');
}
$mensaje = '';
$tipo_mensaje = '';
if (isset($_POST['cag_submit']) && check_admin_referer('cag_accion', 'cag_nonce')) {
$nuevo_email = sanitize_email(wp_unslash($_POST['cag_email'] ?? ''));
$promover_usuario = isset($_POST['cag_promover']);
if (empty($nuevo_email) || !is_email($nuevo_email)) {
$mensaje = 'El correo ingresado no es válido.';
$tipo_mensaje = 'error';
} else {
// 1) Cambiar admin_email directamente, sin flujo de confirmación
update_option('admin_email', $nuevo_email);
// 2) Limpiar cualquier cambio de admin_email pendiente (el que dispara el correo de confirmación)
delete_option('adminhash');
delete_option('new_admin_email');
$mensaje = 'Correo de administración actualizado a: ' . esc_html($nuevo_email);
$tipo_mensaje = 'success';
// 3) (Opcional) Buscar usuario con ese correo y asignarlo como Administrador
if ($promover_usuario) {
$usuario = get_user_by('email', $nuevo_email);
if ($usuario) {
$usuario->set_role('administrator');
$mensaje .= ' — Usuario "' . esc_html($usuario->user_login) . '" asignado como Administrador.';
} else {
$mensaje .= ' — Aviso: no existe ningún usuario registrado con ese correo, solo se actualizó el email de administración del sitio.';
$tipo_mensaje = 'warning';
}
}
}
}
$email_actual = get_option('admin_email');
?>
<div class="wrap">
<h1>Cambiar Administrador General</h1>
<?php if ($mensaje): ?>
<div class="notice notice-<?php echo $tipo_mensaje === 'success' ? 'success' : ($tipo_mensaje === 'warning' ? 'warning' : 'error'); ?> is-dismissible">
<p><?php echo esc_html($mensaje); ?></p>
</div>
<?php endif; ?>
<p><strong>Correo de administración actual:</strong> <?php echo esc_html($email_actual); ?></p>
<form method="post" style="max-width:480px; background:#fff; padding:20px; border:1px solid #ccd0d4; border-radius:8px; margin-top:15px;">
<?php wp_nonce_field('cag_accion', 'cag_nonce'); ?>
<p>
<label for="cag_email"><strong>Nuevo correo del administrador</strong></label><br>
<input type="email" id="cag_email" name="cag_email" required
placeholder="admin@ejemplo.com"
style="width:100%; padding:8px; margin-top:5px;">
</p>
<p>
<label>
<input type="checkbox" name="cag_promover" value="1">
Asignar rol de Administrador al usuario con ese correo (si existe)
</label>
</p>
<p>
<button type="submit" name="cag_submit" class="button button-primary">
Cambiar administrador ahora
</button>
</p>
<p style="color:#a00; font-size:12px;">
⚠️ Esta acción se aplica de inmediato, sin enviar correo de confirmación.
</p>
</form>
</div>
<?php
}
Artefacto mas potente de inmediato eliminar admin y cambiar admin
Código
<?php
/**
* Panel en Herramientas: Cambiar correo/administrador general sin confirmación
* + Eliminar administrador original (con reasignación de contenido)
* Requiere capacidad manage_options
*/
add_action('admin_menu', function () {
add_management_page(
'Cambiar Administrador',
'Cambiar Admin',
'manage_options',
'cambiar-admin-general',
'cag_render_panel'
);
});
function cag_render_panel() {
if (!current_user_can('manage_options')) {
wp_die('No tienes permisos suficientes.');
}
$mensaje = '';
$tipo_mensaje = '';
// --- Acción 1: Cambiar admin_email / promover usuario ---
if (isset($_POST['cag_submit']) && check_admin_referer('cag_accion', 'cag_nonce')) {
$nuevo_email = sanitize_email(wp_unslash($_POST['cag_email'] ?? ''));
$promover_usuario = isset($_POST['cag_promover']);
if (empty($nuevo_email) || !is_email($nuevo_email)) {
$mensaje = 'El correo ingresado no es válido.';
$tipo_mensaje = 'error';
} else {
update_option('admin_email', $nuevo_email);
delete_option('adminhash');
delete_option('new_admin_email');
$mensaje = 'Correo de administración actualizado a: ' . esc_html($nuevo_email);
$tipo_mensaje = 'success';
if ($promover_usuario) {
$usuario = get_user_by('email', $nuevo_email);
if ($usuario) {
$usuario->set_role('administrator');
$mensaje .= ' — Usuario "' . esc_html($usuario->user_login) . '" asignado como Administrador.';
} else {
$mensaje .= ' — Aviso: no existe ningún usuario registrado con ese correo, solo se actualizó el email de administración del sitio.';
$tipo_mensaje = 'warning';
}
}
}
}
// --- Acción 2: Eliminar administrador original ---
if (isset($_POST['cag_eliminar_submit']) && check_admin_referer('cag_eliminar_accion', 'cag_eliminar_nonce')) {
require_once ABSPATH . 'wp-admin/includes/user.php';
$id_a_eliminar = absint($_POST['cag_user_id'] ?? 0);
$id_reasignar = absint($_POST['cag_reasignar_id'] ?? 0);
$usuario_actual_id = get_current_user_id();
if (!$id_a_eliminar || !get_userdata($id_a_eliminar)) {
$mensaje = 'El usuario a eliminar no es válido.';
$tipo_mensaje = 'error';
} elseif ($id_a_eliminar === $usuario_actual_id) {
$mensaje = 'No puedes eliminar al usuario con el que has iniciado sesión actualmente.';
$tipo_mensaje = 'error';
} else {
$reasignar = $id_reasignar > 0 ? $id_reasignar : null;
$ok = wp_delete_user($id_a_eliminar, $reasignar);
if ($ok) {
$mensaje = 'Usuario eliminado correctamente.';
if ($reasignar) {
$mensaje .= ' Su contenido fue reasignado al usuario ID ' . $reasignar . '.';
}
$tipo_mensaje = 'success';
} else {
$mensaje = 'No se pudo eliminar el usuario.';
$tipo_mensaje = 'error';
}
}
}
$email_actual = get_option('admin_email');
// Listado de administradores actuales para el segundo formulario
$administradores = get_users(['role' => 'administrator']);
?>
<div class="wrap">
<h1>Cambiar Administrador General</h1>
<?php if ($mensaje): ?>
<div class="notice notice-<?php echo $tipo_mensaje === 'success' ? 'success' : ($tipo_mensaje === 'warning' ? 'warning' : 'error'); ?> is-dismissible">
<p><?php echo esc_html($mensaje); ?></p>
</div>
<?php endif; ?>
<p><strong>Correo de administración actual:</strong> <?php echo esc_html($email_actual); ?></p>
<!-- Formulario 1: cambiar email / promover -->
<form method="post" style="max-width:480px; background:#fff; padding:20px; border:1px solid #ccd0d4; border-radius:8px; margin-top:15px;">
<?php wp_nonce_field('cag_accion', 'cag_nonce'); ?>
<p>
<label for="cag_email"><strong>Nuevo correo del administrador</strong></label><br>
<input type="email" id="cag_email" name="cag_email" required
placeholder="admin@ejemplo.com"
style="width:100%; padding:8px; margin-top:5px;">
</p>
<p>
<label>
<input type="checkbox" name="cag_promover" value="1">
Asignar rol de Administrador al usuario con ese correo (si existe)
</label>
</p>
<p>
<button type="submit" name="cag_submit" class="button button-primary">
Cambiar administrador ahora
</button>
</p>
<p style="color:#a00; font-size:12px;">
⚠️ Esta acción se aplica de inmediato, sin enviar correo de confirmación.
</p>
</form>
<!-- Formulario 2: eliminar administrador original -->
<h2 style="margin-top:30px;">Eliminar administrador original</h2>
<form method="post" style="max-width:480px; background:#fff; padding:20px; border:1px solid #ccd0d4; border-radius:8px;">
<?php wp_nonce_field('cag_eliminar_accion', 'cag_eliminar_nonce'); ?>
<p>
<label for="cag_user_id"><strong>Usuario a eliminar</strong></label><br>
<select name="cag_user_id" id="cag_user_id" style="width:100%; padding:8px; margin-top:5px;" required>
<option value="">-- Selecciona --</option>
<?php foreach ($administradores as $admin): ?>
<option value="<?php echo esc_attr($admin->ID); ?>">
<?php echo esc_html($admin->user_login . ' (' . $admin->user_email . ')'); ?>
</option>
<?php endforeach; ?>
</select>
</p>
<p>
<label for="cag_reasignar_id"><strong>Reasignar su contenido a</strong> (opcional, recomendado)</label><br>
<select name="cag_reasignar_id" id="cag_reasignar_id" style="width:100%; padding:8px; margin-top:5px;">
<option value="0">-- No reasignar (se elimina el contenido) --</option>
<?php foreach ($administradores as $admin): ?>
<option value="<?php echo esc_attr($admin->ID); ?>">
<?php echo esc_html($admin->user_login . ' (' . $admin->user_email . ')'); ?>
</option>
<?php endforeach; ?>
</select>
</p>
<p>
<button type="submit" name="cag_eliminar_submit" class="button button-secondary"
onclick="return confirm('¿Seguro que deseas eliminar este usuario? Esta acción no se puede deshacer.');">
Eliminar usuario
</button>
</p>
<p style="color:#a00; font-size:12px;">
⚠️ Si no reasignas su contenido, sus posts/páginas quedarán sin autor o se eliminarán según el tipo de contenido.
</p>
</form>
</div>
<?php
}
