Personalizzare l’Admin WordPress per i Clienti

Consegni un sito WordPress bellissimo, poi il cliente chiama perché “ha cliccato qualcosa e ora è tutto rotto”. La soluzione? Un admin su misura.

Il Problema: Troppa Complessità

# Cosa vede un Editor in WordPress standard:
- Dashboard con 8 widget
- 15+ voci di menu
- Customizer con 50 opzioni
- Gutenberg con 90+ blocchi
- Avvisi di aggiornamento ovunque

# Cosa gli serve DAVVERO:
- Articoli: scrivi nuovo, modifica esistenti
- Media: carica immagini
- Fine.

# Risultato standard:
- 30% tempo sviluppatore = supporto "come faccio a..."
- Cliente frustrato dalla complessità
- Errori involontari che rompono il sito

1. Rimuovere Menu Non Necessari

// functions.php - Nascondi menu per ruoli non-admin

add_action( 'admin_menu', 'wpb_remove_menus', 999 );
function wpb_remove_menus() {
    if ( current_user_can( 'administrator' ) ) {
        return; // Admin vede tutto
    }
    
    // Rimuovi menu inutili per editor/autori
    remove_menu_page( 'tools.php' );           // Strumenti
    remove_menu_page( 'edit-comments.php' );   // Commenti
    remove_menu_page( 'themes.php' );          // Aspetto
    remove_menu_page( 'plugins.php' );         // Plugin
    remove_menu_page( 'options-general.php' ); // Impostazioni
    
    // Rimuovi sotto-menu specifici
    remove_submenu_page( 'edit.php', 'edit-tags.php?taxonomy=post_tag' );
}

Risultato Visivo

# PRIMA (Editor standard):
□ Dashboard
□ Articoli
□ Media
□ Pagine
□ Commenti      ← non servono
□ Aspetto       ← pericoloso
□ Plugin        ← molto pericoloso
□ Utenti
□ Strumenti     ← non servono
□ Impostazioni  ← pericoloso

# DOPO (Editor semplificato):
□ Dashboard
□ Articoli
□ Media
□ Pagine

2. Dashboard Pulita

// Rimuovi widget dashboard default
add_action( 'wp_dashboard_setup', 'wpb_remove_dashboard_widgets' );
function wpb_remove_dashboard_widgets() {
    if ( current_user_can( 'administrator' ) ) {
        return;
    }
    
    // Rimuovi TUTTO
    remove_meta_box( 'dashboard_quick_press', 'dashboard', 'side' );
    remove_meta_box( 'dashboard_right_now', 'dashboard', 'normal' );
    remove_meta_box( 'dashboard_activity', 'dashboard', 'normal' );
    remove_meta_box( 'dashboard_primary', 'dashboard', 'side' );
    remove_meta_box( 'dashboard_site_health', 'dashboard', 'normal' );
    
    // Rimuovi widget di plugin
    remove_meta_box( 'yoast_db_widget', 'dashboard', 'normal' );
    remove_meta_box( 'wpseo-dashboard-overview', 'dashboard', 'normal' );
}

// Aggiungi widget personalizzato
add_action( 'wp_dashboard_setup', 'wpb_add_custom_dashboard' );
function wpb_add_custom_dashboard() {
    if ( current_user_can( 'administrator' ) ) {
        return;
    }
    
    wp_add_dashboard_widget(
        'wpb_welcome',
        'Benvenuto nel tuo sito',
        'wpb_welcome_widget'
    );
}

