{"id":1568,"date":"2026-03-20T10:07:40","date_gmt":"2026-03-20T09:07:40","guid":{"rendered":"https:\/\/darioiannascoli.it\/blog\/wordpress-7-breaking-changes-api-ai-integration-migration-plugin-developers\/"},"modified":"2026-03-20T10:07:40","modified_gmt":"2026-03-20T09:07:40","slug":"wordpress-7-breaking-changes-api-ai-integration-migration-plugin-developers","status":"publish","type":"post","link":"https:\/\/darioiannascoli.it\/blog\/wordpress-7-breaking-changes-api-ai-integration-migration-plugin-developers\/","title":{"rendered":"Come Affronto i Breaking Changes di WordPress 7.0 per Plugin: API Changes, AI Integration e Migration Path Completo per Sviluppatori"},"content":{"rendered":"<p>Nelle ultime settimane ho passato diverse ore a testare le beta di <strong>WordPress 7.0<\/strong> sui miei ambienti di staging, e vi confesso che questa release \u00e8 probabilmente la pi\u00f9 impattante per gli sviluppatori di plugin dal passaggio a Gutenberg. Con il rilascio della <em>Beta 5<\/em> a marzo 2026 e la <em>Release Candidate 1<\/em> il 19 marzo, il quadro \u00e8 ormai chiaro: ci sono breaking changes reali che richiedono interventi immediati, e soprattutto c&#8217;\u00e8 l&#8217;integrazione dell&#8217;AI direttamente nel core che cambia le regole del gioco.<\/p>\n<p>Se sviluppate plugin WordPress \u2014 o anche solo li mantenete per i vostri clienti \u2014 questo articolo \u00e8 la guida che avrei voluto avere quando ho iniziato a migrare i miei progetti. Vi porto attraverso ogni cambiamento critico, con codice reale e soluzioni testate. La release finale \u00e8 prevista per il <strong>9 aprile 2026<\/strong>, quindi il tempo per prepararsi \u00e8 adesso.<\/p>\n<p>In un <a href=\"https:\/\/darioiannascoli.it\/blog\/wordpress-7-beta-novita-sviluppatori-performance-aggiornamento\/\">precedente articolo sulla Beta di WordPress 7.0<\/a> avevo gi\u00e0 anticipato alcune novit\u00e0. Oggi entriamo nel dettaglio tecnico dei breaking changes e del migration path completo.<\/p>\n<h2>WP AI Client: l&#8217;AI Entra nel Core di WordPress<\/h2>\n<p>La novit\u00e0 pi\u00f9 significativa di WordPress 7.0 \u00e8 senza dubbio il <strong>WP AI Client<\/strong>, un&#8217;API provider-agnostic per comunicare con modelli AI generativi direttamente dal core. La proposta di merge \u00e8 stata pubblicata a febbraio 2026 su Make WordPress Core, e dopo settimane di iterazioni nelle beta, il sistema \u00e8 ora stabile.<\/p>\n<p>Il punto di ingresso principale per gli sviluppatori \u00e8 la funzione <code>wp_ai_client_prompt()<\/code>, che restituisce un <em>Prompt_Builder_With_WP_Error<\/em>. Ecco come si usa nella pratica:<\/p>\n<pre><code>\/\/ Esempio base: generare testo con WP AI Client\n$response = wp_ai_client_prompt()\n    -&gt;set_model( 'default' )\n    -&gt;set_system_prompt( 'Sei un assistente per blog WordPress.' )\n    -&gt;add_user_message( 'Genera una meta description per un articolo su PHP 8.4' )\n    -&gt;send();\n\nif ( is_wp_error( $response ) ) {\n    error_log( 'AI Client error: ' . $response-&gt;get_error_message() );\n} else {\n    $text = $response-&gt;get_text();\n}<\/code><\/pre>\n<p>Quello che rende questa API davvero potente \u00e8 che \u00e8 <strong>completamente agnostica rispetto al provider<\/strong>. Potete chiamare OpenAI, Anthropic (Claude) o Google Gemini con lo stesso codice \u2014 la scelta del provider \u00e8 gestita dall&#8217;utente nella nuova schermata <em>Connectors<\/em> dell&#8217;admin.<\/p>\n<h3>Attenzione: il pacchetto standalone \u00e8 deprecato<\/h3>\n<p>Se stavate usando il pacchetto <code>wp-ai-client<\/code> come plugin separato durante lo sviluppo, sappiate che su WordPress 7.0+ l&#8217;infrastruttura PHP del SDK esterno viene disabilitata automaticamente \u2014 il core lo gestisce nativamente. I <em>REST API endpoints<\/em> e la <em>JavaScript API<\/em> del pacchetto restano attivi perch\u00e9 non sono ancora nel core, ma la migrazione \u00e8 inevitabile.<\/p>\n<p>Nel mio plugin <em>AI Publisher WP<\/em>, ho gi\u00e0 iniziato a predisporre un layer di compatibilit\u00e0 che rileva la versione di WordPress e usa l&#8217;API nativa quando disponibile. Ve lo consiglio caldamente.<\/p>\n<h2>La Connectors API: Gestione Centralizzata dei Servizi Esterni<\/h2>\n<p>WordPress 7.0 introduce la <strong>Connectors API<\/strong>, un framework per registrare e gestire connessioni a servizi esterni con focus iniziale sui provider AI. Questo significa gestione centralizzata delle <em>API key<\/em>, <em>provider discovery<\/em> e una UI admin dedicata sotto <strong>Impostazioni \u2192 Connectors<\/strong>.<\/p>\n<p>L&#8217;hook principale per registrare nuovi tipi di connector \u00e8 <code>wp_connectors_init<\/code>:<\/p>\n<pre><code>add_action( 'wp_connectors_init', function( $registry ) {\n    \/\/ I provider AI registrati con WP AI Client\n    \/\/ ottengono il connector automaticamente.\n    \/\/ Per servizi custom:\n    $registry-&gt;register( 'my-custom-service', array(\n        'label'       =&gt; 'My Custom API',\n        'description' =&gt; 'Connessione al servizio XYZ',\n        'fields'      =&gt; array(\n            'api_key' =&gt; array(\n                'label' =&gt; 'API Key',\n                'type'  =&gt; 'secret',\n            ),\n        ),\n    ) );\n} );<\/code><\/pre>\n<p><strong>Limitazione importante per la 7.0<\/strong>: nella release iniziale, la schermata Connectors supporta solo i 3 provider ufficiali (OpenAI, Anthropic, Google) con configurazione hardcoded. L&#8217;estensibilit\u00e0 completa per provider di terze parti \u00e8 pianificata per <strong>WordPress 7.1<\/strong>. Tuttavia, l&#8217;hook <code>connections-wp-admin-init<\/code> e le API di registrazione sono gi\u00e0 disponibili per chi vuole prepararsi.<\/p>\n<p>Se state sviluppando un plugin AI, il mio consiglio \u00e8: registrate il vostro provider con il WP AI Client e il connector verr\u00e0 creato automaticamente con i metadati corretti. Non serve codice aggiuntivo.<\/p>\n<h2>DataViews: il Breaking Change che Rompe i Plugin di Admin<\/h2>\n<p>Questo \u00e8 il cambiamento che mi ha dato pi\u00f9 grattacapi durante i test. Il componente <strong>DataViews<\/strong> \u2014 usato per le liste di post, pagine e altri contenuti nell&#8217;admin \u2014 ha subito una modifica strutturale alla configurazione del raggruppamento.<\/p>\n<h3>Prima (WordPress 6.9)<\/h3>\n<pre><code>const view = {\n    type: 'table',\n    groupByField: 'status'\n};<\/code><\/pre>\n<h3>Dopo (WordPress 7.0)<\/h3>\n<pre><code>const view = {\n    type: 'table',\n    groupBy: {\n        field: 'status',\n        direction: 'asc',\n        showLabel: true\n    }\n};<\/code><\/pre>\n<p>Il vecchio <code>groupByField<\/code> (stringa) \u00e8 stato sostituito da un oggetto <code>groupBy<\/code> che supporta <em>field<\/em>, <em>direction<\/em> e <em>label visibility<\/em>. Qualsiasi plugin che personalizza le liste nell&#8217;admin usando DataViews <strong>deve aggiornare questa sintassi<\/strong>, altrimenti si rompe silenziosamente.<\/p>\n<p>Come ho scritto nella mia <a href=\"https:\/\/darioiannascoli.it\/blog\/wordpress-7-roadmap-2026-phase-3-collaboration-client-side-media-responsive-styling\/\">guida alla roadmap di WordPress 7.0<\/a>, la Phase 3 Collaboration porta con s\u00e9 molti cambiamenti strutturali, e DataViews \u00e8 uno dei pi\u00f9 impattanti.<\/p>\n<h2>PHP-Only Blocks: Addio JavaScript Obbligatorio<\/h2>\n<p>Questa \u00e8 stata una delle novit\u00e0 pi\u00f9 apprezzate dalla community, e devo dire che nella mia esperienza semplifica enormemente lo sviluppo. WordPress 7.0 permette di registrare blocchi <strong>interamente in PHP<\/strong>, senza una singola riga di JavaScript:<\/p>\n<pre><code>register_block_type( 'mio-plugin\/info-box', array(\n    'supports' =&gt; array(\n        'autoRegister' =&gt; true,\n    ),\n    'attributes' =&gt; array(\n        'title' =&gt; array(\n            'type'    =&gt; 'string',\n            'default' =&gt; 'Titolo',\n        ),\n        'showBorder' =&gt; array(\n            'type'    =&gt; 'boolean',\n            'default' =&gt; true,\n        ),\n        'columns' =&gt; array(\n            'type'    =&gt; 'integer',\n            'default' =&gt; 2,\n        ),\n    ),\n    'render_callback' =&gt; function( $attributes ) {\n        $border = $attributes['showBorder'] ? ' style=\"border:1px solid #ccc\"' : '';\n        return sprintf(\n            '&lt;div class=\"info-box\"%s&gt;&lt;h3&gt;%s&lt;\/h3&gt;&lt;\/div&gt;',\n            $border,\n            esc_html( $attributes['title'] )\n        );\n    },\n) );<\/code><\/pre>\n<p>Con <code>'autoRegister' =&gt; true<\/code>, il blocco appare nell&#8217;editor e WordPress genera automaticamente gli <em>Inspector Controls<\/em> per i tipi di attributo supportati: <strong>string<\/strong>, <strong>integer<\/strong>, <strong>boolean<\/strong> e <strong>enum<\/strong>. Niente pi\u00f9 build chain React solo per un blocco semplice.<\/p>\n<h2>Block Visibility e Responsive Styling Controls<\/h2>\n<p>WordPress 7.0 introduce i <strong>Block Visibility controls<\/strong> nativi: ogni blocco pu\u00f2 ora essere mostrato o nascosto in base alla dimensione dello schermo, direttamente dall&#8217;editor. Per gli sviluppatori di plugin che offrivano questa funzionalit\u00e0 tramite plugin dedicati (e ce ne sono decine), questo significa potenziale conflitto.<\/p>\n<p>Il mio consiglio: verificate se il vostro plugin di block visibility usa hook o filtri che ora sono gestiti dal core. Se sovrapponete la stessa funzionalit\u00e0, rischiate comportamenti imprevedibili. Nella mia esperienza, la soluzione migliore \u00e8 rendere il vostro plugin consapevole della versione di WordPress e disabilitare i controlli duplicati quando il core li fornisce nativamente.<\/p>\n<h2>Requisiti PHP Aggiornati e Compatibilit\u00e0<\/h2>\n<p>WordPress 7.0 alza il requisito minimo di PHP a <strong>7.4<\/strong>, abbandonando ufficialmente il supporto per PHP 7.2 e 7.3. Se gestite server come faccio io con <a href=\"https:\/\/darioiannascoli.it\/blog\/configurare-server-plesk-obsidian-hosting-wordpress-prestazioni-sicurezza-2026\/\">Plesk Obsidian<\/a>, questo non dovrebbe essere un problema \u2014 PHP 8.3 \u00e8 lo standard ormai. Ma se avete clienti su hosting condivisi datati, \u00e8 il momento di forzare l&#8217;aggiornamento.<\/p>\n<p>Per verificare la compatibilit\u00e0 del vostro plugin con PHP 7.4+, usate <em>PHPCompatibility<\/em> con phpcs:<\/p>\n<pre><code># Installare PHPCompatibility\ncomposer require --dev phpcompatibility\/php-compatibility\n\n# Verificare compatibilit\u00e0\nphpcs --standard=PHPCompatibility --runtime-set testVersion 7.4- mio-plugin\/<\/code><\/pre>\n<h2>Migration Path Completo: la Mia Checklist Operativa<\/h2>\n<p>Dopo aver migrato tre plugin ai cambiamenti di WordPress 7.0, ho consolidato questa checklist che uso su ogni progetto:<\/p>\n<ol>\n<li><strong>Ambiente di test<\/strong>: create un ambiente staging con WordPress 7.0 Beta 5 o RC1. Usate <a href=\"https:\/\/wordpress.org\/plugins\/wordpress-beta-tester\/\">WordPress Beta Tester<\/a> o WP-CLI: <code>wp core update --version=7.0-RC1<\/code><\/li>\n<li><strong>Audit PHP<\/strong>: eseguite phpcs con PHPCompatibility per identificare codice incompatibile con PHP 7.4+<\/li>\n<li><strong>DataViews<\/strong>: cercate nel vostro codice ogni occorrenza di <code>groupByField<\/code> e sostituitela con il nuovo oggetto <code>groupBy<\/code><\/li>\n<li><strong>Editor iframe<\/strong>: verificate che i vostri blocchi non facciano riferimento al <code>document<\/code> globale in JavaScript \u2014 l&#8217;editor iframed (puntato a 7.1 ma gi\u00e0 attivo nel plugin Gutenberg) isola gli stili<\/li>\n<li><strong>WP AI Client<\/strong>: se usate il pacchetto standalone, pianificate la migrazione all&#8217;API nativa del core<\/li>\n<li><strong>Connectors API<\/strong>: se il vostro plugin gestisce connessioni a servizi esterni, valutate l&#8217;integrazione con la nuova API<\/li>\n<li><strong>PHP-only blocks<\/strong>: considerate la migrazione dei blocchi semplici a <code>autoRegister<\/code> per eliminare dipendenze JavaScript<\/li>\n<li><strong>Block Visibility<\/strong>: verificate conflitti con i nuovi controlli responsive nativi<\/li>\n<li><strong>Test automatizzati<\/strong>: eseguite la vostra test suite su WordPress 7.0 \u2014 i test PHPUnit con WP_UnitTestCase funzionano senza modifiche<\/li>\n<li><strong>Field Guide<\/strong>: consultate la <a href=\"https:\/\/make.wordpress.org\/core\/7-0\/\">Field Guide ufficiale<\/a> pubblicata con la RC1 per la lista completa delle funzioni deprecate<\/li>\n<\/ol>\n<h2>Impatto sull&#8217;Ecosistema Plugin: Cosa Aspettarsi<\/h2>\n<p>Dalla mia analisi delle beta, i plugin pi\u00f9 a rischio di incompatibilit\u00e0 sono:<\/p>\n<ul>\n<li><strong>Plugin che modificano le liste post\/pagine<\/strong>: il cambio DataViews \u00e8 il rischio pi\u00f9 alto<\/li>\n<li><strong>Plugin di Block Visibility<\/strong>: conflitto diretto con la funzionalit\u00e0 nativa<\/li>\n<li><strong>Plugin AI<\/strong>: quelli che usano il pacchetto <code>wp-ai-client<\/code> standalone devono migrare<\/li>\n<li><strong>Plugin con blocchi API version 1-2<\/strong>: console warnings attivi da WP 6.9, upgrade a version 3 raccomandato<\/li>\n<li><strong>Plugin che accedono al DOM globale nell&#8217;editor<\/strong>: l&#8217;editor iframed (gi\u00e0 nel plugin Gutenberg) rompe i riferimenti al <code>document<\/code><\/li>\n<\/ul>\n<p>Se avete sviluppato plugin seguendo le best practices che ho descritto nella <a href=\"https:\/\/darioiannascoli.it\/blog\/vulnerability-disclosure-program-wordpress-plugin-cyber-resilience-act-2026\/\">guida al Vulnerability Disclosure Program<\/a>, avrete gi\u00e0 una struttura di test che facilita questa transizione.<\/p>\n<h2>La Mia Esperienza con la Migrazione<\/h2>\n<p>Vi racconto brevemente come \u00e8 andata con il mio plugin. All&#8217;inizio non funzionava il pannello di configurazione AI perch\u00e9 cercavo di registrare un connector personalizzato sulla schermata Connectors \u2014 solo per scoprire che l&#8217;estensibilit\u00e0 di terze parti \u00e8 prevista per la 7.1. La soluzione \u00e8 stata mantenere la mia pagina settings per ora e predisporre il codice per la migrazione futura.<\/p>\n<p>Il secondo problema \u00e8 stato il DataViews: avevo una vista personalizzata nel Content Audit che usava <code>groupByField<\/code>. Il fix \u00e8 stato banale (5 minuti), ma senza test l&#8217;avrei scoperto solo in produzione. Questo conferma quanto sia importante testare su staging <strong>prima<\/strong> dell&#8217;aggiornamento.<\/p>\n<p>Come ho gi\u00e0 raccomandato nella mia <a href=\"https:\/\/darioiannascoli.it\/blog\/aggiornamento-wordpress-7-checklist-compatibilita-abilities-api\/\">checklist di compatibilit\u00e0 per WordPress 7.0<\/a>, il testing preventivo \u00e8 la chiave per evitare sorprese il giorno del rilascio.<\/p>\n<h2>FAQ<\/h2>\n<h3>Quando esce WordPress 7.0 e quali sono le date chiave per gli sviluppatori?<\/h3>\n<p>La release finale di WordPress 7.0 \u00e8 prevista per il <strong>9 aprile 2026<\/strong>. La Release Candidate 1 \u00e8 uscita il 19 marzo 2026 insieme alla Field Guide ufficiale con tutti i Dev Notes. Vi consiglio di testare i vostri plugin almeno sulla RC1, perch\u00e9 a quel punto le API sono congelate e non ci saranno pi\u00f9 breaking changes.<\/p>\n<h3>Il mio plugin smette di funzionare con WordPress 7.0 se usa groupByField nelle DataViews?<\/h3>\n<p>Non smetter\u00e0 di funzionare completamente, ma il raggruppamento nelle liste admin non funzioner\u00e0 pi\u00f9 correttamente. Il vecchio <code>groupByField<\/code> (stringa) \u00e8 stato sostituito dall&#8217;oggetto <code>groupBy<\/code> con propriet\u00e0 <em>field<\/em>, <em>direction<\/em> e <em>showLabel<\/em>. La migrazione \u00e8 semplice ma necessaria. Cercate tutte le occorrenze nel vostro codice JavaScript e aggiornate la sintassi.<\/p>\n<h3>Devo riscrivere il mio plugin AI per usare il WP AI Client del core?<\/h3>\n<p>Non immediatamente, ma \u00e8 fortemente consigliato. Il WP AI Client offre un&#8217;API unificata che funziona con qualsiasi provider configurato dall&#8217;utente. Se il vostro plugin usa connessioni dirette a un singolo provider, potete mantenere il codice esistente. Ma se usavate il pacchetto standalone <code>wp-ai-client<\/code>, l&#8217;infrastruttura PHP viene disabilitata su WP 7.0+ e dovrete migrare all&#8217;API nativa <code>wp_ai_client_prompt()<\/code>.<\/p>\n<h3>I blocchi PHP-only funzionano anche con il Site Editor o solo nel Post Editor?<\/h3>\n<p>I blocchi registrati con <code>'autoRegister' =&gt; true<\/code> funzionano in tutti i contesti dell&#8217;editor: Post Editor, Site Editor e Widget Editor. WordPress genera automaticamente gli Inspector Controls per gli attributi di tipo string, integer, boolean e enum. Tuttavia, per blocchi complessi con interazioni avanzate lato client, il JavaScript resta necessario.<\/p>\n<h3>Cosa succede se il mio hosting usa ancora PHP 7.2 o 7.3?<\/h3>\n<p>WordPress 7.0 non si installer\u00e0 o aggiorner\u00e0 su versioni di PHP inferiori a 7.4. Il sistema di aggiornamento automatico bloccher\u00e0 l&#8217;upgrade. Dovete aggiornare PHP prima di procedere. Se gestite i server con <a href=\"https:\/\/darioiannascoli.it\/blog\/hosting-wordpress-plesk-installazione-configurazione-wp-toolkit\/\">Plesk e WP Toolkit<\/a>, il cambio versione PHP richiede pochi click. Su hosting condivisi, contattate il provider.<\/p>\n<h2>Conclusione<\/h2>\n<p>WordPress 7.0 \u00e8 una release che segna un punto di svolta per l&#8217;ecosistema: l&#8217;AI entra nel core con il <strong>WP AI Client<\/strong> e la <strong>Connectors API<\/strong>, i blocchi PHP-only eliminano la barriera JavaScript per i casi semplici, e i breaking changes nelle DataViews richiedono attenzione immediata da parte di chi sviluppa plugin per l&#8217;admin.<\/p>\n<p>Il mio consiglio principale \u00e8 uno solo: <strong>testate adesso<\/strong>. Non aspettate il 9 aprile. Installate la RC1 su un ambiente di staging, eseguite i vostri plugin e correggete quello che si rompe. La Field Guide ufficiale su <a href=\"https:\/\/make.wordpress.org\/core\/7-0\/\">Make WordPress Core<\/a> \u00e8 la vostra risorsa definitiva per ogni dettaglio tecnico.<\/p>\n<p>Se avete domande sulla migrazione dei vostri plugin o volete condividere la vostra esperienza con i breaking changes, lasciate un commento qui sotto. E se state esplorando come l&#8217;AI si integra con WordPress a livello di architettura, vi consiglio di leggere il mio articolo su <a href=\"https:\/\/darioiannascoli.it\/blog\/wordpress-ai-core-2026-roadmap-wp-ai-client-guardrails-workflow-automatizzati\/\">WordPress AI nel Core 2026<\/a> per il quadro completo.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Guida completa ai breaking changes di WordPress 7.0 per sviluppatori plugin: WP AI Client, Connectors API, DataViews, PHP-only blocks e migration path.<\/p>\n","protected":false},"author":1,"featured_media":1569,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_seopress_robots_primary_cat":"","_seopress_titles_title":"WordPress 7.0 Breaking Changes Plugin: API e AI Migration","_seopress_titles_desc":"Guida ai breaking changes di WordPress 7.0 per plugin: WP AI Client, Connectors API, DataViews, PHP-only blocks. Migration path completo con codice.","_seopress_robots_index":"","footnotes":""},"categories":[2],"tags":[475,476,477,474,292,417],"class_list":["post-1568","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-wordpress","tag-breaking-changes","tag-connectors-api","tag-php-only-blocks","tag-plugin-development","tag-wordpress-7-0","tag-wp-ai-client"],"_links":{"self":[{"href":"https:\/\/darioiannascoli.it\/blog\/wp-json\/wp\/v2\/posts\/1568","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/darioiannascoli.it\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/darioiannascoli.it\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/darioiannascoli.it\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/darioiannascoli.it\/blog\/wp-json\/wp\/v2\/comments?post=1568"}],"version-history":[{"count":0,"href":"https:\/\/darioiannascoli.it\/blog\/wp-json\/wp\/v2\/posts\/1568\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/darioiannascoli.it\/blog\/wp-json\/wp\/v2\/media\/1569"}],"wp:attachment":[{"href":"https:\/\/darioiannascoli.it\/blog\/wp-json\/wp\/v2\/media?parent=1568"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/darioiannascoli.it\/blog\/wp-json\/wp\/v2\/categories?post=1568"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/darioiannascoli.it\/blog\/wp-json\/wp\/v2\/tags?post=1568"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}