Wordpress utilise le méta-champ enceinte pour régler les médias. Il s'agit de la balise correcte selon la spécification RSS. J'ai vu des personnes suggérer d'utiliser média:contenu mais si vous l'utilisez, assurez-vous de définir l'espace de nom XML.
Malheureusement, en raison d'un code Wordpress douteux, vous ne pouvez pas le définir dynamiquement. (Wordpress récupère tous les méta-champs et les parcourt en boucle au lieu d'appeler directement l'enceinte).
Vous pouvez définir l'enceinte sur le poste de sauvegarde. Ce devrait être un tableau avec des entrées de la forme "$url\n$length\n$type"
Si vous souhaitez ajouter vous-même les balises de clôture, vous pouvez procéder comme suit :
RSS
add_action( 'rss2_item', 'hughie_rss2_item_enclosure' );
function hughie_rss2_item_enclosure():void
{
$id = get_post_thumbnail_id();
$url = wp_get_attachment_url($id);
$length = filesize(get_attached_file($id));
$type = get_post_mime_type($id);
echo apply_filters( 'rss_enclosure', '<enclosure url="' . esc_url( $url ) . '" length="' . absint( $length ) . '" type="' . esc_attr( $type ) . '" />' . "\n" );
}
ATOM :
add_action( 'atom_entry', 'hughie_atom_entry_enclosure' );
function hughie_atom_entry_enclosure():void
{
$id = get_post_thumbnail_id();
$url = wp_get_attachment_url($id);
$length = filesize(get_attached_file($id));
$type = get_post_mime_type($id);
echo apply_filters( 'atom_enclosure', '<link rel="enclosure" href="' . esc_url( $url ) . '" length="' . absint( $length ) . '" type="' . esc_attr( $type ) . '" />' . "\n" );
}
La seule façon que j'ai trouvée pour définir le enceinte dynamiquement, c'est court-circuiter l'appel get_metadata. Vous pouvez ajouter des contrôles pour vous assurer que vous êtes dans un flux ou même vérifier le stacktrace pour vous en assurer.
add_filter('get_post_metadata', 'hughie_get_post_metadata', 10, 5 );
function hughie_get_post_metadata($value, int $object_id, string $meta_key, bool $single, string $meta_type)
{
if (is_feed() && $meta_key === '') {
$backtrace = debug_backtrace();
if (isset($backtrace[7]['function']) && ( $backtrace[7]['function'] === 'rss_enclosure' || $backtrace[7]['function'] === 'atom_enclosure' ) ) {
if (!isset($value['enclosure'])) {
$value['enclosure'] = [];
}
$id = get_post_thumbnail_id();
$url = wp_get_attachment_url($id);
$length = filesize(get_attached_file($id));
$type = get_post_mime_type($id);
$value['enclosure'][] = "$url\n$length\n$type";
}
}
return $value;
}