Scegli una formula per gli @id
Prima del codice, una decisione: come si chiama ogni nodo. Nel grafo un’entità esiste una volta sola e tutti gli altri nodi la richiamano per @id. Se lo stesso Topic compare su cento articoli, deve avere lo stesso @id su tutti e cento, altrimenti per chi legge il grafo sono cento entità diverse con lo stesso nome.
La formula che uso è questa: l’URL della pillar del termine, se esiste ed è pubblicata, altrimenti la home, più un frammento con tassonomia e slug. L’@id così è stabile, leggibile e ancorato alla pagina che di quel termine parla davvero.
Crea un file bcm-schema.php in wp-content/mu-plugins/ e parti da qui:
<?php
/**
* Plugin Name: BCM Schema – Topic e Target nel grafo di Yoast
* Description: Aggiunge i Topic come DefinedTerm (about) e i Target come Audience (audience).
*/
if (!defined('ABSPATH')) {
exit;
}
function bcm_pillar_url(WP_Term $term): ?string {
$pillar_id = (int) get_term_meta($term->term_id, 'bcm_pillar_page', true);
if ($pillar_id && get_post_status($pillar_id) === 'publish') {
return get_permalink($pillar_id);
}
return null;
}
function bcm_term_node_id(WP_Term $term): string {
$base = bcm_pillar_url($term) ?? home_url('/');
return $base . '#bcm-' . $term->taxonomy . '-' . $term->slug;
}Un @id non è un URL da visitare: è un nome. Per questo il frammento non deve per forza esistere come ancora nella pagina.