function wpb_welcome_widget() {
    echo '

Cosa vuoi fare oggi?

'; echo '

Scrivi un nuovo articolo

'; echo '

Gestisci immagini

'; echo '

Hai bisogno di aiuto? Contattaci

'; }

3. Limitare i Blocchi Gutenberg

// Mostra solo blocchi essenziali
add_filter( 'allowed_block_types_all', 'wpb_allowed_blocks', 10, 2 );
function wpb_allowed_blocks( $allowed, $editor_context ) {
    if ( current_user_can( 'administrator' ) ) {
        return $allowed; // Admin vede tutti
    }
    
    // Solo questi blocchi per editor/autori
    return [
        // Testo
        'core/paragraph',
        'core/heading',
        'core/list',
        'core/quote',
        
        // Media
        'core/image',
        'core/gallery',
        
        // Layout base
        'core/separator',
        'core/spacer',
        
        // Embeds utili
        'core/embed',
        'core/youtube',
    ];
}

// Da ~90 blocchi a ~10 blocchi
// Il cliente non può più "rompere" il layout

4. Nascondere la Admin Bar

// Nascondi admin bar sul frontend per non-admin
add_action( 'after_setup_theme', 'wpb_hide_admin_bar' );
function wpb_hide_admin_bar() {
    if ( ! current_user_can( 'administrator' ) ) {
        show_admin_bar( false );
    }
}

// Semplifica la admin bar nel backend
add_action( 'admin_bar_menu', 'wpb_clean_admin_bar', 999 );
function wpb_clean_admin_bar( $wp_admin_bar ) {
    if ( current_user_can( 'administrator' ) ) {
        return;
    }
    
    // Rimuovi voci inutili
    $wp_admin_bar->remove_node( 'comments' );
    $wp_admin_bar->remove_node( 'new-content' );
    $wp_admin_bar->remove_node( 'wp-logo' );
    $wp_admin_bar->remove_node( 'customize' );
}

5. Messaggi di Benvenuto Personalizzati

// Sostituisci "Howdy" con messaggio personalizzato
add_filter( 'admin_bar_menu', 'wpb_replace_howdy', 25 );
function wpb_replace_howdy( $wp_admin_bar ) {
    $user = wp_get_current_user();
    $avatar = get_avatar( $user->ID, 28 );
    
    $wp_admin_bar->add_node([
        'id'    => 'my-account',
        'title' => $avatar . ' Ciao, ' . $user->display_name,
    ]);
}

// Custom login logo
add_action( 'login_enqueue_scripts', 'wpb_login_logo' );
function wpb_login_logo() {
    echo '';
}

// Login redirect personalizzato
add_filter( 'login_redirect', 'wpb_login_redirect', 10, 3 );
function wpb_login_redirect( $redirect_to, $request, $user ) {
    if ( isset( $user->roles ) && ! in_array( 'administrator', $user->roles ) ) {
        // Editor/Autori vanno direttamente agli articoli
        return admin_url( 'edit.php' );
    }
    return $redirect_to;
}

6. Disabilitare Funzioni Pericolose

// Impedisci modifica codice da admin
define( 'DISALLOW_FILE_EDIT', true );  // wp-config.php

// Blocca aggiornamenti manuali
define( 'DISALLOW_FILE_MODS', true );  // Solo per siti gestiti

// Limita upload per tipo file
add_filter( 'upload_mimes', 'wpb_restrict_mimes' );
function wpb_restrict_mimes( $mimes ) {
    if ( current_user_can( 'administrator' ) ) {
        return $mimes;
    }
    
    // Solo immagini e PDF per editor
    return [
        'jpg|jpeg|jpe' => 'image/jpeg',
        'png'          => 'image/png',
        'webp'         => 'image/webp',
        'pdf'          => 'application/pdf',
    ];
}

7. Plugin per Soluzioni Rapide

# Se preferisci plugin invece di codice custom:

Admin Menu Editor (gratuito)
→ Riordina/nascondi menu con drag & drop

User Role Editor (gratuito)
→ Gestione granulare permessi

White Label CMS (gratuito)
→ Branding completo del backend

Dashboard Welcome (gratuito)
→ Widget benvenuto personalizzato

Risultato Finale

PRIMA della personalizzazione:
- Ticket supporto "come si fa": 4-5/mese
- Errori involontari: 1-2/mese
- Tempo formazione cliente: 2 ore
- Soddisfazione cliente: "WordPress è complicato"

DOPO:
- Ticket supporto: 0-1/mese
- Errori involontari: quasi zero
- Tempo formazione: 15 minuti
- Soddisfazione: "È semplicissimo!"

ROI: 30 minuti di setup = ore risparmiate ogni mese

Vuoi un backend WordPress che i tuoi clienti ameranno usare? Personalizziamo l’admin per ridurre gli errori e le richieste di supporto.