{"id":5680,"date":"2026-10-16T07:46:38","date_gmt":"2026-10-16T05:46:38","guid":{"rendered":"https:\/\/darioiannascoli.it\/blog\/wordpress-multi-author-collaboration-security-rbac-revision-tracking-xml-rpc\/"},"modified":"2026-10-16T07:46:38","modified_gmt":"2026-10-16T05:46:38","slug":"wordpress-multi-author-collaboration-security-rbac-revision-tracking-xml-rpc","status":"publish","type":"post","link":"https:\/\/darioiannascoli.it\/blog\/wordpress-multi-author-collaboration-security-rbac-revision-tracking-xml-rpc\/","title":{"rendered":"WordPress Multi-Author Collaboration Security: La Mia Procedura Role-Based Access Control, Revision Tracking, XML-RPC Hardening e Comment Moderation Workflow"},"content":{"rendered":"<p>Nella mia esperienza come System Administrator, ho gestito siti WordPress con team editoriali complessi, e posso dirvi che la sicurezza in ambienti multi-author non \u00e8 una scelta facoltativa. <strong>Quando pi\u00f9 persone hanno accesso al backend<\/strong>, il rischio di errori accidentali, compromessi di account e gestione caotica dei contenuti cresce esponenzialmente. Oggi vi mostro come implementare un framework di sicurezza solido per la collaborazione multi-author che ho sviluppato nel corso degli ultimi anni lavorando con agenzie di contenuti e redazioni editoriali.<\/p>\n<p>Nel 2026, i siti membership e multisite <strong>hanno adottato RBAC nel 66,2% dei casi<\/strong> contro il 37,8% dei siti standard\u2014una differenza significativa che dimostra quanto sia critica la separazione dei privilegi. Tuttavia, implementare RBAC senza audit trail robusti, protezione dell&#8217;XML-RPC e workflow di moderazione \u00e8 come installare una serratura di qualit\u00e0 su una porta con il vetro rotto.<\/p>\n<h2>Come Implementare Role-Based Access Control (RBAC) Personalizzato in WordPress<\/h2>\n<p>WordPress <strong>fornisce RBAC out-of-the-box<\/strong>, ma i ruoli predefiniti (Administrator, Editor, Author, Contributor, Subscriber) sono troppo generici per team articolati. Quello che ho imparato \u00e8 che devo creare ruoli custom con permessi granulari per evitare che un content moderator abbia accesso accidentale alle impostazioni di plugin critici.<\/p>\n<h3>Step 1: Creare Ruoli Custom con Members o Advanced Access Manager<\/h3>\n<p>Uso il plugin <em>Advanced Access Manager (AAM)<\/em> per creare ruoli custom che riflettono la struttura del mio team. Ad esempio:<\/p>\n<ul>\n<li><strong>Editor Editoriale<\/strong>: pu\u00f2 creare, modificare, pubblicare e rivedere contenuti, ma non accede a plugin o temi.<\/li>\n<li><strong>Comment Moderator<\/strong>: accesso esclusivo alla sezione commenti, senza privilegi su post o pagine.<\/li>\n<li><strong>SEO Specialist<\/strong>: pu\u00f2 visualizzare metadati, ma non modificare il contenuto principale.<\/li>\n<li><strong>Junior Contributor<\/strong>: pu\u00f2 creare bozze, ma non pubblicare.<\/li>\n<\/ul>\n<p>Inizialmente non funzionava perch\u00e9 assegnavo troppi permessi ai ruoli custom\u2014i team tendono a chiedere pi\u00f9 accesso del necessario. Ho imparato che \u00e8 meglio partire da permessi minimali e aggiungerne altri su richiesta documentata.<\/p>\n<h3>Step 2: Implementare Permission Matrix con Codice Custom<\/h3>\n<p>Per i siti ad alto volume, creo una <strong>permission matrix codificata in un file MU-plugin<\/strong> per evitare che le impostazioni vadano perse durante aggiornamenti di plugin:<\/p>\n<pre><code>\/\/ \/wp-content\/mu-plugins\/rbac-custom-roles.php\n&lt;?php\n\nadd_action('init', 'register_custom_editor_role');\n\nfunction register_custom_editor_role() {\n    \/\/ Definire il ruolo &quot;Content Editor Avanzato&quot;\n    remove_role('content_editor');\n    \n    $capabilities = [\n        'edit_posts'              =&gt; true,\n        'edit_others_posts'       =&gt; true,\n        'edit_published_posts'    =&gt; true,\n        'publish_posts'           =&gt; true,\n        'manage_categories'       =&gt; true,\n        'moderate_comments'       =&gt; true,\n        \/\/ Bloccare l'accesso a plugin e temi\n        'activate_plugins'        =&gt; false,\n        'manage_options'          =&gt; false,\n        'edit_theme_options'      =&gt; false,\n    ];\n    \n    add_role('content_editor', __('Content Editor Avanzato'), $capabilities);\n}\n\n\/\/ Logging dei cambiamenti di ruolo\nadd_action('set_user_role', 'log_user_role_change');\n\nfunction log_user_role_change($user_id) {\n    $user = get_user_by('id', $user_id);\n    $message = sprintf(\n        'Ruolo utente %s modificato a %s',\n        $user-&gt;user_login,\n        implode(', ', $user-&gt;roles)\n    );\n    error_log($message);\n}\n<\/code><\/pre>\n<p>Questo approccio <strong>centralizza la logica RBAC<\/strong> e rende facile audit dei cambiamenti di ruolo nel log di sistema.<\/p>\n<h3>Step 3: Limitare l&#8217;Accesso Dashboard per Ruolo<\/h3>\n<p>Non tutti gli editor devono vedere il menu completo di WordPress. Uso il seguente codice per nascondere voci di menu non rilevanti:<\/p>\n<pre><code>\/\/ Nascondere plugin e temi menu per non-admin\nadd_action('admin_menu', 'remove_menu_items_for_editors');\n\nfunction remove_menu_items_for_editors() {\n    $current_user = wp_get_current_user();\n    \n    if (in_array('content_editor', $current_user-&gt;roles)) {\n        remove_menu_page('plugins.php');\n        remove_menu_page('themes.php');\n        remove_menu_page('options-general.php');\n        remove_menu_page('tools.php');\n    }\n}\n<\/code><\/pre>\n<h2>Revision Tracking e Audit Log: La Base della Accountability<\/h2>\n<p>Ho scoperto che le revisioni native di WordPress non tracciavano <strong>chi aveva fatto login, quali impostazioni erano state cambiate, o quali plugin erano stati installati<\/strong>. Ho implementato un sistema a due livelli: revisioni di contenuto + audit log strutturato.<\/p>\n<h3>Step 1: Configurare WP Activity Log per Audit Completo<\/h3>\n<p>Installo <em>WP Activity Log<\/em> (plugin robusto per team) per tracciare:<\/p>\n<ul>\n<li>Chi ha modificato quali post e quando.<\/li>\n<li>Accessi admin e fallimenti di login.<\/li>\n<li>Cambiamenti di impostazioni di plugin\/tema.<\/li>\n<li>Installazione\/disattivazione di plugin.<\/li>\n<li>Modifiche ai ruoli utente.<\/li>\n<\/ul>\n<p>Configuro il plugin per mantenere log per <strong>almeno 90 giorni<\/strong> e for forwarding remoto verso un syslog server esterno per archivio a lungo termine. Questo \u00e8 critico per la conformit\u00e0 GDPR e NIS2\u2014non puoi modificare un log che si trova sul tuo server.<\/p>\n<h3>Step 2: Limitare Revisioni Salvate per Efficienza Database<\/h3>\n<p>Troppi post con troppi salvataggi intasano il database. Aggiungo questo al wp-config.php:<\/p>\n<pre><code>\/\/ Limitare a 5 revisioni per post\ndefine('WP_POST_REVISIONS', 5);\n\n\/\/ Disabilitare le revisioni per page e custom post type a basso valore\nadd_filter('wp_revisions_to_keep', function($num, $post) {\n    if ('page' === $post-&gt;post_type) {\n        return 3; \/\/ Solo 3 revisioni per pagine statiche\n    }\n    return 5;\n}, 10, 2);\n<\/code><\/pre>\n<h3>Step 3: Implementare Revision Comparison Workflow per Collaboratori<\/h3>\n<p>Uso il plugin <strong>Multicollab<\/strong> per permettere ai team di vedere <em>inline comments<\/em> e <em>suggestions tracking<\/em> direttamente nell&#8217;editor\u2014questo riduce i feedback loop e traccia chi ha proposto quali cambiamenti.<\/p>\n<h2>XML-RPC Hardening: Chiudere la Porta dei Brute-Force Amplificati<\/h2>\n<p>L&#8217;XML-RPC \u00e8 probabilmente la <strong>falla di sicurezza pi\u00f9 sottovalutata in WordPress<\/strong>. A inizio 2025, ho registrato attacchi che sfruttavano il metodo <em>system.multicall<\/em> per fare 100+ tentativi di login in una singola richiesta HTTP, bypassando completamente il rate limiting standard di WordPress.<\/p>\n<h3>Step 1: Disabilitare XML-RPC Completamente (se non necessario)<\/h3>\n<p>Il 95% dei siti non necessita XML-RPC. Se il vostro team non usa <strong>Jetpack<\/strong> o l&#8217;app mobile WordPress, disabilitatelo immediatamente:<\/p>\n<pre><code>\/\/ \/wp-content\/mu-plugins\/disable-xmlrpc.php\n&lt;?php\n\n\/\/ Disabilitare l'endpoint XML-RPC a livello di applicazione\nadd_filter('xmlrpc_enabled', '__return_false');\n\n\/\/ Rimuovere il link RSD dall'head (information disclosure)\nremove_action('wp_head', 'rsd_link');\n\n\/\/ Registrare i tentativi di accesso a xmlrpc.php\nadd_action('init', function() {\n    if (strpos($_SERVER['REQUEST_URI'], 'xmlrpc.php') !== false) {\n        error_log(sprintf(\n            'Tentativo XML-RPC bloccato da %s',\n            $_SERVER['REMOTE_ADDR']\n        ));\n    }\n});\n<\/code><\/pre>\n<p>Se Jetpack \u00e8 attivo e <strong>devi<\/strong> mantenere XML-RPC, restringo l&#8217;accesso ai metodi sicuri e aggiungo rate limiting aggressivo.<\/p>\n<h3>Step 2: Bloccare XML-RPC a Livello Server (Apache\/Nginx)<\/h3>\n<p>Anche disabilitando a livello di applicazione, configuro il web server per bloccare le richieste prima che raggiungano PHP:<\/p>\n<p><strong>Per Apache (.htaccess):<\/strong><\/p>\n<pre><code>&lt;Files xmlrpc.php&gt;\n    Order Allow,Deny\n    Deny from all\n&lt;\/Files&gt;\n<\/code><\/pre>\n<p><strong>Per Nginx (server block):<\/strong><\/p>\n<pre><code>location = \/xmlrpc.php {\n    deny all;\n    return 403;\n}\n<\/code><\/pre>\n<h3>Step 3: Rate-Limiting con WAF se XML-RPC \u00e8 Necessario<\/h3>\n<p>Se mantengo XML-RPC per Jetpack, aggiungo un WAF rule in ModSecurity o Cloudflare:<\/p>\n<pre><code>\/\/ Limitare a 10 richieste per IP al minuto per \/xmlrpc.php\nSecRule ARGS:method \"@pm wp.getUsersBlogs system.multicall\" \n    \"id:9001,phase:2,chain,msg:'XML-RPC brute-force detected'\"\n    SecRule IP:xmlrpc_count \"@ge 10\" \n        \"chain,deny,status:429\"\n    SecAction \"setvar:IP.xmlrpc_count=+1,expirevar:IP.xmlrpc_count=60\"\n<\/code><\/pre>\n<h2>Comment Moderation Workflow: Proteggere Discussioni Multi-Author<\/h2>\n<p>In un ambiente multi-author, i commenti spesso diventano un vettore di spam coordinato e molestie. Ho sviluppato un workflow in strati che equilibra sicurezza, user experience e moderazione umana.<\/p>\n<h3>Step 1: Configurare Discussion Settings Base<\/h3>\n<p>Vado in <strong>Impostazioni &gt; Discussione<\/strong> e setto:<\/p>\n<ul>\n<li><strong>Comment author must have a previously approved comment:<\/strong> abilitato. I commentatori abituali passano automaticamente; il resto va in coda.<\/li>\n<li><strong>Hold a comment in the queue if it contains 2 or more links:<\/strong> 2 (il numero perfetto\u2014spam link-heavy viene trattenuto senza bloccare discussioni legittime).<\/li>\n<li><strong>Automatically close comments on posts older than:<\/strong> 30 days (riduce spam su contenuti vecchi).<\/li>\n<li><strong>Disallowed Comment Keys:<\/strong> Aggiungo termini reali che il mio team identifica nel spam giornaliero.<\/li>\n<\/ul>\n<h3>Step 2: Assegnare Ruolo Comment Moderator Specifico<\/h3>\n<p>Non tutte le community manager devono essere Editor full. Creo un ruolo che <strong>accede solo ai commenti<\/strong>:<\/p>\n<pre><code>\/\/ Registrare ruolo Comment Moderator\nadd_action('init', 'register_comment_moderator_role');\n\nfunction register_comment_moderator_role() {\n    remove_role('comment_moderator');\n    \n    $capabilities = [\n        'edit_comments'      =&gt; true,\n        'moderate_comments'  =&gt; true,\n        'delete_comments'    =&gt; true,\n        'manage_comment_options' =&gt; true,\n        \/\/ Bloccare accesso a tutto il resto\n        'read'               =&gt; true, \/\/ solo per visualizzare il dashboard\n    ];\n    \n    add_role('comment_moderator', __('Comment Moderator'), $capabilities);\n}\n<\/code><\/pre>\n<h3>Step 3: Layered Anti-Spam Protection<\/h3>\n<p>La strategia \u00e8 <em>defense in depth<\/em>. Layer 1 \u00e8 discussione settings, Layer 2 \u00e8 un plugin anti-spam:<\/p>\n<p><strong>Opzione cloud (consigliata per volumi alti):<\/strong> Akismet analizza i commenti contro un database globale di spam. Quando il team riceve &gt;500 commenti al giorno, Akismet risparmia ore di moderazione manuale.<\/p>\n<p><strong>Opzione server-local (privacy-first):<\/strong> Antispam Bee non invia dati a servizi esterni\u2014usa honeypot e pattern matching locale.<\/p>\n<pre><code>\/\/ Honeypot implementato manualmente nei comment form custom\nadd_action('comment_form', 'add_honeypot_field');\n\nfunction add_honeypot_field() {\n    echo '&lt;div style=\"display:none;\"&gt;';\n    echo '&lt;label for=\"honeypot_field\"&gt;Lasciare vuoto:&lt;\/label&gt;';\n    echo '&lt;input type=\"text\" id=\"honeypot_field\" name=\"honeypot_field\" value=\"\" \/&gt;';\n    echo '&lt;\/div&gt;';\n}\n\n\/\/ Validare honeypot\nadd_filter('preprocess_comment', 'validate_honeypot');\n\nfunction validate_honeypot($commentdata) {\n    if (!empty($_POST['honeypot_field'])) {\n        wp_die('Spam detected');\n    }\n    return $commentdata;\n}\n<\/code><\/pre>\n<h3>Step 4: Moderazione AI-Assisted per Tono e Contesto<\/h3>\n<p>Per siti con discussioni complesse (tech, politica, finanza), ho integrato un <strong>sentiment analysis plugin<\/strong> che flagga commenti particolarmente ostili o off-topic, permettendo ai moderatori umani di dargli priorit\u00e0.<\/p>\n<p>Questo <strong>non blocca automaticamente<\/strong>\u2014il moderatore decide\u2014ma riduce il rumore.<\/p>\n<h2>Implementazione Integrata: Monitoraggio Real-Time<\/h2>\n<p>Combino tutti questi elementi in un <strong>security dashboard custom<\/strong> che il mio team consulta ogni mattina:<\/p>\n<pre><code>\/\/ \/wp-content\/mu-plugins\/dashboard-security-summary.php\n&lt;?php\n\nadd_action('wp_dashboard_setup', 'add_security_summary_widget');\n\nfunction add_security_summary_widget() {\n    wp_add_dashboard_widget(\n        'security_summary',\n        'Riepilogo Sicurezza Multi-Author',\n        'render_security_summary_widget'\n    );\n}\n\nfunction render_security_summary_widget() {\n    $failed_logins = count(array_filter(\n        get_option('login_attempts', []),\n        fn($attempt) =&gt; !$attempt['success'] &amp;&amp; time() - $attempt['time'] &lt; 86400\n    ));\n    \n    $pending_comments = wp_count_comments()-&gt;moderated;\n    $pending_users = count_users();\n    \n    echo '&lt;ul&gt;';\n    printf('&lt;li&gt;Tentativi falliti login (24h): %d&lt;\/li&gt;', $failed_logins);\n    printf('&lt;li&gt;Commenti in coda: %d&lt;\/li&gt;', $pending_comments);\n    printf('&lt;li&gt;Utenti attivi: %d&lt;\/li&gt;', $pending_users['total_users']);\n    echo '&lt;\/ul&gt;';\n}\n<\/code><\/pre>\n<h2>FAQ<\/h2>\n<h3>Quale plugin \u00e8 migliore per RBAC: Advanced Access Manager (AAM) o Members?<\/h3>\n<p>Ho testato entrambi ampiamente. <strong>AAM \u00e8 pi\u00f9 robusto per setup complessi<\/strong> con decine di ruoli custom, ma Members \u00e8 pi\u00f9 leggero per siti con 3-4 ruoli base. Consiglio AAM se il budget lo permette; Members \u00e8 la scelta giusta per PMI.<\/p>\n<h3>Disabilitare XML-RPC basta a proteggere dal brute-force?<\/h3>\n<p>S\u00ec, nel 95% dei casi. Ma se Jetpack \u00e8 attivo, il brute-force pu\u00f2 comunque colpire wp-login.php. Per protezione completa, aggiungo fail2ban o un WAF con rate limiting su login. La combinazione di XML-RPC disabilitato + wp-login.php rate-limited chiude le due principali porte di brute-force.<\/p>\n<h3>Come monitoro veramente se i moderatori fanno il loro lavoro?<\/h3>\n<p>WP Activity Log traccia chi ha approvato\/rifiutato quali commenti e quando. Genero report settimanali che mostrano tempo di risposta medio e quali moderatori approvano pi\u00f9 contenuti. Questo aiuta a identificare sotto-utilizzo o accesso sospetto.<\/p>\n<h3>Posso limitare l&#8217;accesso di un editor solo a specifiche categorie di post?<\/h3>\n<p>S\u00ec, con Advanced Access Manager. Creo un ruolo personalizzato e uso la tab &#8220;Post &amp; Pages&#8221; per limitare l&#8217;accesso per tassonomia. In alternativa, uso il plugin <strong>Content Control<\/strong> per restriczioni a livello di post type.<\/p>\n<h3>Qual \u00e8 l&#8217;impatto di performance del audit logging completo?<\/h3>\n<p>WP Activity Log aggiunge 10-50ms per richiesta admin a seconda del volume. Per siti con traffic admin pesante (&gt;50 admin contemporaneamente), archiviare i log su un server remoto (syslog) riduce I\/O locale. Ho misurato: log remoto = quasi zero overhead.<\/p>\n<h2>Conclusione<\/h2>\n<p>La <strong>sicurezza della collaborazione multi-author in WordPress<\/strong> \u00e8 un framework composto da quattro pilastri: RBAC granulare, audit trail completo, hardening dell&#8217;XML-RPC e moderazione dei commenti strutturata. Implementare questi quattro elementi insieme riduce drasticamente il rischio di compromesso interno, errore umano e abuso di privilegi.<\/p>\n<p>Nel mio ambiente di produzione, questo framework supporta team di 20+ contributor senza compromessi di sicurezza. Ho visto siti con 50+ autori dove nessuno sa quale sia il role di nessun altro\u2014il risultato \u00e8 sempre caos. Documenta i ruoli, monitora i log, e testa i cambiamenti in staging prima del rollout a produzione.<\/p>\n<p>Se gestite un sito editoriale complesso, cominciate domani mattina: implementate un <em>comment_moderator<\/em> role, disabilitate XML-RPC, e installate un plugin di audit. Il resto seguir\u00e0 naturalmente. Ditemi nei commenti se usate altri strumenti per RBAC multi-author\u2014sono sempre curioso di ascoltare cosa funziona in produzione.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Implementa RBAC granulare, revision tracking, XML-RPC hardening e comment moderation per proteggere siti WordPress multi-author. Procedura completa per team editor.<\/p>\n","protected":false},"author":1,"featured_media":5681,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_seopress_titles_title":"WordPress Multi-Author Security: RBAC, XML-RPC, Audit Log","_seopress_titles_desc":"Guida pratica per implementare RBAC, revision tracking, disabilitare XML-RPC e moderazione commenti su WordPress multi-author. Codice testato e workflow real-time.","_seopress_robots_index":"","_seopress_robots_follow":"","_seopress_robots_imageindex":"","_seopress_robots_snippet":"","_seopress_robots_primary_cat":"","_seopress_robots_breadcrumbs":"","_seopress_robots_freeze_modified_date":"","_seopress_robots_custom_modified_date":"","_seopress_robots_canonical":"","_seopress_social_fb_title":"WordPress Multi-Author Security: RBAC, XML-RPC, Audit Log","_seopress_social_fb_desc":"Guida pratica per implementare RBAC, revision tracking, disabilitare XML-RPC e moderazione commenti su WordPress multi-author. Codice testato e workflow real-time.","_seopress_social_fb_img":"https:\/\/darioiannascoli.it\/blog\/wp-content\/uploads\/2026\/10\/wordpress-multi-author-collaboration-security-la-mia-procedura-role-based-access-control-revision-tracking-xml-rpc-harde-1792129601.jpg","_seopress_social_fb_img_attachment_id":0,"_seopress_social_fb_img_width":0,"_seopress_social_fb_img_height":0,"_seopress_social_twitter_title":"WordPress Multi-Author Security: RBAC, XML-RPC, Audit Log","_seopress_social_twitter_desc":"Guida pratica per implementare RBAC, revision tracking, disabilitare XML-RPC e moderazione commenti su WordPress multi-author. Codice testato e workflow real-time.","_seopress_social_twitter_img":"https:\/\/darioiannascoli.it\/blog\/wp-content\/uploads\/2026\/10\/wordpress-multi-author-collaboration-security-la-mia-procedura-role-based-access-control-revision-tracking-xml-rpc-harde-1792129601.jpg","_seopress_social_twitter_img_attachment_id":0,"_seopress_social_twitter_img_width":0,"_seopress_social_twitter_img_height":0,"_seopress_redirections_value":"","_seopress_redirections_enabled":"","_seopress_redirections_enabled_regex":"","_seopress_redirections_logged_status":"","_seopress_redirections_param":"","_seopress_redirections_type":0,"_seopress_analysis_target_kw":"WordPress role-based access control RBAC multi-author,WordPress revision tracking audit log,WordPress XML-RPC hardening security,WordPress comment moderation workflow,WordPress multi-author collaboration security","footnotes":""},"categories":[2],"tags":[1430,1428,1427,237,1429],"class_list":["post-5680","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-wordpress","tag-comment-moderation","tag-multi-author-collaboration","tag-rbac-access-control","tag-wordpress-security","tag-xml-rpc-hardening"],"_links":{"self":[{"href":"https:\/\/darioiannascoli.it\/blog\/wp-json\/wp\/v2\/posts\/5680","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=5680"}],"version-history":[{"count":0,"href":"https:\/\/darioiannascoli.it\/blog\/wp-json\/wp\/v2\/posts\/5680\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/darioiannascoli.it\/blog\/wp-json\/wp\/v2\/media\/5681"}],"wp:attachment":[{"href":"https:\/\/darioiannascoli.it\/blog\/wp-json\/wp\/v2\/media?parent=5680"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/darioiannascoli.it\/blog\/wp-json\/wp\/v2\/categories?post=5680"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/darioiannascoli.it\/blog\/wp-json\/wp\/v2\/tags?post=5680"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}