Ves al contingut principal

add_menu_page, add_submenu_page

El add_menu_page() és la funció fonamental de WordPress per afegir un nou element de menú de primer nivell (o menú pare) al panell d'administració. Aquesta funció connecta un títol, una icona i una funció de PHP amb un lloc concret del menú lateral.

Sintaxis add_menu_page()

La funció accepta set paràmetres, tots ells essencials per definir el nou menú:

PHP

add_menu_page( 
    $page_title, 
    $menu_title, 
    $capability, 
    $menu_slug, 
    $callback, 
    $icon_url, 
    $position 
);

Paràmetre Tipus Descripció Exemple
$page_title string El títol que apareix a la pestanya del navegador quan la pàgina està oberta. 'Configuració del meu Plugin'
$menu_title string El text que es mostra al menú lateral d'administració. 'El meu Plugin'
$capability string El permís d'usuari mínim necessari per veure i accedir a aquest menú (rols). 'manage_options' (per a Administradors)
$menu_slug string El nom únic que s'utilitza per identificar la pàgina a la URL. És crucial i ha de ser únic. 'el-meu-plugin-config'
$callback callable La funció de PHP que conté l'HTML per mostrar el contingut real de la pàgina. 'la_meva_funcio_de_contingut'
$icon_url string La URL de la icona a mostrar, o una icona de les Dashicons de WordPress. 'dashicons-admin-generic'
$position integer Un número per controlar la posició on apareixerà el menú a la barra lateral. 60

$capability (Permisos)

Aquest paràmetre és de seguretat. Defineix qui pot veure el menú. Has d'especificar una de les capacitats de WordPress.

  • read: Qualsevol usuari amb sessió iniciada.

  • edit_posts: Usuaris que poden editar publicacions (Editors, Administradors).

  • manage_options: Només Administradors (el més comú per a les opcions de configuració del plugin).

$menu_slug (Identificador únic)

Aquest slug es converteix en una part de l'URL de la vostra pàgina:

wp-admin/admin.php?page=**el-meu-plugin-config**

  • Importància: Si dos plugins intenten utilitzar el mateix slug, només un podrà registrar el menú. Sempre utilitza un prefix únic per al teu plugin (Ex: bp-configuracio).

$callback (Funció de contingut)

