{"id":167189,"date":"2025-07-21T09:00:00","date_gmt":"2025-07-21T09:00:00","guid":{"rendered":"https:\/\/gtechgroup.it\/blog\/classic-editor-personalizzare-php-filtri\/"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T22:00:00","slug":"classic-editor-personalizzare-php-filtri","status":"publish","type":"post","link":"https:\/\/gtechgroup.it\/blog\/classic-editor-personalizzare-php-filtri\/","title":{"rendered":"Personalizzare Classic Editor con Funzioni PHP e Filtri"},"content":{"rendered":"<h2>Personalizzare Classic Editor con Funzioni PHP e Filtri<\/h2>\n<p>Classic Editor, grazie alla sua architettura basata su TinyMCE e alle numerose API di WordPress, offre un livello di personalizzazione profondo tramite codice PHP. Sviluppatori e amministratori avanzati possono modificare praticamente ogni aspetto dell&#8217;editor: dalla barra degli strumenti al comportamento dei contenuti, dalle opzioni di incolla alle dimensioni dell&#8217;area di testo. In questa guida tecnica esploreremo i filtri PHP pi&#249; importanti per personalizzare Classic Editor, con esempi pratici pronti per l&#8217;uso nel tuo progetto.<\/p>\n<h2>Dove Inserire il Codice<\/h2>\n<p>Prima di addentrarci nei filtri e nelle funzioni, &#232; importante stabilire dove posizionare il codice di personalizzazione. Hai due opzioni principali:<\/p>\n<p><strong>Plugin personalizzato<\/strong> (consigliato): crea un plugin custom dedicato alle personalizzazioni dell&#8217;editor. Questo approccio &#232; il pi&#249; robusto perch&#233; le tue modifiche sopravvivranno al cambio di tema. Crea un file PHP nella directory <code>wp-content\/plugins\/<\/code> con l&#8217;header standard del plugin e inserisci il tuo codice al suo interno.<\/p>\n<p><strong>File functions.php del tema<\/strong>: se le personalizzazioni sono strettamente legate al tema attivo, puoi inserirle nel <code>functions.php<\/code>. Ricorda per&#242; che queste modifiche andranno perse se cambi tema. Se usi un tema figlio (child theme), inserisci il codice nel <code>functions.php<\/code> del tema figlio per proteggerlo dagli aggiornamenti del tema padre.<\/p>\n<pre><code>&lt;?php\n\/**\n * Plugin Name: Custom Classic Editor\n * Description: Personalizzazioni per Classic Editor\n * Version: 1.0\n * Author: G Tech Group\n *\/\n\n\/\/ Il codice di personalizzazione va qui<\/code><\/pre>\n<h2>Il Filtro tiny_mce_before_init<\/h2>\n<p>Il filtro <code>tiny_mce_before_init<\/code> &#232; il pi&#249; potente e versatile per la personalizzazione di TinyMCE. Viene eseguito prima dell&#8217;inizializzazione dell&#8217;editor e riceve un array associativo con tutte le opzioni di configurazione. Modificando questo array, puoi controllare praticamente ogni aspetto del comportamento dell&#8217;editor.<\/p>\n<pre><code>function custom_tinymce_settings($init) {\n    \/\/ Imposta l&#8217;altezza dell&#8217;editor a 500px\n    $init[height] = 500;\n\n    \/\/ Abilita il ridimensionamento verticale dell&#8217;editor\n    $init[resize] = true;\n\n    \/\/ Imposta il formato di incolla\n    $init[paste_as_text] = true;\n\n    \/\/ Abilita il conteggio parole\n    $init[wordcount] = true;\n\n    \/\/ Imposta la dimensione font predefinita\n    $init[fontsize_formats] = 10px 12px 14px 16px 18px 20px 24px 28px 32px 36px;\n\n    return $init;\n}\nadd_filter(tiny_mce_before_init, custom_tinymce_settings);<\/code><\/pre>\n<p>Questo filtro ti permette di configurare decine di opzioni. Tra le pi&#249; utili: <code>block_formats<\/code> per personalizzare i formati di blocco disponibili nel selettore (Paragrafo, Titolo 1, ecc.), <code>toolbar1<\/code> e <code>toolbar2<\/code> per definire la composizione delle righe della toolbar, <code>content_css<\/code> per caricare fogli di stile personalizzati nell&#8217;editor, e <code>valid_elements<\/code> per controllare quali tag HTML sono permessi.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/gtechgroup.it\/blog\/wp-content\/uploads\/2026\/05\/ce-02-editor.png\" alt=\"Classic Editor personalizzato con filtri PHP\" \/><\/p>\n<h2>Personalizzare i Formati di Blocco<\/h2>\n<p>Il selettore dei formati di blocco (il dropdown che mostra &#8220;Paragrafo&#8221;, &#8220;Titolo 1&#8221;, ecc.) pu&#242; essere personalizzato per includere o escludere specifici formati. Ad esempio, potresti voler rimuovere &#8220;Preformattato&#8221; e &#8220;Indirizzo&#8221; se non vengono mai utilizzati, semplificando l&#8217;interfaccia:<\/p>\n<pre><code>function custom_block_formats($init) {\n    $init[block_formats] = Paragrafo=p;Titolo 2=h2;Titolo 3=h3;Titolo 4=h4;Citazione=blockquote;\n    return $init;\n}\nadd_filter(tiny_mce_before_init, custom_block_formats);<\/code><\/pre>\n<p>Nota che abbiamo rimosso Titolo 1 (H1) dall&#8217;elenco. Questa &#232; una best practice SEO: il tag H1 dovrebbe essere riservato al titolo dell&#8217;articolo (che WordPress genera automaticamente) e non dovrebbe essere utilizzato nel corpo del contenuto. Rimuovendolo dal selettore, previeni errori SEO da parte degli autori.<\/p>\n<h2>Stili Personalizzati nell&#8217;Editor<\/h2>\n<p>Puoi aggiungere un selettore di stili personalizzati che applica classi CSS predefinite al testo selezionato. Questo &#232; particolarmente utile per creare elementi stilizzati riutilizzabili come box informativi, testo evidenziato, pulsanti e avvisi:<\/p>\n<pre><code>function custom_style_formats($init) {\n    $style_formats = array(\n        array(\n            title   =&gt; Box Informativo,\n            block   =&gt; div,\n            classes =&gt; info-box,\n            wrapper =&gt; true\n        ),\n        array(\n            title   =&gt; Testo Evidenziato,\n            inline  =&gt; span,\n            classes =&gt; highlight\n        ),\n        array(\n            title   =&gt; Pulsante CTA,\n            inline  =&gt; a,\n            classes =&gt; btn btn-primary\n        ),\n        array(\n            title   =&gt; Nota Tecnica,\n            block   =&gt; aside,\n            classes =&gt; technical-note,\n            wrapper =&gt; true\n        ),\n        array(\n            title   =&gt; Codice Inline,\n            inline  =&gt; code,\n            classes =&gt; inline-code\n        )\n    );\n\n    $init[style_formats] = json_encode($style_formats);\n    return $init;\n}\nadd_filter(tiny_mce_before_init, custom_style_formats);<\/code><\/pre>\n<p>Per vedere l&#8217;anteprima di questi stili nell&#8217;editor, devi caricare un foglio di stile dedicato con <code>add_editor_style()<\/code>. Questo foglio di stile dovrebbe contenere le regole CSS per le classi che hai definito nei formati personalizzati.<\/p>\n<h2>Il Filtro mce_css<\/h2>\n<p>Il filtro <code>mce_css<\/code> controlla i fogli di stile CSS caricati all&#8217;interno dell&#8217;editor TinyMCE. Puoi usarlo per aggiungere CSS personalizzati che rendono l&#8217;editor visivamente simile al front-end del tuo sito:<\/p>\n<pre><code>function custom_editor_css($mce_css) {\n    if (!empty($mce_css)) {\n        $mce_css .= ,;\n    }\n    $mce_css .= plugins_url(css\/editor-custom.css, __FILE__);\n    return $mce_css;\n}\nadd_filter(mce_css, custom_editor_css);<\/code><\/pre>\n<p>Nel file <code>editor-custom.css<\/code>, definisci le regole CSS per allineare l&#8217;aspetto dell&#8217;editor al design del tuo sito. Ad esempio, puoi impostare la stessa famiglia di font, le stesse dimensioni del testo, gli stessi colori dei link e gli stessi stili per titoli e paragrafi. Questo offre agli autori un&#8217;anteprima accurata del risultato finale mentre scrivono.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/gtechgroup.it\/blog\/wp-content\/uploads\/2026\/05\/ce-01-settings.png\" alt=\"Impostazioni PHP per Classic Editor\" \/><\/p>\n<h2>Controllare gli Elementi HTML Consentiti<\/h2>\n<p>TinyMCE ha un sistema di filtraggio che controlla quali elementi HTML e attributi sono consentiti nel contenuto. L&#8217;opzione <code>valid_elements<\/code> definisce la whitelist degli elementi permessi. Per impostazione predefinita, WordPress configura una lista ragionevolmente permissiva, ma puoi restringerla o espanderla secondo le tue esigenze.<\/p>\n<p>L&#8217;opzione <code>extended_valid_elements<\/code> &#232; pi&#249; pratica perch&#233; aggiunge elementi alla configurazione predefinita senza sovrascriverla:<\/p>\n<pre><code>function extend_valid_elements($init) {\n    $custom_elements = span[id|class|style|data-*],\n        . div[id|class|style|data-*|role],\n        . iframe[src|width|height|frameborder|allowfullscreen|loading],\n        . script[src|type|async|defer];\n\n    if (isset($init[extended_valid_elements])) {\n        $init[extended_valid_elements] .= , . $custom_elements;\n    } else {\n        $init[extended_valid_elements] = $custom_elements;\n    }\n    return $init;\n}\nadd_filter(tiny_mce_before_init, extend_valid_elements);<\/code><\/pre>\n<p>Attenzione: consentire elementi come <code>script<\/code> e <code>iframe<\/code> introduce potenziali rischi di sicurezza. Abilita questi elementi solo se gli utenti che editano i contenuti sono affidabili (amministratori e redattori di fiducia). Per siti con molti autori esterni, &#232; meglio mantenere restrizioni pi&#249; strette.<\/p>\n<h2>Filtri Specifici di Classic Editor<\/h2>\n<p>Classic Editor fornisce anche filtri specifici del plugin che permettono un controllo aggiuntivo:<\/p>\n<p><code>classic_editor_enabled_editors_for_post<\/code>: permette di decidere quale editor usare per un singolo post basandosi su qualsiasi criterio (ID del post, meta dato, autore, ecc.). Utile per forzare un editor specifico per contenuti particolari.<\/p>\n<p><code>classic_editor_enabled_editors_for_post_type<\/code>: controlla quali editor sono disponibili per ciascun post type. Puoi disabilitare Gutenberg completamente per alcuni post type e lasciarlo attivo per altri.<\/p>\n<p><code>classic_editor_plugin_settings<\/code>: permette di modificare le impostazioni del plugin programmaticamente, utile per configurazioni multi-sito o ambienti dove le impostazioni devono essere forzate dal codice.<\/p>\n<pre><code>function force_classic_for_products($editors, $post_type) {\n    if ($post_type === product) {\n        $editors[block_editor] = false;\n        $editors[classic_editor] = true;\n    }\n    return $editors;\n}\nadd_filter(classic_editor_enabled_editors_for_post_type,\n    force_classic_for_products, 10, 2);<\/code><\/pre>\n<h2>Personalizzare il Comportamento dell&#8217;Incolla<\/h2>\n<p>Il comportamento dell&#8217;incolla &#232; un aspetto cruciale dell&#8217;esperienza di editing. Quando un utente incolla testo da un documento Word o da una pagina web, TinyMCE deve decidere quanto della formattazione originale mantenere. Puoi controllare questo comportamento con diverse opzioni:<\/p>\n<pre><code>function custom_paste_settings($init) {\n    \/\/ Rimuovi la formattazione di Word all&#8217;incolla\n    $init[paste_remove_styles] = true;\n    $init[paste_remove_spans] = true;\n    $init[paste_strip_class_attributes] = all;\n\n    \/\/ Converti automaticamente gli URL incollati in link\n    $init[paste_convert_word_fake_lists] = true;\n\n    return $init;\n}\nadd_filter(tiny_mce_before_init, custom_paste_settings);<\/code><\/pre>\n<p>Queste impostazioni sono particolarmente importanti per siti con molti autori che copiano contenuti da fonti esterne. Senza un filtro appropriato, il testo incollato da Word pu&#242; portarsi dietro centinaia di righe di stili inline e classi CSS proprietarie di Microsoft che inquinano il codice HTML del sito.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/gtechgroup.it\/blog\/wp-content\/uploads\/2026\/05\/ce-03-plugins.png\" alt=\"Plugin personalizzato per Classic Editor\" \/><\/p>\n<h2>Aggiungere Plugin TinyMCE Personalizzati<\/h2>\n<p>TinyMCE ha un&#8217;architettura a plugin che permette di estendere le sue funzionalit&#224; con moduli JavaScript personalizzati. Il filtro <code>mce_external_plugins<\/code> permette di registrare plugin TinyMCE aggiuntivi:<\/p>\n<pre><code>function register_tinymce_plugins($plugins) {\n    \/\/ Aggiungi il plugin per tabelle\n    $plugins[table] = plugins_url(js\/tinymce\/table\/plugin.min.js, __FILE__);\n    \/\/ Aggiungi un plugin personalizzato\n    $plugins[custom_templates] = plugins_url(js\/tinymce\/custom-templates.js, __FILE__);\n    return $plugins;\n}\nadd_filter(mce_external_plugins, register_tinymce_plugins);<\/code><\/pre>\n<p>Ogni plugin TinyMCE registrato pu&#242; aggiungere pulsanti alla toolbar, menu contestuali, dialog personalizzati e funzionalit&#224; di elaborazione del contenuto. La creazione di plugin TinyMCE richiede conoscenze di JavaScript e della API TinyMCE, ma offre possibilit&#224; di personalizzazione praticamente illimitate.<\/p>\n<h2>Modificare l&#8217;Editor per Ruolo Utente<\/h2>\n<p>Una personalizzazione avanzata molto utile &#232; la differenziazione dell&#8217;editor in base al ruolo dell&#8217;utente. Puoi mostrare toolbar diverse, abilitare o disabilitare funzionalit&#224; e applicare restrizioni specifiche per ogni ruolo:<\/p>\n<pre><code>function role_based_editor_config($init) {\n    $user = wp_get_current_user();\n\n    if (in_array(contributor, $user-&gt;roles)) {\n        \/\/ I collaboratori vedono solo formattazione base\n        $init[toolbar1] = bold,italic,bullist,numlist,link,unlink;\n        $init[toolbar2] = ;\n        $init[block_formats] = Paragrafo=p;Titolo 2=h2;Titolo 3=h3;\n    } elseif (in_array(author, $user-&gt;roles)) {\n        \/\/ Gli autori hanno pi&#249; opzioni\n        $init[toolbar1] = formatselect,bold,italic,bullist,numlist,blockquote,link,unlink,wp_more;\n        $init[toolbar2] = strikethrough,hr,forecolor,pastetext,removeformat,charmap,wp_adv;\n    }\n    \/\/ Gli amministratori e gli editor mantengono la configurazione completa\n\n    return $init;\n}\nadd_filter(tiny_mce_before_init, role_based_editor_config);<\/code><\/pre>\n<h2>Conclusioni<\/h2>\n<p>La personalizzazione di Classic Editor tramite filtri PHP offre un livello di controllo che pochi altri editor WYSIWYG possono eguagliare. Dalla configurazione della toolbar alla gestione dei contenuti HTML, dalla personalizzazione degli stili al controllo del comportamento per ruolo utente, le possibilit&#224; sono vastissime. La chiave &#232; identificare le personalizzazioni che hanno un impatto reale sulla produttivit&#224; del tuo team e implementarle in modo pulito e manutenibile.<\/p>\n<p>Ricorda sempre di testare le personalizzazioni in un ambiente di staging prima di applicarle al sito in produzione, e di documentare ogni modifica per facilitare la manutenzione futura.<\/p>\n<div style=\"background:#f0f7ff;border:1px solid #2271b1;border-radius:8px;padding:20px;margin:30px 0;\">\n<h3 style=\"margin-top:0;color:#2271b1;\">Leggi anche gli altri articoli della serie Classic Editor<\/h3>\n<ul>\n<li><a href=\"https:\/\/gtechgroup.it\/blog\/installare-attivare-classic-editor-wordpress\/\">Come Installare e Attivare Classic Editor su WordPress<\/a><\/li>\n<li><a href=\"https:\/\/gtechgroup.it\/blog\/classic-editor-vs-gutenberg-differenze-2026\/\">Classic Editor vs Gutenberg: Differenze e Quale Scegliere nel 2026<\/a><\/li>\n<li><a href=\"https:\/\/gtechgroup.it\/blog\/classic-editor-configurare-impostazioni-predefinito\/\">Configurare Classic Editor: Impostazioni per Editor Predefinito e Utenti<\/a><\/li>\n<li><a href=\"https:\/\/gtechgroup.it\/blog\/classic-editor-tinymce-personalizzare-barra\/\">Classic Editor e TinyMCE: Personalizzare la Barra degli Strumenti<\/a><\/li>\n<li><a href=\"https:\/\/gtechgroup.it\/blog\/classic-editor-pulsanti-custom-tinymce-advanced\/\">Aggiungere Pulsanti Custom a Classic Editor con TinyMCE Advanced<\/a><\/li>\n<li><a href=\"https:\/\/gtechgroup.it\/blog\/classic-editor-shortcode-contenuti-dinamici\/\">Classic Editor e i Shortcode: Inserire Contenuti Dinamici<\/a><\/li>\n<li><a href=\"https:\/\/gtechgroup.it\/blog\/classic-editor-elementor-insieme-senza-conflitti\/\">Classic Editor e Elementor: Usarli Insieme Senza Conflitti<\/a><\/li>\n<li><a href=\"https:\/\/gtechgroup.it\/blog\/classic-editor-woocommerce-prodotti-vecchio-editor\/\">Classic Editor e WooCommerce: Modificare Prodotti con il Vecchio Editor<\/a><\/li>\n<li><a href=\"https:\/\/gtechgroup.it\/blog\/classic-editor-acf-campi-personalizzati\/\">Classic Editor e ACF: Campi Personalizzati con Editor Classico<\/a><\/li>\n<li><a href=\"https:\/\/gtechgroup.it\/blog\/migrare-classic-editor-gutenberg-transizione\/\">Quando Migrare da Classic Editor a Gutenberg: Guida alla Transizione<\/a><\/li>\n<li><a href=\"https:\/\/gtechgroup.it\/blog\/classic-editor-compatibilita-plugin-temi-2026\/\">Classic Editor: Compatibilit&#224; con Plugin e Temi nel 2026<\/a><\/li>\n<li><a href=\"https:\/\/gtechgroup.it\/blog\/classic-editor-futuro-wordpress-supporto\/\">Classic Editor e il Futuro di WordPress: Fino a Quando Sar&#224; Supportato<\/a><\/li>\n<li><a href=\"https:\/\/gtechgroup.it\/blog\/disattivare-gutenberg-senza-plugin-alternative\/\">Disattivare Gutenberg Senza Plugin: Alternative a Classic Editor<\/a><\/li>\n<li><a href=\"https:\/\/gtechgroup.it\/blog\/classic-editor-problemi-comuni-troubleshooting\/\">Risolvere i Problemi Comuni di Classic Editor: Troubleshooting<\/a><\/li>\n<\/ul>\n<\/div>\n<p>Hai bisogno di personalizzazioni avanzate per il tuo Classic Editor? Gli sviluppatori di <a href=\"https:\/\/gtechgroup.it\/contatti\/\">G Tech Group<\/a> possono creare soluzioni su misura per il tuo flusso editoriale, dai filtri PHP ai plugin TinyMCE personalizzati. Contattaci per discutere il tuo progetto.<\/p>\n<h3>Migliora il Tuo Sito WordPress<\/h3>\n<p>Scopri le nostre guide complete sugli altri plugin essenziali per WordPress:<\/p>\n<ul>\n<li><a href=\"https:\/\/gtechgroup.it\/blog\/come-installare-elementor-wordpress-guida-principianti\/\">Come Installare Elementor su WordPress<\/a><\/li>\n<li><a href=\"https:\/\/gtechgroup.it\/blog\/wp-rocket-installare-configurare-wordpress\/\">Come Installare e Configurare WP Rocket<\/a><\/li>\n<li><a href=\"https:\/\/gtechgroup.it\/blog\/come-installare-configurare-seopress-wordpress-guida\/\">Come Installare e Configurare SEOPress<\/a><\/li>\n<li><a href=\"https:\/\/gtechgroup.it\/blog\/installare-attivare-updraftplus-wordpress\/\">Come Installare e Configurare UpdraftPlus<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Personalizzare Classic Editor con Funzioni PHP e Filtri Classic Editor, grazie alla sua architettura basata su TinyMCE e alle numerose API di WordPress, offre un&hellip;<\/p>\n","protected":false},"author":0,"featured_media":167116,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_seopress_robots_primary_cat":"","_seopress_titles_title":"Personalizzare Classic Editor con PHP | Guida","_seopress_titles_desc":"Come personalizzare Classic Editor con funzioni PHP e filtri. TinyMCE buttons, editor styles e formati.","_seopress_robots_index":"","footnotes":""},"categories":[1],"tags":[3564,3136,3135,471,2920,492],"class_list":["post-167189","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-senza-categoria","tag-classic-editor","tag-filtri","tag-hooks","tag-personalizzazione","tag-php","tag-wordpress"],"_links":{"self":[{"href":"https:\/\/gtechgroup.it\/blog\/wp-json\/wp\/v2\/posts\/167189","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/gtechgroup.it\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/gtechgroup.it\/blog\/wp-json\/wp\/v2\/types\/post"}],"replies":[{"embeddable":true,"href":"https:\/\/gtechgroup.it\/blog\/wp-json\/wp\/v2\/comments?post=167189"}],"version-history":[{"count":0,"href":"https:\/\/gtechgroup.it\/blog\/wp-json\/wp\/v2\/posts\/167189\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/gtechgroup.it\/blog\/wp-json\/wp\/v2\/media\/167116"}],"wp:attachment":[{"href":"https:\/\/gtechgroup.it\/blog\/wp-json\/wp\/v2\/media?parent=167189"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/gtechgroup.it\/blog\/wp-json\/wp\/v2\/categories?post=167189"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/gtechgroup.it\/blog\/wp-json\/wp\/v2\/tags?post=167189"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}