Cómo configurar el panel de WordPress para clientes
Abrir wp-admin en una instalación nueva es como entrar en una cabina de avión donde la mitad de los botones activan el asiento eyectable. Para desarrolladores, esto es desorden. Para clientes, es ansiedad.
Una configuración profesional de WordPress no depende solo del tema, sino de la experiencia en el panel de administración. Esta guía recorre el escritorio tal como lo entrega WordPress 7.1 y después muestra el código que usamos para simplificarlo en las cuentas de clientes. Cada función y cada hook de abajo existe en el núcleo de WordPress y enlaza a la referencia para desarrolladores donde importa.
1. Qué hay en el menú del escritorio de WordPress
1.1 Widgets por defecto en la portada del escritorio
Cuando inicias sesión por primera vez en WordPress (tusitio.com/wp-admin), te recibe el Escritorio. Es tu centro de mando, pero a menudo está lleno de widgets que nunca vas a usar.
Widgets por defecto del escritorio (con los ID que el núcleo registra en wp_dashboard_setup()):
- Te damos la bienvenida: Enlaces rápidos para empezar (no es un widget, sino un panel enganchado a la acción
welcome_panel) - De un vistazo (
dashboard_right_now): Número de entradas y páginas, información del tema - Actividad (
dashboard_activity): Entradas publicadas recientemente y últimos comentarios - Borrador rápido (
dashboard_quick_press): Forma rápida de crear un borrador de entrada - Eventos y noticias de WordPress (
dashboard_primary): Próximas WordCamps y noticias - Estado de salud del sitio (
dashboard_site_health): Avisos de seguridad y rendimiento
1.2 Para qué sirve cada opción de la barra lateral
La barra lateral izquierda es tu menú de navegación principal. Entender cada sección es clave:
Entradas: Contenido dinámico con fecha, categorías y etiquetas. Para: noticias, artículos, novedades, entradas de blog.
Medios: Tu biblioteca de archivos. Imágenes, PDF, vídeos, audio. WordPress los ordena por fecha de subida por defecto.
Páginas: Contenido estático y jerárquico. Para: Quiénes somos, Contacto, Servicios, Política de privacidad.
Comentarios: Gestiona todos los comentarios del sitio. Moderación, control de spam, respuestas.
Apariencia: Temas y, además, el editor del sitio (temas de bloques) o los menús, widgets y el personalizador (temas clásicos).
Plugins: Instalar, activar, desactivar y configurar plugins.
Usuarios: Gestionar cuentas de usuario, roles y perfiles.
Herramientas: Importar, exportar, Salud del sitio y las pantallas para exportar y borrar datos personales.
Ajustes: Configuración central de WordPress. Generales, escritura, lectura, comentarios, medios, enlaces permanentes.
1.3 Qué diferencia hay entre entradas y páginas
Deja de explicar “cronológico frente a estático”. Confunde a la gente. Usa esta analogía:
- Las páginas son tu casa. (Inicio, Quiénes somos, Contacto). Casi nunca se mueven.
- Las entradas son tu periódico. (Noticias, artículos, novedades). Cada semana sale una nueva.
Diferencias técnicas:
| Característica | Entradas | Páginas |
|---|---|---|
| Archivos por fecha | Sí | No |
| Categorías | Sí | No |
| Etiquetas | Sí | No |
| Feed RSS | Incluidas | Excluidas |
| Jerárquicas | No | Sí (padre/hija) |
| Selección de plantilla | Sí, si el tema incluye plantillas de entrada | Sí |
La selección de plantilla para entradas llegó con WordPress 4.7, cuando las plantillas por tipo de contenido dejaron de ser exclusivas de las páginas.
2. Cómo usar las opciones de pantalla en WordPress
El botón más potente de WordPress está escondido en la esquina superior derecha: Opciones de pantalla.
2.1 Cómo ocultar columnas en la lista de entradas
Antes de entregar un sitio, ve a Entradas > Todas las entradas y desmarca:
- Comentarios (si están desactivados en todo el sitio)
- Etiquetas (si solo usas categorías)
- Autor (si el blog tiene un solo autor)
Así se reduce la carga cognitiva. Tu cliente no necesita ver columnas que nunca va a usar. El mismo panel incluye Número de elementos por página, que fija cuántas filas carga la lista.
2.2 Opciones de pantalla en el editor de entradas
En el editor clásico, Opciones de pantalla muestra:
- Categorías
- Etiquetas
- Imagen destacada
- Extracto
- Trackbacks
- Campos personalizados
- Comentarios
- Slug
- Autor
En el editor de bloques el botón no existe. Los mismos paneles se activan y desactivan en el diálogo Preferencias del editor.
Consejo: Activa Campos personalizados solo para quien lo necesite. Muestra los metadatos en bruto de la entrada, útil para la gestión avanzada de contenido y confuso para todos los demás.
2.3 Opciones de pantalla en el editor de páginas
Parecido a las entradas, pero incluye:
- Atributos de página: Página superior, selección de plantilla, orden
- Imagen destacada
- Campos personalizados
- Comentarios
- Slug
- Autor
3. Cómo personalizar el escritorio de WordPress
3.1 Cómo quitar los widgets por defecto del escritorio
Por defecto, el escritorio principal (/wp-admin/index.php) es un cementerio de widgets inútiles: “Eventos y noticias de WordPress”, “Borrador rápido”, “Te damos la bienvenida”.
No te limites a minimizarlos. Quítalos con código. Los widgets pasan por remove_meta_box() en la acción wp_dashboard_setup. El panel de bienvenida no es una caja meta, así que necesita remove_action() en su propio hook:
function wppoland_clean_dashboard() {
remove_meta_box('dashboard_primary', 'dashboard', 'side'); // WordPress Events and News
remove_meta_box('dashboard_quick_press', 'dashboard', 'side'); // Quick Draft
remove_meta_box('dashboard_activity', 'dashboard', 'normal'); // Activity
}
add_action('wp_dashboard_setup', 'wppoland_clean_dashboard');
// The Welcome panel is printed by wp_welcome_panel() on the welcome_panel action.
// Core adds that action in wp-admin/includes/admin-filters.php, so remove it on admin_init.
add_action('admin_init', function () {
remove_action('welcome_panel', 'wp_welcome_panel');
});3.2 Añadir widgets personalizados al escritorio
Sustituye los widgets por defecto por información útil para el cliente con wp_add_dashboard_widget():
function wppoland_add_custom_dashboard_widget() {
wp_add_dashboard_widget(
'wppoland_client_widget',
'Welcome to Your Website',
'wppoland_client_widget_content'
);
}
add_action('wp_dashboard_setup', 'wppoland_add_custom_dashboard_widget');
function wppoland_client_widget_content() {
echo '<p>Welcome! Need help? Contact support at [email protected]</p>';
echo '<p>Documentation: <a href="https://docs.example.com">View Guides</a></p>';
}3.3 Cómo añadir un esquema de color propio al admin
WordPress 7.1 registra nueve esquemas de color del admin en register_admin_color_schemes(). Cada usuario elige el suyo en Usuarios > Perfil:
- Por defecto
- Fresco
- Luminoso
- Azul
- Medianoche
- Amanecer
- Ectoplasma
- Océano
- Café
Esquema de color propio por código con wp_admin_css_color():
function wppoland_custom_admin_colors() {
wp_admin_css_color(
'wppoland',
'WPPoland Brand',
get_stylesheet_directory_uri() . '/admin-colors.css',
['#1e1e1e', '#ff6b6b', '#4ecdc4', '#ffe66d']
);
}
add_action('admin_init', 'wppoland_custom_admin_colors');4. Ocultar el menú admin según el rol de usuario
Cada rol de usuario ve secciones distintas del escritorio. Entenderlo es clave en los sitios de clientes.
4.1 Qué menús ve cada rol de usuario
El núcleo lo decide en wp-admin/menu.php por capacidades, no por el nombre del rol. Con los roles y capacidades por defecto:
Administrador: Acceso completo a todos los elementos del menú Editor: Escritorio, Entradas, Medios, Páginas, Comentarios, Perfil, Herramientas Autor: Escritorio, Entradas, Medios, Comentarios, Perfil, Herramientas Colaborador: Escritorio, Entradas (crear y editar las suyas, pero sin publicar), Comentarios, Perfil, Herramientas Suscriptor: Escritorio, Perfil
Herramientas aparece para cualquier rol con edit_posts, porque el elemento de primer nivel exige justo esa capacidad. Lo que hay dentro (Importar, Exportar, Salud del sitio) tiene sus propias comprobaciones, más estrictas.
4.2 Cómo ocultar menús del admin a quien no es administrador
Si tu cliente no debe tocar Herramientas ni Ajustes, ocúltalos. Puedes usar plugins como Admin Menu Editor, pero un fragmento sencillo es más seguro y más ligero:
add_action('admin_menu', function() {
if (!current_user_can('manage_options')) {
remove_menu_page('tools.php');
remove_menu_page('options-general.php');
}
});Ocultar no es control de acceso. remove_menu_page() solo quita la entrada del array global $menu, como muestra su código fuente en la referencia. La comprobación de capacidad de la pantalla no cambia, así que un usuario con esa capacidad todavía puede abrirla por URL. Si un rol no debe llegar a una pantalla, quítale la capacidad.
4.3 Cómo ocultar elementos concretos del submenú
function wppoland_hide_submenu_items() {
if (!current_user_can('manage_options')) {
remove_submenu_page('themes.php', 'themes.php'); // Theme selection
remove_submenu_page('themes.php', 'customize.php'); // Customizer
}
}
add_action('admin_menu', 'wppoland_hide_submenu_items', 999);Los editores de archivos se desactivan mejor con una constante, ver la sección 7.1.
5. Cómo añadir y eliminar metaboxes en WordPress
5.1 Qué son los metaboxes en WordPress
Los metaboxes son las cajas de contenido de los editores de entradas y páginas:
- Publicar: Guardar, vista previa, programar, visibilidad
- Formato: Selección del formato de entrada
- Categorías: Asignación de taxonomía
- Etiquetas: Gestión de etiquetas
- Imagen destacada: Miniatura de la entrada
- Extracto: Extracto manual
5.2 Cómo reordenar metaboxes
Cada usuario puede arrastrar y soltar los metaboxes para adaptarlos a su forma de trabajar. WordPress recuerda estas posiciones por usuario, en metadatos de usuario con la pantalla como clave (meta-box-order_post, closedpostboxes_post, metaboxhidden_post).
5.3 Cómo eliminar metaboxes con código
function wppoland_remove_post_metaboxes() {
remove_meta_box('postcustom', 'post', 'normal'); // Custom fields
remove_meta_box('trackbacksdiv', 'post', 'normal'); // Trackbacks
remove_meta_box('commentstatusdiv', 'post', 'normal'); // Discussion
remove_meta_box('commentsdiv', 'post', 'normal'); // Comments
remove_meta_box('slugdiv', 'post', 'normal'); // Slug
remove_meta_box('authordiv', 'post', 'normal'); // Author
}
add_action('add_meta_boxes', 'wppoland_remove_post_metaboxes', 99);Estos ID pertenecen a la pantalla del editor clásico. En el editor de bloques, la mayoría de esos ajustes están en los paneles de la barra lateral, y los metaboxes de plugins aparecen debajo del área de contenido.
5.4 Cómo añadir metaboxes propios
function wppoland_add_custom_metabox() {
add_meta_box(
'wppoland_custom_metabox',
'Additional Information',
'wppoland_render_custom_metabox',
'post',
'side',
'default'
);
}
add_action('add_meta_boxes', 'wppoland_add_custom_metabox');
function wppoland_render_custom_metabox($post) {
wp_nonce_field('wppoland_save_metabox', 'wppoland_metabox_nonce');
$value = get_post_meta($post->ID, '_wppoland_custom_field', true);
echo '<label for="wppoland_custom_field">Custom Field:</label>';
echo '<input type="text" id="wppoland_custom_field" name="wppoland_custom_field" value="' . esc_attr($value) . '" style="width:100%">';
}
function wppoland_save_custom_metabox($post_id) {
if (!isset($_POST['wppoland_metabox_nonce'])
|| !wp_verify_nonce($_POST['wppoland_metabox_nonce'], 'wppoland_save_metabox')
|| !current_user_can('edit_post', $post_id)) {
return;
}
if (isset($_POST['wppoland_custom_field'])) {
update_post_meta($post_id, '_wppoland_custom_field', sanitize_text_field(wp_unslash($_POST['wppoland_custom_field'])));
}
}
add_action('save_post', 'wppoland_save_custom_metabox');El nonce que imprime el metabox solo sirve si la función de guardado lo comprueba, junto con el permiso del usuario para editar esa entrada concreta.
6. Reordenar y renombrar el menú admin de WordPress
6.1 Cómo reordenar elementos del menú
function wppoland_custom_menu_order($menu_order) {
if (!$menu_order) return true;
return [
'index.php', // Dashboard
'edit.php', // Posts
'edit.php?post_type=page', // Pages
'upload.php', // Media
'separator1',
'themes.php', // Appearance
'plugins.php', // Plugins
'users.php', // Users
'tools.php', // Tools
'options-general.php', // Settings
];
}
add_filter('custom_menu_order', '__return_true');
add_filter('menu_order', 'wppoland_custom_menu_order');6.2 Cómo renombrar elementos del menú
function wppoland_rename_menus() {
global $menu;
$menu[5][0] = 'Articles'; // Rename Posts to Articles
$menu[10][0] = 'Files'; // Rename Media to Files
}
add_action('admin_menu', 'wppoland_rename_menus', 999);Las posiciones 5 (Entradas) y 10 (Medios) son las que asigna el núcleo en wp-admin/menu.php. Un plugin que registre su propio menú en la misma posición puede desplazarlas, así que comprueba el resultado después de instalar cada plugin.
6.3 Cómo añadir elementos propios al menú
function wppoland_add_custom_menu() {
add_menu_page(
'Client Documentation',
'Documentation',
'read',
'client-docs',
'wppoland_render_docs_page',
'dashicons-book',
3
);
}
add_action('admin_menu', 'wppoland_add_custom_menu');
function wppoland_render_docs_page() {
echo '<div class="wrap"><h1>Client Documentation</h1>';
echo '<p>Welcome to your website documentation...</p></div>';
}6.4 Iconos personalizados para elementos del menú
WordPress incluye Dashicons por defecto. Úsalos o usa tus propios SVG:
// Using Dashicons
add_menu_page('Custom Page', 'Custom', 'read', 'custom-page', 'callback', 'dashicons-star-filled');
// Using custom SVG
function wppoland_custom_admin_icon() {
echo '<style>
#toplevel_page_custom-page .wp-menu-image:before {
content: "";
background-image: url("' . esc_url(get_stylesheet_directory_uri() . '/icon.svg') . '");
background-size: contain;
background-repeat: no-repeat;
width: 20px;
height: 20px;
display: inline-block;
}
</style>';
}
add_action('admin_head', 'wppoland_custom_admin_icon');add_menu_page() también acepta como icono una URI de datos con un SVG codificado en base64, lo que evita el CSS adicional.
7. Limitar el panel de WordPress para clientes
7.1 Cómo ocultar los editores de temas y plugins a los clientes
Desenganchar las entradas de menú de los editores desde admin_init no funciona, porque para entonces admin_menu ya se ha ejecutado. El interruptor documentado es una constante en wp-config.php, descrita en la referencia de wp-config.php:
// wp-config.php
define('DISALLOW_FILE_EDIT', true); // removes the theme and plugin file editors for everyone
// Stricter: also blocks installing, updating and deleting plugins and themes from the admin
// define('DISALLOW_FILE_MODS', true);DISALLOW_FILE_EDIT convierte las capacidades edit_themes, edit_plugins y edit_files en do_not_allow, así que incluso los administradores pierden los editores. DISALLOW_FILE_MODS va más allá y también desactiva las actualizaciones desde el escritorio, lo que solo tiene sentido cuando las actualizaciones llegan por despliegues o WP-CLI.
Para ocultar el aviso de actualización del núcleo a quien no es administrador, desengánchalo de admin_notices, donde el núcleo lo añade con prioridad 3:
add_action('admin_init', function () {
if (!current_user_can('update_core')) {
remove_action('admin_notices', 'update_nag', 3);
}
});7.2 Redirección personalizada de login
Redirige a los clientes a una página concreta después de iniciar sesión:
function wppoland_login_redirect($redirect_to, $request, $user) {
if (isset($user->roles) && is_array($user->roles)) {
if (in_array('editor', $user->roles)) {
return admin_url('edit.php');
} elseif (in_array('author', $user->roles)) {
return admin_url('post-new.php');
}
}
return $redirect_to;
}
add_filter('login_redirect', 'wppoland_login_redirect', 10, 3);7.3 Cómo cambiar el texto del pie de página del admin
Sustituye “Gracias por crear con WordPress” por tu marca. admin_footer_text es un filtro, así que la función devuelve el texto en lugar de imprimirlo:
function wppoland_custom_admin_footer($text) {
return '<span id="footer-thankyou">Need help? Contact us at [email protected]</span>';
}
add_filter('admin_footer_text', 'wppoland_custom_admin_footer');7.4 Cómo quitar la versión de WordPress del pie de página del admin
function wppoland_remove_wp_version() {
remove_filter('update_footer', 'core_update_footer');
}
add_action('admin_menu', 'wppoland_remove_wp_version');8. Cómo desactivar o adaptar el editor de bloques Gutenberg
8.1 El menú Apariencia en temas de bloques (FSE)
En los temas de bloques, el menú Apariencia cambia bastante. En WordPress 7.1 muestra:
- Temas: Selección del tema
- Editor: El editor del sitio, donde se editan la navegación, los estilos, las páginas, las plantillas y los patrones de bloques reutilizables
- Fuentes: La biblioteca de fuentes
El enlace al personalizador solo aparece en un tema de bloques cuando un plugin o el propio tema se engancha a customize_register. Los temas clásicos con estilos de editor reciben un elemento Diseño en lugar de Editor, y el resto recibe Patrones.
8.2 Cómo desactivar el editor de bloques por tipo de contenido
function wppoland_disable_gutenberg($use_block_editor, $post_type) {
if ($post_type === 'page') {
return false; // Use classic editor for pages
}
return $use_block_editor;
}
add_filter('use_block_editor_for_post_type', 'wppoland_disable_gutenberg', 10, 2);8.3 Cómo cargar scripts propios en el editor de bloques
function wppoland_enqueue_block_assets() {
wp_enqueue_script(
'wppoland-block-editor',
get_stylesheet_directory_uri() . '/block-editor.js',
['wp-blocks', 'wp-dom-ready', 'wp-edit-post'],
filemtime(get_stylesheet_directory() . '/block-editor.js')
);
}
add_action('enqueue_block_editor_assets', 'wppoland_enqueue_block_assets');9. Solución de problemas del panel de administración
9.1 Pantalla blanca de la muerte en wp-admin
- Desactiva todos los plugins por FTP (renombra la carpeta
/plugins) - Cambia al tema por defecto
- Revisa los registros de errores de PHP
- Aumenta el límite de memoria
9.2 Por qué faltan elementos del menú en el admin
- Revisa las capacidades del rol de usuario
- Conflictos entre plugins
- Código propio que elimina menús
9.3 Por qué el escritorio de WordPress va lento
- Sin caché de objetos persistente
- Demasiados widgets del escritorio que llaman a servicios externos
- Carga de los plugins
- Base de datos sobrecargada
9.4 Por qué no se guardan las opciones de pantalla
Las Opciones de pantalla se guardan por usuario en metadatos de usuario: manage{screen}columnshidden para las columnas de las listas, metaboxhidden_{screen} y closedpostboxes_{screen} para las cajas. Cuando dejan de guardarse, revisa:
- Un plugin o una capa de caché que interfiera con la petición admin-ajax que las guarda
- Una caché de objetos que sirva metadatos de usuario desactualizados
- Conflictos entre plugins
10. Cómo reforzar la seguridad del admin de WordPress
Proteger el escritorio de WordPress es clave para proteger todo el sitio. Estas medidas se suman a las técnicas básicas de refuerzo.
10.1 Autenticación de dos factores (2FA) en wp-admin
La autenticación de dos factores añade una segunda comprobación después de la contraseña. El núcleo de WordPress no incluye 2FA. La opción más acotada es el plugin Two Factor, publicado con la cuenta de WordPress.org y listado en el directorio en la versión 0.17.0 (requiere WordPress 7.0, probado hasta 7.1.3 en el momento de escribir esto). Añade 2FA y nada más, algo que encaja con una configuración sin suites de seguridad todo en uno.
Lo que ofrece, según su página en el directorio:
- App de autenticación (TOTP): códigos de apps como Google Authenticator, Authy o 1Password
- Códigos de respaldo: diez códigos de un solo uso para emergencias
- Códigos por correo: códigos de un solo uso enviados al correo de la cuenta
Cada usuario lo activa en su propio perfil. Los administradores pueden configurarlo para otros usuarios y desactivar métodos en todo el sitio desde los ajustes del plugin, dentro de Ajustes. Pide a cada usuario cliente que genere códigos de respaldo el primer día, porque si no un móvil perdido se convierte en un ticket de soporte. Para el panorama completo, consulta la guía de autenticación multifactor de WordPress.
10.2 Cómo restringir el acceso a wp-admin por IP
Limitar el acceso al admin a direcciones IP concretas impide el acceso no autorizado desde ubicaciones desconocidas. Un bloqueo en PHP tiene que saltarse las peticiones AJAX, porque funciones del sitio público llaman a admin-ajax.php, que también cuenta como admin:
// Restrict wp-admin by IP
function wppoland_restrict_admin_by_ip() {
if (wp_doing_ajax()) {
return;
}
$allowed_ips = ['192.0.2.10', '203.0.113.50'];
$user_ip = $_SERVER['REMOTE_ADDR'] ?? '';
if (!in_array($user_ip, $allowed_ips, true)) {
wp_die(
__('Access denied. Your IP address is not authorized.', 'wppoland'),
__('Access Denied', 'wppoland'),
['response' => 403]
);
}
}
add_action('admin_init', 'wppoland_restrict_admin_by_ip');Detrás de un proxy o una CDN, REMOTE_ADDR contiene la dirección del proxy, así que la comprobación debe leer la dirección que el proxy reenvía, y solo desde proxies de confianza.
Restricción por IP con .htaccess (sintaxis de Apache 2.4, ver la guía de control de acceso de Apache):
# Restrict wp-login.php by IP
<Files wp-login.php>
Require ip 192.0.2.10 203.0.113.50
</Files>Las directivas antiguas Order Deny,Allow pertenecen a Apache 2.2 y en 2.4 solo funcionan a través del módulo de compatibilidad.
10.3 Cómo cambiar la URL de acceso de WordPress
El núcleo no tiene ningún ajuste para una URL de acceso propia. El filtro login_url cambia los enlaces que imprime WordPress, pero wp-login.php sigue respondiendo. Los fragmentos que añaden una regla de reescritura y llaman a flush_rewrite_rules() en cada init son un mal negocio: la referencia de la función dice que vaciar las reglas es una operación costosa que solo debe ejecutarse cuando haga falta. Limita las peticiones a wp-login.php en el servidor y añade 2FA. Eso protege el acceso sin esconderlo.
10.4 Cabeceras de seguridad para wp-admin
El núcleo ya envía tres cabeceras en cada petición al admin: X-Frame-Options: SAMEORIGIN y Content-Security-Policy: frame-ancestors 'self' desde send_frame_options_header(), y Referrer-Policy: strict-origin-when-cross-origin desde wp_admin_headers(). Lo que queda por añadir es poco:
function wppoland_admin_security_headers() {
if (!headers_sent()) {
header('X-Content-Type-Options: nosniff');
}
}
add_action('admin_init', 'wppoland_admin_security_headers');Prescinde de X-XSS-Protection: MDN la marca como no estándar y advierte de que puede crear vulnerabilidades XSS en sitios que por lo demás son seguros. Una Content Security Policy completa para wp-admin necesita unsafe-inline, porque el núcleo imprime scripts en línea, así que allí aporta poco.
11. Cómo acelerar un escritorio de WordPress lento
Un escritorio lento afecta a la productividad y a la experiencia de uso. Estos cambios atacan las causas habituales.
11.1 Cómo aplazar los widgets pesados del escritorio
Los widgets del escritorio que llaman a servicios externos ralentizan la primera pantalla después de iniciar sesión. “Eventos y noticias de WordPress” descarga datos de WordPress.org, y los widgets de plugins suelen consultar sus propias API. La solución es quitarlos:
function wppoland_optimize_dashboard_widgets() {
// Remove WordPress Events and News (makes an external request)
remove_meta_box('dashboard_primary', 'dashboard', 'side');
// Remove Quick Draft (unnecessary for most clients)
remove_meta_box('dashboard_quick_press', 'dashboard', 'side');
// Only load Activity widget for users who need it
if (!current_user_can('edit_posts')) {
remove_meta_box('dashboard_activity', 'dashboard', 'normal');
}
}
add_action('wp_dashboard_setup', 'wppoland_optimize_dashboard_widgets');11.2 Cómo reducir las consultas a la base de datos en el admin
No cambies la consulta principal de las listas del admin: forzar fields => ids o no_found_rows rompe la tabla de entradas y su paginación. La palanca segura es el número de filas por pantalla. Cada usuario lo ajusta en Opciones de pantalla, y un límite para todo el sitio usa el filtro edit_posts_per_page:
add_filter('edit_posts_per_page', function ($per_page, $post_type) {
return min($per_page, 50);
}, 10, 2);11.3 Caché de objetos en el admin de WordPress
define('WP_CACHE', true) no activa la caché de objetos. Le dice a WordPress que cargue el complemento de caché de páginas advanced-cache.php. Una caché de objetos persistente es otro complemento distinto, wp-content/object-cache.php, que aporta un backend de Redis o Memcached; sin él, WP_Object_Cache solo vive durante una petición. Desde WordPress 6.1, Herramientas > Salud del sitio sugiere una caché de objetos persistente cuando el sitio parece lo bastante grande como para notarlo.
11.4 Cómo quitar scripts y estilos innecesarios del admin
Desde WordPress 6.4, los estilos de emoji del admin se cargan con wp_enqueue_emoji_styles en admin_enqueue_scripts. Si el sitio no necesita emojis en el admin:
// Core adds these in wp-admin/includes/admin-filters.php, so remove them on admin_init
add_action('admin_init', function () {
remove_action('admin_print_scripts', 'print_emoji_detection_script');
remove_action('admin_enqueue_scripts', 'wp_enqueue_emoji_styles');
});No elimines del registro manejadores del núcleo como dashboard, media-editor o media-views en todas las pantallas del admin. Hacen funcionar el arrastre de widgets y la ventana de medios, y otras pantallas dependen de ellos.
12. Cómo hacer accesible el admin de WordPress
Una interfaz de administración accesible permite que todos los usuarios gestionen su sitio, sean cuales sean sus capacidades físicas.
12.1 Navegación por teclado en el admin de WordPress
El núcleo ya imprime dos enlaces de salto al principio de cada pantalla del admin, “Saltar al contenido principal” e “Ir a la barra de herramientas”, así que no hace falta añadir los tuyos. Cada usuario puede además activar Atajos de teclado en su perfil, que habilita atajos para moderar comentarios. Las páginas propias del admin deberían mantener el contorno de foco visible que aporta el núcleo en lugar de quitarlo en su CSS.
12.2 Compatibilidad con lectores de pantalla en el admin
Los lectores de pantalla anuncian primero el título de la página, así que un <title> claro ayuda en cada pantalla. El filtro admin_title recibe el título completo y el título de la pantalla:
// Add descriptive titles to pages
function wppoland_admin_title($admin_title, $title) {
return sprintf('%s | %s', $title, esc_html(get_bloginfo('name')));
}
add_filter('admin_title', 'wppoland_admin_title', 10, 2);En las páginas propias del admin, usa elementos <label> reales en los campos de formulario y un único <h1> por pantalla, como hacen las pantallas del núcleo.
12.3 Modo de alto contraste en el admin de WordPress
Asegúrate de que el escritorio funciona con los modos de alto contraste:
// Support forced colors mode
function wppoland_forced_colors_support() {
echo '<style>
@media (forced-colors: active) {
.button, .button-primary, .button-secondary {
border: 2px solid ButtonText;
}
.wp-core-ui .button-primary {
background-color: Mark;
}
.metabox-holder .postbox {
border: 1px solid CanvasText;
}
}
/* Reduced motion preferences */
@media (prefers-reduced-motion: reduce) {
* {
animation-duration: 0.01ms !important;
animation-iteration-count: 1 !important;
transition-duration: 0.01ms !important;
}
}
</style>';
}
add_action('admin_head', 'wppoland_forced_colors_support');13. Panel de administración de red en WordPress multisite
WordPress multisite añade complejidad a la navegación y la gestión del escritorio.
13.1 Diferencia entre la administración de red y la del sitio
En las instalaciones multisite, los superadministradores tienen un Administrador de la red aparte, con su propio menú:
Elementos del menú de administración de la red:
- Escritorio: Resumen de toda la red, con Actualizaciones como submenú
- Sitios: Gestionar todos los sitios de la red
- Usuarios: Gestión de usuarios de toda la red
- Temas: Activación de temas en toda la red
- Plugins: Gestión de plugins en toda la red
- Ajustes: Configuración de la red
Administración de cada sitio: Los administradores de cada sitio solo ven el escritorio de su sitio con los elementos de menú estándar. No pueden instalar plugins ni temas; esas capacidades se quedan en los superadministradores.
13.2 Cómo añadir elementos al menú de administración de la red
Las pantallas de administración de la red tienen su propio hook, network_admin_menu, y la capacidad manage_network limita la página a los superadministradores:
// Add custom network admin menu item
function wppoland_multisite_network_menu() {
add_menu_page(
__('Network Analytics', 'wppoland'),
__('Analytics', 'wppoland'),
'manage_network',
'network-analytics',
'wppoland_network_analytics_page',
'dashicons-chart-bar',
3
);
}
add_action('network_admin_menu', 'wppoland_multisite_network_menu');Los superadministradores ya llegan a la administración de la red desde el menú Mis sitios de la barra de herramientas, así que no hace falta añadir un enlace al menú de cada sitio.
13.3 Widgets del escritorio específicos de cada sitio en multisite
Crea widgets del escritorio específicos de cada sitio en multisite:
// Add site-specific dashboard widget
function wppoland_multisite_site_widget() {
wp_add_dashboard_widget(
'site_info_widget',
sprintf(__('%s Site Information', 'wppoland'), esc_html(get_bloginfo('name'))),
'wppoland_site_widget_content'
);
}
add_action('wp_dashboard_setup', 'wppoland_multisite_site_widget');
function wppoland_site_widget_content() {
$blog_details = get_blog_details(get_current_blog_id());
echo '<table class="widefat striped">';
echo '<tr><th>' . esc_html__('Domain', 'wppoland') . '</th><td>' . esc_html($blog_details->domain . $blog_details->path) . '</td></tr>';
echo '<tr><th>' . esc_html__('Registered', 'wppoland') . '</th><td>' . esc_html($blog_details->registered) . '</td></tr>';
echo '<tr><th>' . esc_html__('Last Updated', 'wppoland') . '</th><td>' . esc_html($blog_details->last_updated) . '</td></tr>';
echo '</table>';
}El campo domain contiene un nombre de host sin esquema, así que se escapa como texto y no como URL.
14. Organizar y documentar el código del panel admin
El código del escritorio repartido por el functions.php de un tema desaparece el día en que el cliente cambia de tema. Guárdalo en un sitio donde sobreviva.
14.1 Dónde guardar el código de personalización del escritorio
Reúne todas las personalizaciones del escritorio en un plugin de uso obligatorio. Los plugins de uso obligatorio se cargan solos y no se pueden desactivar desde la pantalla de plugins, justo lo que necesita el código que protege el panel de un cliente. WordPress solo carga los archivos PHP que están directamente en mu-plugins, así que un archivo cargador incluye el resto:
<?php
/**
* Plugin Name: WPPoland Dashboard Customizer
* Description: Dashboard customization for client sites
* Version: 1.0.0
* Author: WPPoland
* Text Domain: wppoland
*/
// File: wp-content/mu-plugins/wppoland-dashboard-customizer.php
// Prevent direct access
if (!defined('ABSPATH')) exit;
define('WPPOLAND_DASHBOARD_VERSION', '1.0.0');
define('WPPOLAND_DASHBOARD_PATH', __DIR__ . '/wppoland-dashboard/');
// Include customization modules
require_once WPPOLAND_DASHBOARD_PATH . 'cleanup.php';
require_once WPPOLAND_DASHBOARD_PATH . 'customization.php';
require_once WPPOLAND_DASHBOARD_PATH . 'security.php';
require_once WPPOLAND_DASHBOARD_PATH . 'performance.php';14.2 Cómo versionar las personalizaciones del escritorio
Registra todos los cambios del escritorio y prevé un mecanismo de actualización:
// Dashboard customization version tracking
function wppoland_get_dashboard_version() {
return get_option('wppoland_dashboard_version', '1.0.0');
}
function wppoland_update_dashboard_settings() {
$current_version = wppoland_get_dashboard_version();
$plugin_version = WPPOLAND_DASHBOARD_VERSION;
if (version_compare($current_version, $plugin_version, '<')) {
// Run your own update routine here, then store the new version
update_option('wppoland_dashboard_version', $plugin_version);
}
}
add_action('plugins_loaded', 'wppoland_update_dashboard_settings');Mantén el plugin de uso obligatorio en el mismo repositorio Git que el resto del código del sitio, para que cada cambio en el panel del cliente tenga un commit y un motivo.
14.3 Cómo añadir una pestaña de ayuda para clientes en el escritorio
Cada pantalla del admin tiene una pestaña Ayuda junto a Opciones de pantalla. WP_Screen::add_help_tab() añade ahí tu propio contenido. Engancharse a load-index.php limita la pestaña a la pantalla del escritorio:
// Add help tab to the Dashboard screen
function wppoland_add_dashboard_help_tab() {
$screen = get_current_screen();
$screen->add_help_tab([
'id' => 'wppoland_dashboard_help',
'title' => __('Dashboard Guide', 'wppoland'),
'content' => '<h3>' . __('How to Use Your Dashboard', 'wppoland') . '</h3>' .
'<p>' . __('This guide will help you navigate and manage your WordPress site.', 'wppoland') . '</p>' .
'<ul>' .
'<li><a href="edit.php">' . __('Manage Posts', 'wppoland') . '</a></li>' .
'<li><a href="edit.php?post_type=page">' . __('Manage Pages', 'wppoland') . '</a></li>' .
'<li><a href="upload.php">' . __('Media Library', 'wppoland') . '</a></li>' .
'</ul>'
]);
}
add_action('load-index.php', 'wppoland_add_dashboard_help_tab');15. Preguntas frecuentes sobre el escritorio de WordPress para desarrolladores
Cómo restablezco el escritorio por defecto para un usuario Las Opciones de pantalla, el orden de las cajas y las cajas plegadas están en los metadatos de ese usuario, con las claves de la sección 9.4. Bórralas y las pantallas vuelven a sus valores por defecto. Con WP-CLI, wp user meta list <user> muestra las claves y wp user meta delete <user> <key> elimina una. Los cambios para todo el sitio hechos con código solo desaparecen cuando quitas ese código.
Puedo crear páginas de administración completamente propias Sí. add_menu_page() y add_submenu_page() registran una pantalla con tu propia función, como en la sección 6.3. Pon como capacidad la mínima que deba ver la página.
Cómo oculto la barra de administración a ciertos usuarios Cada usuario puede desactivar “Mostrar la barra de herramientas al ver el sitio” en su perfil. Para un rol entero, devuelve false en el filtro show_admin_bar cuando current_user_can() no supere tu comprobación. Solo afecta al sitio público; la barra dentro de wp-admin se mantiene.
Pueden los clientes romper el sitio desde el escritorio Una cuenta de administrador puede: puede editar archivos del tema, instalar plugins y cambiar los enlaces permanentes. Da a los clientes el rol Editor siempre que puedas, define DISALLOW_FILE_EDIT (sección 7.1) y reserva las cuentas de administrador para quien mantiene el sitio.
Qué diferencia hay entre Editor y Autor Un autor publica y gestiona sus propias entradas y sube medios. Un editor gestiona las entradas y páginas de todos, modera comentarios y gestiona categorías. La sección 4.1 indica qué menús ve cada rol.
Cómo recupero contenido borrado por error Las entradas y páginas borradas van primero a la Papelera. WordPress la vacía a los 30 días por defecto, según la constante EMPTY_TRASH_DAYS. Después de eso, el contenido solo vuelve desde una copia de seguridad.
Por qué mi escritorio carga despacio Las causas habituales son widgets del escritorio que llaman a servicios externos, la falta de una caché de objetos persistente y la carga de los plugins. Las secciones 11.1 y 11.3 cubren las dos primeras.
Cómo impido que los clientes instalen sus propios plugins No les des el rol Administrador; en un sitio individual solo los administradores tienen install_plugins. Si una cuenta de administrador es inevitable, DISALLOW_FILE_MODS bloquea instalaciones y actualizaciones desde el escritorio para todos (sección 7.1).
Cómo añado pestañas de ayuda a las páginas del admin Llama a get_current_screen()->add_help_tab() en el hook load- de la pantalla que quieras, como en la sección 14.3.
Puedo personalizar el escritorio por usuario Sí. Cada usuario controla sus propias Opciones de pantalla, el orden de las cajas, el esquema de color y la visibilidad de la barra de herramientas. El código puede ramificarse por get_current_user_id() o, mejor, por una capacidad, para que la configuración siga al rol y no a una persona.
Cómo activo las actualizaciones automáticas de plugins para clientes Desde WordPress 5.5, la pantalla de plugins tiene el enlace “Activar las actualizaciones automáticas” en cada plugin. En código, el filtro auto_update_plugin devuelve true para actualizar todos los plugins o decide plugin por plugin. Ten en cuenta que DISALLOW_FILE_MODS desactiva las actualizaciones automáticas.
Puedo exportar los ajustes del escritorio para usarlos en otros sitios No desde una pantalla del núcleo. La forma fiable es mantener las personalizaciones en el plugin de uso obligatorio de la sección 14.1 y copiar ese plugin a cada sitio.
Cómo gestiono los problemas del escritorio al cambiar de tema El código del functions.php del tema desaparece con el tema, así que el escritorio vuelve a sus valores por defecto tras el cambio. Es el motivo principal para guardar el código del admin en un plugin de uso obligatorio.
Resumen
Un escritorio genérico dice “He instalado un tema.” Un escritorio cuidado dice “He construido una plataforma para tu negocio.” Merece la pena dedicarle el tiempo.
Puntos clave:
- Usa Opciones de pantalla para despejar
- Personaliza por rol de usuario y quita capacidades donde ocultar no basta
- Desactiva los editores de archivos con
DISALLOW_FILE_EDIT - Añade widgets propios que sean útiles
- Mantén una marca coherente
- Guarda el código del admin en un plugin de uso obligatorio bajo control de versiones
- Protege el acceso con 2FA y límites en el servidor
- Arregla los escritorios lentos en su causa: widgets, caché de objetos, filas por página
- Ten en cuenta la accesibilidad
- Planifica multisite si lo necesitas
Actualizado: 16 de octubre de 2026, revisado con WordPress 7.1.3
Explora nuestro desarrollo profesional de WordPress para llevar tu proyecto más lejos.
En el lado de entrega mantenemos este tema bajo GEO y LLMO.







