---
title: "Añadir enlaces a la barra de WordPress: guía actual"
description: "Guía actualizada para añadir enlaces y submenús a la barra de herramientas de WordPress con permisos, URLs seguras y código compatible con el panel actual."
url: https://wpdirecto.com/anadir-enlaces-en-la-nueva-barra-de-wordpress-3-3/
date: 2012-02-19
modified: 2026-09-10
author: "David Carrero Fernández-Baillo"
image: https://wpdirecto.com/wp-content/uploads/2026/09/barra-herramientas-wordpress-enlaces.png
categories: ["Desarrollo"]
tags: ["enlaces", "functions.php", "menú"]
type: post
lang: es
---

# Añadir enlaces a la barra de WordPress: guía actual

**La barra de herramientas de WordPress se puede ampliar con enlaces propios, menús y submenús**. La forma recomendada es usar el hook `admin_bar_menu` y el objeto `WP_Admin_Bar`, no editar archivos del núcleo ni añadir HTML directamente a la plantilla.

El artículo original se publicó para WordPress 3.3. La barra sigue existiendo, pero el código necesita algunos ajustes para una instalación actual: identificadores únicos, permisos, URLs generadas por WordPress y una ubicación adecuada para el snippet.

## Antes de empezar

- Haz una copia de seguridad o prueba el cambio en staging.
- Usa un tema hijo o un plugin propio para no perder el código al cambiar de tema.
- Comprueba que el usuario tiene permiso para ver el enlace.
- Utiliza URLs generadas por WordPress cuando apunten al panel o a contenido del sitio.

La barra solo aparece para usuarios que han iniciado sesión y tienen activada esa opción en su perfil o en la configuración del sitio. Un visitante anónimo no verá estos enlaces.

## Añadir un enlace principal

