Se hai mai avuto un collaboratore “invisibile” (autore fantasma, traduttore non accreditato, editor che non vuole un account) e ti sei ritrovato a dover creare ruoli o account condivisi, WordPress è cambiato su un punto specifico: il modo in cui noi mette in risalto persone senza concedere loro un accesso superiore a quello necessario.
Cosa cambia
A partire da WordPress 6.9 (e quindi pienamente rilevante su WordPress 6.9.4 nell'aprile 2026), il team principale e l'ecosistema Gutenberg Stanno insistendo con maggiore forza su un'idea che circola da tempo tra editori e team: “Valorizzare gli individui” Questo non è uno slogan di marketing; è una direzione di prodotto. In termini concreti, vediamo l'emergere (o la stabilizzazione) di primitive e modelli che ci permettono di attribuzione, presentazione e gestione delle identità (autori, coautori, editori, traduttori, ospiti) senza cadere nei classici anti-pattern: account condivisi, ruoli "Autore" eccessivamente ampi o plugin che scrivono direttamente in post_author senza garanzie.
Questo movimento si traduce in tre aree di cambiamento che ho visto emergere nei progetti per il periodo 2025-2026:
- Modellizzazione : separare la “persona visualizzata” dall’“account WordPress che dispone dei diritti di modifica”.
- Interfaccia utente / Editor : rendere più coerente la selezione/visualizzazione dell'identità nell'editor a blocchi (inclusi i modelli FSE).
- API / Interoperabilità : standardizzare il modo in cui temi e plugin leggono e visualizzano queste informazioni (evitando di compromettere le implementazioni esistenti).
Per quanto riguarda le fonti ufficiali, tenete a portata di mano le seguenti:
- Notizie per gli sviluppatori (note principali per gli sviluppatori) per le modifiche “principali”.
- Pubblicazione di Gutenberg per le modifiche che spesso avvengono prima nell'editor.
- Trac WordPress Core per tracciare i ticket (cerca per parole chiave “autore”, “utente”, “firma”, “profilo”).
Punto di vigilanza “Elevare gli individui” è un tema trasversale. Non esiste un singolo ticket “ufficiale” di Trac che copra tutto. In pratica, incontrerai cambiamenti tra le versioni (core e Gutenberg) che riguardano autori, visualizzazione del profilo e permessi. Il mio consiglio: trattalo come un migrazione del modello dati e non come “un’opzione di interfaccia”.
Riassunto veloce
- Scopo : per mettere in evidenza le persone (firma, biografia, contatti, ruolo editoriale) sans Assegna loro un account amministratore/autore predefinito.
- cambiamento concreto : evitiamo il sovraccarico
post_author; passiamo attraverso arrivo (post meta) o un tassonomia “persona”, con rendering controllato. - Per i blogger : coautori, ospiti, profili autore dedicati, maggiore coerenza nei modelli FSE.
- Per gli sviluppatori : necessità di un contratto (API interna) per leggere/scrivere i crediti e per proteggere la modifica (funzionalità + nonce).
- Rischio principale : si rischia di compromettere gli archivi SEO/autore se si effettua la migrazione senza reindirizzamenti e senza una strategia canonica.
- Da fare Standardizza il tuo modello (persone vs account), aggiungi un livello di visualizzazione e testa con cache + page builder.
Prima/Dopo nel codice
Il "prima" che vedo più spesso sui siti WordPress intermedi: deviamo post_author oppure creiamo account WordPress solo per mostrare un nome.
Prima (anti-modello): forza post_author per un autore ospite
Sembra semplice, ma stai mescolando l'identità visualizzata e i permessi. E ti esponi a effetti collaterali (archivi degli autori, API REST, permessi, notifiche).
<?php
/**
* Anti-pattern : modifier l'auteur WordPress "réel" pour gérer un auteur invité.
* Problèmes : permissions, archives auteur, audit, SEO, confusion dans l'admin.
*/
add_action('save_post', function ($post_id, $post, $update) {
// Mauvais : pas de nonce, pas de capability, et déclenché sur autosave/révisions
if (wp_is_post_revision($post_id) || wp_is_post_autosave($post_id)) {
return;
}
// Exemple : on force l'auteur à l'utilisateur ID 2 (compte "Invité")
wp_update_post([
'ID' => $post_id,
'post_author' => 2,
]);
}, 10, 3);
?>
Dopo (modello “Valorizzare le persone”): separare “account dell’editore” e “persona accreditata”
Approccio robusto: mantieni post_author come ad esempio un “account WordPress responsabile” (audit, permessi), e si memorizzano gli utenti accreditati in una struttura dedicata. Per mantenere le cose semplici e compatibili, spesso consiglio:
- Tassonomia
person(pubblico o semi-pubblico) per "profili" riutilizzabili. - Post meta per la relazione (ID del termine, ordine, ruolo di visualizzazione).
Esempio minimo: créer una tassonomia “Persone” e salva un meta byline_person_ids (Array di ID dei termini) ha esposto REST per l'editor.
<?php
/**
* Pattern : taxonomie "person" + post meta "byline_person_ids".
* Compatible WordPress 6.9.4+ / PHP 8.1+.
*/
add_action('init', function () {
register_taxonomy('person', ['post'], [
'label' => 'Personnes',
'public' => true,
'show_in_rest' => true, // Utile si vous voulez une UI dans l'éditeur via REST
'show_admin_column' => true,
'rewrite' => ['slug' => 'personne'],
'capabilities' => [
// Optionnel : vous pouvez affiner qui peut gérer les profils
'manage_terms' => 'edit_users',
'edit_terms' => 'edit_users',
'delete_terms' => 'edit_users',
'assign_terms' => 'edit_posts',
],
]);
});
add_action('init', function () {
register_post_meta('post', 'byline_person_ids', [
'type' => 'array',
'single' => true,
'show_in_rest' => [
'schema' => [
'type' => 'array',
'items' => ['type' => 'integer'],
],
],
'auth_callback' => function () {
// Sécurité : seuls les utilisateurs pouvant éditer des posts peuvent modifier
return current_user_can('edit_posts');
},
'sanitize_callback' => function ($value) {
// On force un tableau d'entiers uniques
if (!is_array($value)) {
return [];
}
$value = array_map('absint', $value);
$value = array_values(array_unique(array_filter($value)));
return $value;
},
'default' => [],
]);
});
/**
* Rendu front : utiliser la byline si présente, sinon fallback sur l'auteur WP.
*/
function bpcab_get_byline_html(int $post_id): string {
$person_ids = get_post_meta($post_id, 'byline_person_ids', true);
if (!is_array($person_ids) || $person_ids === []) {
$author_id = (int) get_post_field('post_author', $post_id);
$name = get_the_author_meta('display_name', $author_id);
return '<span class="byline">' . esc_html($name) . '</span>';
}
$names = [];
foreach ($person_ids as $term_id) {
$term = get_term($term_id, 'person');
if ($term && !is_wp_error($term)) {
$names[] = esc_html($term->name);
}
}
if ($names === []) {
return '';
}
return '<span class="byline">' . implode(', ', $names) . '</span>';
}
?>
Cosa cambia davvero
- Audit L'account WordPress che effettua le modifiche rimane tracciabile tramite
post_author. - Visualizzazione : puoi accreditare 1, 2, 5 persone e gestire un ordine.
- Interop È possibile esporre i dati all'editore tramite REST e utilizzarli in un blocco, un modello o un page builder.
Impatto concreto
Per blogger (di livello intermedio)
Si ottiene una flessibilità che il WordPress "puro" non ha mai offerto nativamente: visualizzare coautori, ospiti, un team editoriale o persino un traduttore, senza dover creare 10 account WordPress. Nei blog con più autori, questa è spesso la funzionalità che semplifica maggiormente la gestione.
Ho riscontrato spesso questo problema su siti in cui il team editoriale utilizza un account "Editoriale" condiviso. Il giorno in cui si ha bisogno di verificare "chi ha modificato cosa", è troppo tardi.
Per sviluppatori e agenzie
È necessario formalizzare un mini “contratto”: dove risiedono i dati della “persona”, come vengono gestiti e come vengono restituiti. Se lasci ogni plug-in Se provi a fare tutto da solo (uno nei metadati del post, uno nei metadati dell'utente, uno negli shortcode), finirai per avere modelli ingestibili.
- Plugin esistenti : quelli che presuppongono “1 post = 1 autore” potrebbero visualizzare informazioni incoerenti (widget “Articoli dell’autore”, breadcrumb, JSON-LD).
- Temi classici : dovrai sostituire
the_author()/get_the_author_meta()nei tuoi modelli tramite il livello "firma". - Temi FSE (temi a blocchi) : dovrai gestire il rendering tramite un blocco (personalizzato) o tramite un pattern che consuma i metadati.
Impatto su Divi 5, Elementor, Avada
I page builder non "comprendono" automaticamente il modello della tua firma. Tuttavia, si integrano bene se fornisci loro un output stabile (shortcode, blocco o widget).
- Divi 5 È possibile visualizzare la firma tramite un modulo "Codice" o un modulo "Testo" con uno shortcode. Divi a volte utilizza la cache in modo aggressivo: dopo la migrazione, svuota la cache di Divi e la cache del server.
- Elementor Utilizza un widget "Shortcode" o un "Tag dinamico" se stai mappando i metadati. Nota: alcuni temi ed Elementor memorizzano nella cache il template, quindi testalo su diversi articoli.
- Avada (Fusion Builder) È sufficiente un elemento "Code Block" o "Shortcode". Avada offre le proprie opzioni SEO/Schema: verifica che la firma non duplichi il markup dell'autore.
Esempio: uno shortcode stabile, utilizzabile ovunque (editor classico, blocco Shortcode, Divi, Elementor, Avada).
<?php
/**
* Shortcode [byline] pour afficher les personnes créditées.
* Utile pour les page builders et les templates.
*/
add_shortcode('byline', function ($atts) {
$post_id = get_the_ID();
if (!$post_id) {
return '';
}
return bpcab_get_byline_html((int) $post_id);
});
?>
Rischi, compatibilità e punti di vigilanza
Cosa c'è di nuovo e cosa sta cambiando
- Nuovo (approccio) : preferiamo strutture dati che rappresentino le “persone” indipendentemente dagli account WP.
- Cambiamento (pratiche) : smettiamo di “barare” con
post_authore conti condivisi. - Può rompere : archivi degli autori, SEO (schema autore), widget "articoli dell'autore", pagine "Informazioni sull'autore" e, a volte, filtri REST sul lato headless.
Rischi SEO (la vera trappola)
Se si passa da un modello "autore WP" a un modello "tassonomia persona", si potrebbero perdere:
- URL degli archivi degli autori (
/author/nom/) se fossero indicizzati, - il markup JSON-LD (Autore) generato dal tuo tema/plugin SEO,
- Collegamenti interni alle pagine degli autori.
Raccomando di decidere esplicitamente:
- o tu conserva gli archivi degli autori WP e tu corrispondi “persona” → “utente” (più complesso),
- o tu creare Pagine "Persona" (tassonomia) e si inserisce reindirizza 301 dai vecchi archivi dell'autore.
Compatibilità con cache e rendering
Un errore comune: si esegue la migrazione, si effettua un test e "non cambia nulla". Il problema spesso deriva dalla cache.
- cache di pagina (plugin/server),
- cache delle risorse (CSS/JS),
- generatore di cache (Divi/Elementor/Avada),
- OPcache lato server PHP.
Dopo una migrazione della firma, cancello sistematicamente la cache del browser, la cache del builder e la cache del server, quindi eseguo nuovamente il test in modalità di navigazione privata.
Sicurezza e autorizzazioni
Il rischio è semplice: se ti esponi byline_person_ids tramite REST senza auth_callback A rigor di termini, chiunque può modificare i crediti. Su un sito di notizie, questo è un vero e proprio caso (falsificazione della firma).
Un altro errore comune: usare un gancio inappropriato (ad esempio init vs rest_api_init) oppure registrare i metadati troppo tardi. Risultato: i metadati non vengono visualizzati nelle API REST e la tua interfaccia utente JavaScript "non vede nulla".
Tempistiche di ammortamento (pragmatico)
Il core di WordPress non è "deprecato" post_author (Questo non accadrà). L'ammortamento è principalmente funzionale Sempre più strumenti (blocchi, modelli, template) presuppongono che l'identità visualizzata possa essere diversa da quella di un singolo utente. Il tuo codice "1 autore = 1 utente" funzionerà ancora, ma sarà sempre meno in linea con le esigenze editoriali.
Come migrare
Propongo una migrazione in 6 fasi che funziona bene sui siti esistenti, senza interrompere la produzione. Il principio è il seguente: aggiungiamo il nuovo template, lo rendiamo compatibile e poi passiamo gradualmente al nuovo.
Passaggio 1 — Backup e ambiente di test
- Clona il database e caricalo in un ambiente di pre-produzione.
- Verifica la versione di PHP 8.1 o successiva (altrimenti perderai tempo con errori "banali").
- Blocca gli aggiornamenti dei plugin durante la migrazione (altrimenti non saprai cosa è cambiato).
Passaggio 2 — Creare la tassonomia “persona” e il meta
Riutilizzare il codice "After" di cui sopra, idealmente in un mini-plugin (piuttosto che functions.php). Errore realistico: copiare il codice nel posto sbagliato (un plugin per snippet che viene eseguito troppo tardi, oppure un tema padre invece di un tema figlio).
Mini-plugin (struttura consigliata):
wp-content/plugins/byline-persons/byline-persons.php
Passaggio 3: Creare i “personaggi” a partire dagli autori esistenti
È possibile eseguire una migrazione graduale: creare un termine "persona" per ogni utente che ha pubblicato, quindi compilare byline_person_ids con questo termine.
Esempio WP-CLI (consigliato). Attenzione: testare prima su un piccolo campione.
<?php
/**
* Commande WP-CLI : wp byline migrate
* Crée des termes "person" pour les auteurs existants et renseigne byline_person_ids.
* À placer dans un plugin mu-plugin ou un plugin standard chargé en CLI.
*/
if (defined('WP_CLI') && WP_CLI) {
WP_CLI::add_command('byline migrate', function () {
$args = [
'post_type' => 'post',
'post_status' => 'any',
'posts_per_page' => -1,
'fields' => 'ids',
];
$post_ids = get_posts($args);
foreach ($post_ids as $post_id) {
$post_id = (int) $post_id;
// Si déjà migré, on saute
$existing = get_post_meta($post_id, 'byline_person_ids', true);
if (is_array($existing) && $existing !== []) {
continue;
}
$author_id = (int) get_post_field('post_author', $post_id);
if ($author_id <= 0) {
continue;
}
$display = get_the_author_meta('display_name', $author_id);
if (!$display) {
$display = 'Auteur #' . $author_id;
}
// Crée ou récupère le terme "person" correspondant
$slug = sanitize_title($display);
$term = term_exists($slug, 'person');
if (!$term) {
$created = wp_insert_term($display, 'person', [
'slug' => $slug,
]);
if (is_wp_error($created)) {
WP_CLI::warning("Impossible de créer la personne pour {$display} (post {$post_id})");
continue;
}
$term_id = (int) $created['term_id'];
} else {
$term_id = (int) (is_array($term) ? $term['term_id'] : $term);
}
update_post_meta($post_id, 'byline_person_ids', [$term_id]);
}
WP_CLI::success('Migration byline terminée.');
});
}
?>
Errori comuni:
- Dimenticare un punto e virgola può mandare in tilt l'intero WP-CLI.
- Avviare la produzione senza salvare.
- Non applicare filtri per tipo di contenuto (altrimenti migrerai involontariamente anche pagine/prodotti).
Passaggio 4: Cambia la visualizzazione senza interrompere il tema
Su un tema classico, sostituisci la visualizzazione dell'autore con la funzione "firma". Esempio:
<?php
// Avant : the_author();
echo bpcab_get_byline_html(get_the_ID());
?>
Su un tema del FSE, hai tre opzioni realistiche:
- un blocco personalizzato (pulito, ma più lungo)
- un modello con shortcode
[byline](veloce, accettabile) - un gancio di rendering se il tuo tema/stack lo consente (varia a seconda del tema).
Passaggio 5 — Adattare la SEO/lo schema
Se stai utilizzando un plugin SEO, controlla come genera autore nello schema. Se visualizzi più firme ma lo schema rimane "utente singolo", stai inviando un segnale incoerente.
Non fornisco un codice "universale" perché dipende molto dal plugin SEO, ma la tua checklist è valida:
- La firma visualizzata corrisponde al markup dello schema.
- le pagine “persona” (tassonomia) hanno una
titlee una meta descrizione adeguata, - Se devi reindirizzare gli archivi degli autori, fallo con un reindirizzamento 301, non con un reindirizzamento 302.
Passaggio 6 — Consultare una tabella diagnostica
| sintomo | Probabile causa | Verifica | Soluzione |
|---|---|---|---|
| La firma non appare nell'editor / REST | Meta non registrato con show_in_rest oppure caricato troppo tardi |
GET /wp-json/wp/v2/posts/<id> e guardare byline_person_ids |
Salva i metadati su init (o prima), controlla show_in_rest et auth_callback |
| La linea del fronte rimane invariata | Pagina/generatore di cache | Prova in modalità di navigazione privata + svuota la cache dei plugin + svuota la cache di Divi/Elementor/Avada | Svuota tutte le cache, disabilita la CDN se necessario |
| Errore 500 dopo l'aggiunta del frammento | Codice copiato nel posto sbagliato / Sintassi PHP | Log PHP, Abilita WP_DEBUG_LOG in fase di pre-produzione |
Aggiungilo a un plugin, correggi la sintassi, verifica PHP 8.1+ |
| Gli archivi dell'autore non corrispondono più | Stai visualizzando “persona” ma i link puntano a /author/ |
Esamina i link e i modelli delle firme | Crea pagine di tassonomia "persona" e reindirizzamenti 301, oppure mantieni il modello utente. |
| Un collaboratore può modificare i crediti. | Permessi eccessivi sulla meta/tassonomia | Test con il ruolo di "Collaboratore". | Harden auth_callbackEsamina le funzionalità di tassonomia, aggiungi i nonce all'interfaccia utente |
Dobbiamo agire ora o aspettare?
Se il tuo sito ha un solo autore, puoi aspettare. Non otterrai grandi vantaggi aggiungendo un livello "persona" se non intendi utilizzarlo.
Se il tuo sito presenta almeno una di queste caratteristiche, intervieni subito (in fase di pre-produzione):
- frequenti coautori, autori ospiti, contenuti sponsorizzati con marchio specifico,
- team editoriale che non desidera creare più account WordPress,
- Riprogettazione di FSE / transizione a un tema a blocchi
- È necessaria una verifica (chi ha modificato il testo e a chi è stato attribuito il merito).
Per esperienza, più si aspetta, più "eccezioni" si accumulano (post firmati in modo diverso, account condivisi, regole SEO specifiche). La migrazione si trasforma quindi in un'operazione SEO ad alto rischio anziché in una semplice riorganizzazione.
Consigli per la manutenzione
- Eseguire un test con ogni nuova versione di WordPress. (6.9.x → 6.10): editor + REST + rendering front-end. Le regressioni sono immediatamente visibili nei metadati esposti.
- Aggiungere test di non regressione Se disponi di uno stack CI: come minimo, un test che verifica che
byline_person_idsè presente in REST e il rendering non è vuoto. - Documenta il tuo contratto interno (README): "La firma viene letta qui, modificata in questo modo." Ciò impedisce a uno sviluppatore di aggiungere un secondo campo "author_name" altrove.
- Monitorare le prestazioni : se visualizzi la firma negli elenchi (home, categorie), evita un
get_term()Ciclo senza caching. Se possibile, utilizzare una cache di oggetti persistente. - Evitate collegamenti eccessivamente globali (Es.
the_content) per iniettare una firma: questo spesso causa problemi ai builder e agli extract. È preferibile utilizzare un template o un blocco dedicato.
Semplificheremo la visualizzazione della firma nei loop: precarichiamo i termini e limitiamo le query.
<?php
/**
* Exemple simple : réduire les appels get_term() en boucle.
* Ici, on met en cache (statique) les termes déjà chargés.
*/
function bpcab_get_person_term_name_cached(int $term_id): ?string {
static $cache = [];
if (array_key_exists($term_id, $cache)) {
return $cache[$term_id];
}
$term = get_term($term_id, 'person');
if (!$term || is_wp_error($term)) {
$cache[$term_id] = null;
return null;
}
$cache[$term_id] = $term->name;
return $cache[$term_id];
}
?>
Risorse
- Notizie per gli sviluppatori di WordPress (note di sviluppo e modifiche principali)
- register_taxonomy() (riferimento per sviluppatori)
- register_post_meta() (REST, schemi, auth_callback)
- Manuale API REST
- Pubblicazioni di Gutenberg (aggiornamenti dell'editor)
- WordPress Core Trac (ticket e patch)
- Documentazione di WordPress (guide e concetti)
- PHP.net — Array (per la corretta manipolazione degli ID)
FAQ
La funzionalità "Elevating Individuals" è presente in WordPress 6.9.4?
No, non si tratta di un singolo pulsante. È una direzione che si concretizza attraverso modifiche sparse (editor, modelli, REST, template) e soprattutto attraverso le migliori pratiche: separare l'identità visualizzata dall'account WordPress.
Devo assolutamente creare una tassonomia delle "persone"?
No. Puoi anche usare un tipo di post personalizzato "persona". La tassonomia è spesso più semplice per i profili leggeri (nome + slug + alcuni meta tag). I tipi di post personalizzati diventano interessanti se hai campi ricchi di informazioni, blocchi, relazioni e una pagina del profilo complessa.
Perché non utilizzare solo utenti WordPress?
Perché "visualizzare una firma" e "concedere i diritti di modifica" sono due esigenze diverse. La creazione di utenti guest aumenta la superficie di attacco (account inutilizzati, password, reimpostazioni) e complica le attività di controllo.
È compatibile con i temi FSE?
Sì, ma devi decidere come visualizzare la firma: shortcode, blocco personalizzato o pattern. Lo shortcode è il più veloce, mentre il blocco personalizzato è la soluzione più pulita a lungo termine.
Il mio plugin SEO include già l'autore nello schema. Cosa devo fare?
Verifica la coerenza. Se la firma mostra più persone, ma lo schema ne mostra solo una, ci sarà una discrepanza. A seconda del plugin SEO che utilizzi, potresti essere in grado di filtrare lo schema o selezionare una singola persona "principale". Esegui un test con lo strumento di verifica dei risultati avanzati.
Rompe gli archivi /author/ ?
Non automaticamente, ma probabilmente preferirai pagine dedicate alle singole persone. Se i tuoi archivi autore sono indicizzati, pianifica i reindirizzamenti 301 e una strategia di tag canonici.
Non riesco a visualizzare il meta tag nell'editor. Perché?
Il caso più comune: register_post_meta() non ha show_in_rest, o ilauth_callback Questo restituisce false per il tuo ruolo oppure il tuo codice viene caricato troppo tardi. Controlla la risposta REST della richiesta POST.
Posso memorizzare gli ID degli utenti in un campo ACF?
Sì, ma attenzione all'interoperabilità. Se ACF memorizza una struttura diversa, sarà necessario mantenere un livello di adattamento. Nelle piattaforme con page builder, un metadato standard per i post (un array di numeri interi) è spesso più semplice da utilizzare ovunque.
Qual è l'errore più comune durante la migrazione?
Modificare la visualizzazione in un punto trascurandone un altro (ad esempio, un singolo template va bene, ma schede articolo, widget, Open Graph, JSON-LD no). Creare un elenco di tutti i punti in cui compare l'autore.
Devo rigenerare i permalink?
Se aggiungi una regola di riscrittura per la tassonomia "persona", sì: vai su Impostazioni → Permalink e salva. È un problema classico: restituisce un errore 404 semplicemente perché le regole non sono allineate correttamente.