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 '';
echo '';
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.