El hook [`admin_bar_menu`](https://developer.wordpress.org/reference/hooks/admin_bar_menu/) recibe una instancia de `WP_Admin_Bar`. Con su método `add_node()` puedes crear un elemento nuevo:

`/**
* Añade un enlace a la barra de herramientas.
*
* @param WP_Admin_Bar $wp_admin_bar Barra de herramientas.
*/
function mi_toolbar_enlace( $wp_admin_bar ) {
if ( ! current_user_can( 'manage_options' ) ) {
return;
}

$wp_admin_bar->add_node(
array(
'id' => 'mi-enlace-ajustes',
'title' => __( 'Ajustes de mi sitio', 'mi-textdomain' ),
'href' => esc_url( admin_url( 'options-general.php' ) ),
'meta' => array(
'title' => __( 'Abrir los ajustes de WordPress', 'mi-textdomain' ),
),
)
);
}
add_action( 'admin_bar_menu', 'mi_toolbar_enlace', 100 );`Lenguaje del código: PHP (php)

El primer parámetro de `add_node()` es una matriz con los datos del enlace. El `id` debe ser único, `title` es el texto visible y `href` contiene la dirección de destino. La prioridad `100` determina cuándo se añade respecto a otros elementos.

En el ejemplo se usa `manage_options` porque el destino son los ajustes generales. La función [`current_user_can()`](https://developer.wordpress.org/reference/functions/current_user_can/) comprueba capacidades, no nombres de roles. Eso permite que el código respete los permisos reales del usuario y funcione mejor en instalaciones con roles personalizados.

## Colgar el enlace dentro de un menú existente

Si no quieres crear un elemento principal, indica el identificador del nodo padre con `parent`. Este ejemplo añade un enlace a la biblioteca multimedia dentro del menú del sitio:

`function mi_toolbar_biblioteca( $wp_admin_bar ) {
if ( ! current_user_can( 'upload_files' ) ) {
return;
}

$wp_admin_bar->add_node(
array(
'id' => 'mi-biblioteca',
'parent' => 'site-name',
'title' => __( 'Biblioteca multimedia', 'mi-textdomain' ),
'href' => esc_url( admin_url( 'upload.php' ) ),
)
);
}
add_action( 'admin_bar_menu', 'mi_toolbar_biblioteca', 110 );`Lenguaje del código: PHP (php)

`site-name` es el identificador habitual del menú con el nombre del sitio. El [`método add_node()`](https://developer.wordpress.org/reference/classes/wp_admin_bar/add_node/) acepta también `parent`, `group` y distintos datos en `meta`, como el título emergente, la clase CSS o el destino del enlace.

## Crear un menú con varios submenús

Para reunir varios accesos, crea primero el nodo principal y después añade cada hijo utilizando el mismo valor en `parent`:

`function mi_toolbar_herramientas( $wp_admin_bar ) {
if ( ! current_user_can( 'edit_posts' ) ) {
return;
}

$wp_admin_bar->add_node(
array(
'id' => 'mi-herramientas',
'title' => __( 'Herramientas rápidas', 'mi-textdomain' ),
'href' => false,
)
);

$wp_admin_bar->add_node(
array(
'id' => 'mi-nueva-entrada',
'parent' => 'mi-herramientas',
'title' => __( 'Nueva entrada', 'mi-textdomain' ),
'href' => esc_url( admin_url( 'post-new.php' ) ),
)
);

$wp_admin_bar->add_node(
array(
'id' => 'mi-medios',
'parent' => 'mi-herramientas',
'title' => __( 'Medios', 'mi-textdomain' ),
'href' => esc_url( admin_url( 'upload.php' ) ),
)
);
}
add_action( 'admin_bar_menu', 'mi_toolbar_herramientas', 100 );`Lenguaje del código: PHP (php)

Un menú sin destino puede llevar `'href' => false`. Si prefieres que el título principal abra una página, utiliza una URL y conserva los submenús para los accesos secundarios.

## Enlaces externos y atributos del enlace

Para enlazar a una herramienta externa puedes usar una URL completa y añadir atributos dentro de `meta`:

`$wp_admin_bar->add_node(
array(
'id' => 'mi-documentacion',
'title' => __( 'Documentación externa', 'mi-textdomain' ),
'href' => 'https://developer.wordpress.org/',
'meta' => array(
'target' => '_blank',
'rel' => 'noopener noreferrer',
'title' => __( 'Abrir la documentación', 'mi-textdomain' ),
),
)
);`Lenguaje del código: PHP (php)

Abre una pestaña nueva solo cuando aporte algo. Para enlaces internos suele ser mejor mantener la navegación en la misma pestaña. Si el texto depende del idioma del sitio, pásalo por `__()` o `_e()` con un text domain propio.

## Mostrar el menú solo donde hace falta

Puedes limitar el enlace al escritorio de administración o a la parte pública. Si lo necesitas solo en `wp-admin`, añade una comprobación:

`function mi_toolbar_solo_admin( $wp_admin_bar ) {
if ( ! is_admin() || ! current_user_can( 'manage_options' ) ) {
return;
}

$wp_admin_bar->add_node(
array(
'id' => 'mi-panel-interno',
'title' => __( 'Panel interno', 'mi-textdomain' ),
'href' => esc_url( admin_url( 'admin.php?page=mi-panel' ) ),
)
);
}
add_action( 'admin_bar_menu', 'mi_toolbar_solo_admin', 100 );`Lenguaje del código: PHP (php)

En una página pública puedes usar etiquetas condicionales como `is_page()`, `is_singular()` o `is_post_type_archive()`. Comprueba el contexto antes de cargar el enlace y evita que un usuario vea un acceso que luego no puede utilizar.

## Modificar o quitar un elemento existente

El mismo sistema sirve para cambiar un nodo existente. Si reutilizas su `id` y pasas nuevos valores, WordPress actualiza esos datos. Para eliminarlo puedes usar `remove_node()` durante el hook `wp_before_admin_bar_render`:

`function quitar_enlace_de_la_barra( $wp_admin_bar ) {
if ( ! current_user_can( 'manage_options' ) ) {
$wp_admin_bar->remove_node( 'wp-logo' );
}
}
add_action( 'wp_before_admin_bar_render', 'quitar_enlace_de_la_barra' );`Lenguaje del código: PHP (php)

Usa esta técnica con cuidado. Quitar el logo de WordPress o enlaces estándar puede complicar el trabajo de otros administradores y no mejora la seguridad por sí mismo. Si el objetivo es reducir accesos, aplica una política de permisos coherente en todo el sitio.

## Dónde guardar el código

- **Tema hijo:** válido si el enlace forma parte de la presentación de ese tema.
- **Plugin propio:** preferible cuando la función debe seguir activa aunque cambies de tema.
- **Plugin de snippets:** cómodo para una prueba, siempre que revises quién puede editar esos fragmentos.

No edites el tema padre ni los archivos de `/wp-admin/` o `/wp-includes/`. Las actualizaciones pueden sobrescribir esos cambios y los archivos del núcleo no son el lugar adecuado para personalizaciones. Puedes consultar nuestra guía sobre [los ficheros de WordPress y cómo comprobarlos](https://wpdirecto.com/lista-completa-de-ficheros-por-defecto-de-wordpress/) si estás revisando una instalación antigua.

## Errores frecuentes

- Usar un `id` repetido y sobrescribir otro elemento sin querer.
- Mostrar enlaces de administración a usuarios que no tienen capacidad para abrirlos.
- Usar un rol como comprobación en lugar de `current_user_can()`.
- Escribir URLs del panel a mano en lugar de utilizar `admin_url()`.
- Colocar el código en el tema padre y perderlo con una actualización.
- Probar cambios en producción sin tener una forma de volver atrás.

La barra de herramientas es un menú compartido por WordPress, el tema y los plugins. Mantén los títulos cortos, evita llenarla de accesos que apenas uses y comprueba el resultado con cada perfil que deba verla.

## Fuentes oficiales

La información se ha revisado con la documentación de WordPress sobre el hook [`admin_bar_menu`](https://developer.wordpress.org/reference/hooks/admin_bar_menu/), el método [`WP_Admin_Bar::add_node()`](https://developer.wordpress.org/reference/classes/wp_admin_bar/add_node/) y la función [`current_user_can()`](https://developer.wordpress.org/reference/functions/current_user_can/).