Aquesta funció és el cor de la teva pàgina d'administració. Quan l'usuari clica al menú, WordPress executa aquesta funció i la sortida (l'HTML, el formulari, etc.) és el que es mostra a la pantalla.

$icon_url (Icona)

Hi ha tres opcions per definir la icona:

  • Dashicons (Recomanat): Utilitza el nom de classe CSS de qualsevol de les icones internes de WordPress (Ex: dashicons-admin-settings, dashicons-star-filled).

  • URL d'Imatge: Proporciona la URL completa d'un fitxer d'imatge (hauria de ser de 20x20 píxels).

  • Base64: Proporciona el codi Base64 d'una imatge.

$position (Posició)

Aquest número controla on apareixerà l'element de menú a la barra lateral, permetent-te ordenar-lo respecte als menús natius de WordPress:

Posició Menú Natiu
5 Sota Publicacions
10 Sota Mitjans
20 Sota Pàgines
60 Sota Apariència
70 Sota Plugins
80 Sota Usuaris
100 Sota Eines
110 Sota Configuració

Si utilitzes un número ja ocupat, el teu menú es col·locarà just sota l'element natiu corresponent. Per exemple, usar 60 el posarà just a sota d'Apariència.

Exemple

Així és com utilitzaries l'acció admin_menu per registrar el teu menú:

PHP

function el_meu_plugin_registrar_menu() {
    add_menu_page(
        'Títol de la Pestanya',       // $page_title
        'El Meu Menú',                // $menu_title
        'manage_options',             // $capability (Només Administradors)
        'plugin-propi-slug',          // $menu_slug
        'la_meva_funcio_de_contingut', // $callback (Funció que mostrarà l'HTML)
        'dashicons-star-filled',      // $icon_url
        51                            // $position (Just sota 'Publicacions', que és 5)
    );
}
// Enganxar la funció a l'acció admin_menu
add_action( 'admin_menu', 'el_meu_plugin_registrar_menu' );

// La funció que genera l'HTML de la pàgina
function la_meva_funcio_de_contingut() {
    echo '<div class="wrap"><h1>Benvingut al meu Plugin!</h1></div>';
}

Sintaxis add_submenu_page()

El add_submenu_page() és la funció de WordPress que s'utilitza per crear un element de menú fill o submenú dins d'un menú de primer nivell ja existent al panell d'administració. Això és perfecte per organitzar les opcions del teu plugin, ja sigui sota un menú natiu de WordPress (com ara Eines o Configuració) o sota un menú pare que hagis creat tu mateix amb add_menu_page().

Aquesta funció requereix vuit paràmetres, amb l'addició crucial del slug del menú pare:

PHP

add_submenu_page( 
    $parent_slug, 
    $page_title, 
    $menu_title, 
    $capability, 
    $menu_slug, 
    $callback, 
    $position 
);

Paràmetre Tipus Descripció Exemple
$parent_slug string Crucial: El slug (identificador únic) del menú pare on s'ha d'adjuntar aquest submenú. 'bp-configuracio' (el slug del teu menú pare)
$page_title string El títol que apareix a la pestanya del navegador. 'Importar Dades del Banner'
$menu_title string El text que es mostra com a enllaç al menú desplegable. 'Importar / Exportar'
$capability string El permís d'usuari mínim necessari per veure el submenú. 'install_plugins'
$menu_slug string El nom únic per a aquest submenú, que esdevé la URL. Ha de ser diferent de $parent_slug. 'bp-import-export'
$callback callable La funció de PHP que conté l'HTML que es mostrarà a la pàgina del submenú. 'bp_pagina_importacio'
$position integer (Opcional) La posició relativa del submenú dins del menú desplegable. 1 (el primer submenú)

Exemple

Si el teu menú principal es diu bp-configuracio (creat amb add_menu_page), així és com li afegiries un submenú d'importació:

PHP

// Funció que s'executa amb el hook 'admin_menu'
function bp_afegir_submenus() {

    // 1. REGISTRAR UN SUBMENÚ SOTA UN MENÚ PROPI
    add_submenu_page(
        'bp-configuracio',          // $parent_slug: El menú pare que hem creat
        'Importar Configuració',    // $page_title
        'Importar / Exportar',      // $menu_title
        'manage_options',           // $capability
        'bp-importar-exportar',     // $menu_slug: Únic per a la nova pàgina
        'bp_pagina_importacio'      // $callback
    );

    // 2. REGISTRAR UN SUBMENÚ SOTA UN MENÚ NADIU DE WORDPRESS (EXEMPLE: EINES)
    add_submenu_page(
        'tools.php',                // $parent_slug: El slug del menú natiu Eines
        'Eina de Neteja del Banner',
        'Neteja Banner',
        'manage_options',
        'bp-eina-neteja',
        'bp_pagina_eina_neteja'
    );
}
add_action( 'admin_menu', 'bp_afegir_submenus' );

// Funció que mostra el contingut de la pàgina d'importació
function bp_pagina_importacio() {
    echo '<div class="wrap"><h1>Pàgina d\'Importació</h1><p>Aquí anirà el formulari d\'importació de dades.</p></div>';
}

Slugs dels menús natius:

Per adjuntar submenús a les seccions existents de WordPress, utilitza els seus slugs de fitxer (o URL):

Menú Pare Natiu $parent_slug a usar
Publicacions edit.php
Pàgines edit.php?post_type=page
Configuració options-general.php
Eines tools.php
El meu menú personalitzat el-meu-slug-unic (el que vas definir a add_menu_page)

Aquesta tècnica manté la interfície d'administració organitzada i evita sobrecarregar la barra lateral amb massa entrades de primer nivell.