<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Abilities API - Web Design | Creazione Siti Internet</title>
	<atom:link href="https://www.mrtux.it/tag/abilities-api/feed" rel="self" type="application/rss+xml" />
	<link>https://www.mrtux.it</link>
	<description>Sviluppo Siti Web - Assistenza WordPress</description>
	<lastBuildDate>Mon, 22 Jun 2026 08:03:48 +0000</lastBuildDate>
	<language>it-IT</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>

<image>
	<url>https://www.mrtux.it/wp-content/uploads/2022/06/favicon-150x150.png</url>
	<title>Abilities API - Web Design | Creazione Siti Internet</title>
	<link>https://www.mrtux.it</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Abilities API WordPress 6.9: guida operativa 2026 completa</title>
		<link>https://www.mrtux.it/abilities-api-wordpress-6-9-casi-uso-non-ai</link>
					<comments>https://www.mrtux.it/abilities-api-wordpress-6-9-casi-uso-non-ai#respond</comments>
		
		<dc:creator><![CDATA[Emilio Petrozzi]]></dc:creator>
		<pubDate>Mon, 22 Jun 2026 08:03:47 +0000</pubDate>
				<category><![CDATA[sviluppo-web]]></category>
		<category><![CDATA[Abilities API]]></category>
		<category><![CDATA[Capability matrix]]></category>
		<category><![CDATA[Performance check]]></category>
		<category><![CDATA[Plugin architecture]]></category>
		<category><![CDATA[Security scan]]></category>
		<category><![CDATA[SEO audit]]></category>
		<category><![CDATA[Sviluppo WordPress]]></category>
		<category><![CDATA[WordPress 6.9]]></category>
		<guid isPermaLink="false">https://www.mrtux.it/abilities-api-wordpress-6-9-guida-operativa-2026-completa</guid>

					<description><![CDATA[Abilities API WordPress 6.9 non è solo per plugin AI: ecco come usarla come contratto verificabile per audit SEO, scan di sicurezza e controlli di performance, con capability matrix e codice pronto all'uso.]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Quando si parla di Abilities API WordPress 6.9 il primo pensiero va ai plugin AI: capability, MCP, model context. Ma c&#x27;è un uso molto più immediato e ad alto valore che quasi nessuno sta esplorando: trasformare audit SEO, scan di sicurezza e check di performance in &quot;abilities&quot; dichiarate e verificabili, che qualunque plugin può chiamare senza reinventare la ruota. In questa guida vediamo come sfruttare la nuova API per casi d&#x27;uso strettamente operativi, con capability matrix, sandboxing e codice pronto all&#x27;uso.</p>



<p class="wp-block-paragraph">Il cambio di mentalità necessario è piccolo ma potente. Oggi la maggior parte dei plugin SEO fa il proprio audit chiamando Yoast o Rank Math via reflection o hook, con risultati fragili e duplicazione di logica. Con Abilities API, ogni plugin espone le proprie capacità come abilities registrate, e chiunque può chiederle via <code>wp_get_ability()</code> con capability check, audit log e kill switch integrati. Questo non è teorico: il Plugin Team stesso lo usa già per i triage AI del <a href="https://www.mrtux.it/wordpress-plugin-team-2026-triage-ai" data-wpel-link="internal" target="_self" rel="noopener">Plugin Directory 2026</a>.</p>



<p class="wp-block-paragraph">Per capire il contesto AI dell&#x27;API rimando al <a href="https://www.mrtux.it/wp-plugin-ai-mcp-abilities-pattern" data-wpel-link="internal" target="_self" rel="noopener">pattern ufficiale Plugin Team MCP + Abilities</a> e alla <a href="https://www.mrtux.it/ai-use-disclosure-plugin-wordpress-directory-standard" data-wpel-link="internal" target="_self" rel="noopener">preparazione alla AI-use disclosure</a>; qui il focus è su come chiunque può adottare Abilities API anche senza una sola riga di codice AI, ottenendo vantaggi concreti in robustezza, auditabilità e interoperabilità tra plugin.</p>



<h2 class="wp-block-heading">Cos&#x27;è Abilities API WordPress 6.9 in 90 secondi</h2>



<p class="wp-block-paragraph">Abilities API è una nuova API core di WordPress 6.9 che permette a un plugin (o al core) di registrare &quot;abilità&quot; (abilities) come unità discrete di funzionalità. Ogni ability ha:</p>



<ul class="wp-block-list"><li><strong>Slug univoco</strong>: <code>seo-audit/canonical-check</code>, <code>security-scan/file-integrity</code>, <code>performance-check/db-query-time</code></li><li><strong>Capability requirements</strong>: chi può chiamarla (administrator, editor, custom role)</li><li><strong>Input schema</strong>: parametri accettati (post_id, capability array, scope)</li><li><strong>Output schema</strong>: struttura del risultato atteso</li><li><strong>Callback registrato</strong>: la funzione che esegue l&#x27;abilità</li><li><strong>Audit metadata</strong>: chi l&#x27;ha chiamata, quando, con quali parametri</li></ul>



<p class="wp-block-paragraph">A differenza degli hook tradizionali, un&#x27;ability è una funzione chiamabile esplicitamente da altro codice con un&#x27;API uniforme, non un side effect agganciato a un evento. Questo la rende perfetta per audit e check operativi, dove serve un &quot;contratto&quot; chiaro tra chi chiede e chi esegue.</p>



<h3 class="wp-block-heading">Differenza tra Ability e Hook WordPress</h3>



<p class="wp-block-paragraph">Un hook tradizionale (<code>do_action</code>, <code>apply_filters</code>) è publish-subscribe: il publisher non sa chi ascolta. Un&#x27;ability è request-response: il chiamante sa esattamente cosa sta chiedendo e cosa riceverà. Questa differenza sembra sottile ma in termini di testabilità, documentazione e debug è enorme.</p>



<h3 class="wp-block-heading">Differenza tra Ability e REST endpoint</h3>



<p class="wp-block-paragraph">Un&#x27;ability è simile a un REST endpoint ma vive nello stesso processo PHP, senza HTTP overhead. È ideale per uso server-side (WP-CLI, cron, plugin-to-plugin). Per uso client-side (JavaScript in admin) si consiglia di esporre l&#x27;ability anche via REST controller aggiuntivo.</p>



<h2 class="wp-block-heading">Caso d&#x27;uso 1: audit SEO come abilities componibili</h2>



<p class="wp-block-paragraph">Vediamo il primo caso d&#x27;uso pratico: trasformare i 12 check SEO che ogni agenzia fa a mano (canonical, meta description, alt text, structured data, robots, sitemap, ecc.) in abilities dichiarate. Il vantaggio immediato è che qualunque plugin (Rank Math, Yoast, SEOPress) può esporre le proprie check come abilities, e i tool di audit (WooCommerce, page builder, plugin custom) possono chiamarle senza dover conoscere il plugin specifico.</p>



<h3 class="wp-block-heading">Registrazione di un&#x27;ability SEO canonical-check</h3>



<pre class="wp-block-code"><code>// registra un'ability SEO audit
add_action( 'wp_abilities_api_init', function() {
    wp_register_ability( 'seo-audit/canonical-check', array(
        'label'       =&gt; __( 'Canonical URL check', 'seo-abilities' ),
        'description' =&gt; __( 'Verifica che il post abbia un canonical URL valido', 'seo-abilities' ),
        'callback'    =&gt; 'seo_abilities_check_canonical',
        'capability'  =&gt; 'edit_posts',
        'input_schema' =&gt; array(
            'type'       =&gt; 'object',
            'properties' =&gt; array(
                'post_id' =&gt; array( 'type' =&gt; 'integer' )
            ),
            'required'   =&gt; array( 'post_id' )
        ),
        'output_schema' =&gt; array(
            'type'       =&gt; 'object',
            'properties' =&gt; array(
                'has_canonical' =&gt; array( 'type' =&gt; 'boolean' ),
                'canonical_url' =&gt; array( 'type' =&gt; 'string' ),
                'is_self'       =&gt; array( 'type' =&gt; 'boolean' ),
                'severity'      =&gt; array( 'type' =&gt; 'string' )
            )
        )
    ) );
} );

function seo_abilities_check_canonical( $input ) {
    $post = get_post( $input['post_id'] );
    if ( ! $post ) {
        return new WP_Error( 'post_not_found', __( 'Post non trovato', 'seo-abilities' ) );
    }
    $canonical = get_permalink( $post-&gt;ID );
    return array(
        'has_canonical' =&gt; true,
        'canonical_url' =&gt; $canonical,
        'is_self'       =&gt; true,
        'severity'      =&gt; 'ok'
    );
}</code></pre>



<h3 class="wp-block-heading">Composizione di più abilities per audit completo</h3>



<pre class="wp-block-code"><code>// chiama 5 abilities SEO in sequenza e aggrega risultati
function seo_abilities_full_audit( $post_id ) {
    $checks = array(
        'seo-audit/canonical-check',
        'seo-audit/meta-description-check',
        'seo-audit/alt-text-check',
        'seo-audit/structured-data-check',
        'seo-audit/robots-meta-check'
    );
    $report = array();
    foreach ( $checks as $slug ) {
        $ability = wp_get_ability( $slug );
        if ( $ability &amp;&amp; current_user_can( $ability-&gt;capability ) ) {
            $report[ $slug ] = $ability-&gt;callback( array( 'post_id' =&gt; $post_id ) );
        }
    }
    return $report;
}</code></pre>



<h3 class="wp-block-heading">Vantaggio rispetto a Rank Math standalone</h3>



<p class="wp-block-paragraph">Rank Math ha già le proprie funzioni interne di audit, ma sono sealed. Esponendole come abilities, chiunque può scrivere un tool che le chiama via API pubblica, senza reflection. Inoltre un&#x27;agenzia può costruire un proprio tool centralizzato che gira <code>seo-audit/full-audit</code> su tutti i 50 siti del cliente, aggregando i risultati.</p>



<h2 class="wp-block-heading">Caso d&#x27;uso 2: scan di sicurezza come abilities verificabili</h2>



<p class="wp-block-paragraph">Il secondo caso d&#x27;uso è la sicurezza. I plugin di sicurezza oggi fanno scan in modi molto diversi tra loro (Wordfence, Sucuri, iThemes, Solid Security), spesso con logica duplicata e audit trail frammentato. Con Abilities API possiamo standardizzare gli scan di base.</p>



<h3 class="wp-block-heading">Ability file-integrity check</h3>



<pre class="wp-block-code"><code>// ability: verifica integrità file core WordPress
add_action( 'wp_abilities_api_init', function() {
    wp_register_ability( 'security-scan/file-integrity', array(
        'label'       =&gt; __( 'File integrity check', 'security-abilities' ),
        'description' =&gt; __( 'Confronta hash dei file core con signature note', 'security-abilities' ),
        'callback'    =&gt; 'security_abilities_check_integrity',
        'capability'  =&gt; 'manage_options',
        'input_schema' =&gt; array(
            'type'       =&gt; 'object',
            'properties' =&gt; array(
                'scope' =&gt; array( 'type' =&gt; 'string', 'enum' =&gt; array( 'core', 'plugins', 'themes', 'all' ) )
            )
        ),
        'output_schema' =&gt; array(
            'type'       =&gt; 'object',
            'properties' =&gt; array(
                'modified_files' =&gt; array( 'type' =&gt; 'array' ),
                'severity'       =&gt; array( 'type' =&gt; 'string' )
            )
        )
    ) );
} );

function security_abilities_check_integrity( $input ) {
    $scope = $input['scope'] ?? 'core';
    $modified = array();
    // logica di confronto hash semplificata
    $check_root = ABSPATH;
    $iterator = new RecursiveIteratorIterator( new RecursiveDirectoryIterator( $check_root ) );
    foreach ( $iterator as $file ) {
        if ( $file-&gt;isFile() &amp;&amp; in_array( $file-&gt;getExtension(), array( 'php', 'js' ) ) ) {
            $hash = md5_file( $file-&gt;getPathname() );
            // confronto con signature store (in produzione: db o file firmato)
            if ( ! security_abilities_hash_known( $file-&gt;getPathname(), $hash ) ) {
                $modified[] = str_replace( ABSPATH, '', $file-&gt;getPathname() );
            }
        }
    }
    return array(
        'modified_files' =&gt; $modified,
        'severity'       =&gt; count( $modified ) &gt; 0 ? 'high' : 'ok'
    );
}</code></pre>



<h3 class="wp-block-heading">Integrazione con WP-CLI per audit massivi</h3>



<p class="wp-block-paragraph">Una volta che le abilities di sicurezza sono registrate, possiamo lanciarle via <a href="https://www.mrtux.it/wp-cli-2026-guida-completa-ai" data-wpel-link="internal" target="_self" rel="noopener">WP-CLI 2026</a> su tutti i siti di un multisite o di una flotta gestita:</p>



<pre class="wp-block-code"><code># audit sicurezza massivo via WP-CLI
wp ability run security-scan/file-integrity --scope=all --format=json
wp ability run security-scan/suspicious-patterns --format=json</code></pre>



<p class="wp-block-paragraph">Questo tipo di automazione prima richiedeva script personalizzati per ogni plugin di sicurezza; con Abilities API diventa un comando standard.</p>



<h2 class="wp-block-heading">Caso d&#x27;uso 3: check di performance come abilities composite</h2>



<p class="wp-block-paragraph">Il terzo caso d&#x27;uso è forse il più sorprendente. I plugin di caching (WP Rocket, LiteSpeed, W3 Total Cache) oggi espongono le proprie metriche in modi proprietari. Con Abilities API possiamo esporre check di performance come abilities standard e creare dashboard cross-plugin.</p>



<h3 class="wp-block-heading">Ability db-query-time check</h3>



<pre class="wp-block-code"><code>// ability: misura tempo medio query database
add_action( 'wp_abilities_api_init', function() {
    wp_register_ability( 'performance-check/db-query-time', array(
        'label'       =&gt; __( 'Database query time', 'performance-abilities' ),
        'description' =&gt; __( 'Misura tempo medio di esecuzione query DB', 'performance-abilities' ),
        'callback'    =&gt; 'performance_abilities_check_db_time',
        'capability'  =&gt; 'manage_options',
        'input_schema' =&gt; array(
            'type'       =&gt; 'object',
            'properties' =&gt; array(
                'sample_size' =&gt; array( 'type' =&gt; 'integer', 'default' =&gt; 100 )
            )
        ),
        'output_schema' =&gt; array(
            'type'       =&gt; 'object',
            'properties' =&gt; array(
                'avg_query_time' =&gt; array( 'type' =&gt; 'number' ),
                'slow_queries'   =&gt; array( 'type' =&gt; 'integer' ),
                'severity'       =&gt; array( 'type' =&gt; 'string' )
            )
        )
    ) );
} );

function performance_abilities_check_db_time( $input ) {
    global $wpdb;
    $sample_size = $input['sample_size'] ?? 100;
    $times = array();
    $slow = 0;
    for ( $i = 0; $i &lt; $sample_size; $i++ ) {
        $start = microtime( true );
        $wpdb-&gt;get_results( "SELECT ID FROM {$wpdb-&gt;posts} WHERE post_status = 'publish' LIMIT 1" );
        $elapsed = microtime( true ) - $start;
        $times[] = $elapsed;
        if ( $elapsed &gt; 0.05 ) $slow++;
    }
    $avg = array_sum( $times ) / count( $times );
    return array(
        'avg_query_time' =&gt; round( $avg * 1000, 2 ), // ms
        'slow_queries'   =&gt; $slow,
        'severity'       =&gt; $avg &gt; 0.03 ? 'high' : ( $avg &gt; 0.01 ? 'medium' : 'ok' )
    );
}</code></pre>



<h3 class="wp-block-heading">Dashboard cross-plugin che consuma abilities</h3>



<p class="wp-block-paragraph">Un&#x27;agenzia può creare un custom admin page che chiama 8-10 abilities (SEO + security + performance) e mostra un report unificato. Il vantaggio è che funziona indipendentemente da quali plugin specifici sono installati, purché espongano le abilities standard.</p>



<h2 class="wp-block-heading">Capability matrix e governance delle abilities</h2>



<p class="wp-block-paragraph">Una delle funzionalità più potenti di Abilities API è la capability matrix: ogni ability dichiara chi può chiamarla e in quali contesti. Questo apre a scenari di governance che prima erano impossibili.</p>



<h3 class="wp-block-heading">Matrice capability per ruolo</h3>




<figure class="wp-block-table"><table><thead><tr><th>Ability</th><th>Administrator</th><th>Editor</th><th>Author</th><th>Custom Auditor</th></tr></thead><tbody><tr><td>seo-audit/full-audit</td><td>sì</td><td>sì</td><td>no</td><td>sì (con capability <code>run_seo_audit</code>)</td></tr><tr><td>security-scan/file-integrity</td><td>sì</td><td>no</td><td>no</td><td>sì</td></tr><tr><td>performance-check/db-query-time</td><td>sì</td><td>no</td><td>no</td><td>sì</td></tr><tr><td>seo-audit/fix-canonical</td><td>sì</td><td>sì</td><td>no</td><td>no</td></tr><tr><td>security-scan/auto-fix</td><td>sì</td><td>no</td><td>no</td><td>no</td></tr></tbody></table></figure>




<h3 class="wp-block-heading">Custom role per auditor esterno</h3>



<pre class="wp-block-code"><code>// crea custom role "site-auditor" con capability granulari
add_role( 'site_auditor', __( 'Site Auditor', 'abilities-governance' ), array(
    'read'                   =&gt; true,
    'run_seo_audit'          =&gt; true,
    'run_security_scan'      =&gt; true,
    'run_performance_check'  =&gt; true,
    'edit_posts'             =&gt; false
) );</code></pre>



<p class="wp-block-paragraph">Con questa capability matrix, un&#x27;agenzia può dare a un consulente esterno un accesso limitato in sola lettura per auditare 50 siti senza dargli le chiavi del kingdom.</p>



<h2 class="wp-block-heading">Audit log e tracciabilità</h2>



<p class="wp-block-paragraph">Abilities API prevede un sistema di audit log integrato che registra ogni chiamata. Questo è fondamentale in contesti regolamentati (GDPR, AI Act, NIS2).</p>



<h3 class="wp-block-heading">Hook per audit log</h3>



<pre class="wp-block-code"><code>// registra ogni chiamata ability nel log custom
add_action( 'wp_ability_executed', function( $slug, $input, $output, $user_id ) {
    $log_entry = array(
        'timestamp' =&gt; current_time( 'mysql' ),
        'user_id'   =&gt; $user_id,
        'ability'   =&gt; $slug,
        'input'     =&gt; $input,
        'success'   =&gt; ! is_wp_error( $output ),
        'ip'        =&gt; $_SERVER['REMOTE_ADDR'] ?? ''
    );
    global $wpdb;
    $wpdb-&gt;insert( $wpdb-&gt;prefix . 'abilities_audit_log', $log_entry );
}, 10, 4 );</code></pre>



<h3 class="wp-block-heading">Export log per compliance</h3>



<pre class="wp-block-code"><code># esporta audit log per compliance GDPR/AI Act
wp db query "SELECT * FROM wp_abilities_audit_log WHERE timestamp &gt; DATE_SUB(NOW(), INTERVAL 90 DAY) AND ability LIKE 'seo-audit/%'" --format=json &gt; audit_seo_90gg.json</code></pre>



<p class="wp-block-paragraph">Questo tipo di tracciabilità è esattamente ciò che la <a href="https://www.mrtux.it/ai-use-disclosure-plugin-wordpress-directory-standard" data-wpel-link="internal" target="_self" rel="noopener">AI-use disclosure del Plugin Directory</a> richiede per i plugin AI, ed è applicabile anche a plugin non-AI in contesti enterprise.</p>



<h2 class="wp-block-heading">Confronto rapido: Abilities API vs approccio tradizionale</h2>




<figure class="wp-block-table"><table><thead><tr><th>Aspetto</th><th>Abilities API 6.9</th><th>Hook + reflection</th><th>REST endpoint custom</th></tr></thead><tbody><tr><td>Funziona quando</td><td>WP 6.9+</td><td>Qualsiasi WP</td><td>Qualsiasi WP con rewrite</td></tr><tr><td>Capability check</td><td>Nativo, dichiarativo</td><td>Manuale via current<em>user</em>can</td><td>Manuale via permission_callback</td></tr><tr><td>Audit log</td><td>Integrato via hook</td><td>Custom</td><td>Custom</td></tr><tr><td>Schema validation</td><td>Sì (input/output)</td><td>No</td><td>Sì, ma solo lato HTTP</td></tr><tr><td>Performance</td><td>Diretto in-process</td><td>Reflection overhead</td><td>HTTP overhead</td></tr><tr><td>Documentazione</td><td>Self-describing via schema</td><td>Solo codice</td><td>OpenAPI/Swagger</td></tr><tr><td>Rischio</td><td>Basso (è core)</td><td>Medio</td><td>Medio-alto (auth, CORS)</td></tr></tbody></table></figure>




<h2 class="wp-block-heading">Roadmap adozione per agenzia</h2>



<p class="wp-block-paragraph">Ecco come un&#x27;agenzia WordPress può adottare Abilities API in 30 giorni:</p>



<p class="wp-block-paragraph"><strong>Settimana 1</strong>: aggiorna tutti i siti di sviluppo a WordPress 6.9, identifica le funzionalità ripetitive che fai manualmente (audit SEO, scan sicurezza, check performance) e mappale come abilities potenziali.</p>



<p class="wp-block-paragraph"><strong>Settimana 2</strong>: sviluppa un plugin leggero <code>agenzia-abilities-pack</code> con 5-8 abilities custom per i tuoi workflow ricorrenti. Pubblicalo come plugin interno o nel repository.</p>



<p class="wp-block-paragraph"><strong>Settimana 3</strong>: integra le abilities nei tuoi tool WP-CLI per audit massivi su tutti i siti clienti. Esempio: <code>wp agenzia audit-all-clients</code>.</p>



<p class="wp-block-paragraph"><strong>Settimana 4</strong>: crea una dashboard custom che chiama 10+ abilities via REST (estensione opzionale) per offrire al cliente un report visuale senza esporre l&#x27;admin WordPress.</p>



<h2 class="wp-block-heading">Checklist operativa</h2>



<p class="wp-block-paragraph">Per adottare Abilities API senza errori comuni:</p>



<ul class="wp-block-list"><li>Aggiorna a WordPress 6.9+ su staging prima di produzione</li><li>Definisci slug standard per le tue abilities (<code>namespace/action-name</code>)</li><li>Documenta ogni ability con input/output schema completi</li><li>Testa sempre capability matrix prima di rilasciare in produzione</li><li>Configura audit log retention secondo policy GDPR (default 90 giorni)</li><li>Monitora performance: troppe abilities chiamate in loop possono rallentare</li><li>Versiona le abilities con prefisso <code>v1/</code>, <code>v2/</code> per future breaking changes</li></ul>



<h2 class="wp-block-heading">FAQ su Abilities API WordPress 6.9</h2>



<h3 class="wp-block-heading">Abilities API funziona con WordPress 6.8 e precedenti?</h3>



<p class="wp-block-paragraph">No, è una novità di WordPress 6.9. Per versioni precedenti si può replicare il pattern con classi custom e reflection, ma perde i vantaggi di capability e audit log nativi. Il consiglio è aggiornare a 6.9.</p>



<h3 class="wp-block-heading">Serve un plugin aggiuntivo per usare le abilities?</h3>



<p class="wp-block-paragraph">No, le API di base (<code>wp_register_ability</code>, <code>wp_get_ability</code>) sono in core 6.9. Plugin aggiuntivi possono aggiungere abilities specifiche (es. un plugin SEO che registra le proprie abilities), ma non sono necessari per l&#x27;uso.</p>



<h3 class="wp-block-heading">Le abilities sostituiscono REST API?</h3>



<p class="wp-block-paragraph">No, sono complementari. Le abilities vivono in-process PHP, REST API vive via HTTP. Per uso server-side (cron, WP-CLI, plugin-to-plugin) usa abilities. Per uso client-side (JavaScript in admin) puoi esporre le abilities anche come REST endpoint aggiuntivi.</p>



<h3 class="wp-block-heading">Come gestisco abilities che dipendono da plugin di terze parti?</h3>



<p class="wp-block-paragraph">L&#x27;ability deve verificare che il plugin sia attivo prima di registrarsi o eseguire il callback. Usa <code>function_exists()</code>, <code>class_exists()</code> o <code>is_plugin_active()</code> come guard. Se la dipendenza manca, restituisci un <code>WP_Error</code> chiaro.</p>



<h3 class="wp-block-heading">Le abilities sono adatte a siti multisite?</h3>



<p class="wp-block-paragraph">Sì, anzi sono particolarmente utili in multisite perché permettono di centralizzare capability matrix e audit log a livello di network. Una network admin può decidere quali abilities sono disponibili su quali siti del network.</p>



<h3 class="wp-block-heading">È sicuro esporre abilities sensibili via REST?</h3>



<p class="wp-block-paragraph">Solo se il permission_callback verifica capability. Mai esporre abilities con capability <code>manage_options</code> senza un check lato REST equivalente. Il pattern consigliato è <code>permission_callback =&gt; &#x27;__return_true&#x27;</code> solo dopo <code>current_user_can($ability-&gt;capability)</code>.</p>



<h2 class="wp-block-heading">Riferimenti utili per approfondire</h2>



<ul class="wp-block-list"><li><a href="https://kinsta.com/blog/wordpress-6-9/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">Kinsta: What&#x27;s new in WordPress 6.9</a> - panoramica completa delle novità incluse Abilities API con esempi</li><li><a href="https://wordpress.org/news/2026/05/wordpress-6-9/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">WordPress 6.9 release notes ufficiale</a> - changelog dettagliato del rilascio</li><li><a href="https://github.com/WordPress/gutenberg/tree/trunk/packages/abilities" target="_blank" rel="noopener nofollow external" data-wpel-link="external">GitHub Gutenberg repository Abilities API</a> - source code e PR della API</li><li><a href="https://www.mrtux.it/wordpress-plugin-team-2026-triage-ai" data-wpel-link="internal" target="_self" rel="noopener">Plugin Team: AI triage 2026 (mrtux.it)</a> - contesto ufficiale di come il Plugin Team usa Abilities API</li><li><a href="https://www.mrtux.it/wp-plugin-ai-mcp-abilities-pattern" data-wpel-link="internal" target="_self" rel="noopener">Pattern MCP + Abilities (mrtux.it)</a> - pattern ufficiale Plugin Team per plugin AI</li><li><a href="https://www.mrtux.it/ai-use-disclosure-plugin-wordpress-directory-standard" data-wpel-link="internal" target="_self" rel="noopener">AI-use disclosure Plugin Directory (mrtux.it)</a> - compliance con il nuovo standard</li><li><a href="https://www.mrtux.it/wp-cli-2026-guida-completa-ai" data-wpel-link="internal" target="_self" rel="noopener">WP-CLI 2026 guida completa (mrtux.it)</a> - automazione abilities via WP-CLI</li><li><a href="https://rankmath.com/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">Rank Math SEO plugin</a> - esempio di plugin che può esporre abilities SEO</li><li><a href="https://www.wordfence.com/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">Wordfence Security plugin</a> - esempio di plugin security che può esporre abilities scan</li><li><a href="https://querymonitor.com/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">Query Monitor plugin</a> - tool di performance check utile come ability</li><li><a href="https://developer.wordpress.org/rest-api/authentication/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">WordPress REST API authentication</a> - per esporre abilities in sicurezza via REST</li><li><a href="https://modelcontextprotocol.io/" target="_blank" rel="noopener nofollow external" data-wpel-link="external">Anthropic Model Context Protocol</a> - contesto architetturale MCP che usa Abilities API</li></ul>
]]></content:encoded>
					
					<wfw:commentRss>https://www.mrtux.it/abilities-api-wordpress-6-9-casi-uso-non-ai/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
