 
      
Vous êtes arrivés ici soit par hasard, soit parce que vous cherchez désespérément à modifier le DOM des gallery Gutenberg. Pour les 1er c est pas grave ça vous servira peut être un jour, pour les seconds par contre, votre Graal est ici, quelques lignes plus bas.
Graal ? Carrément… t’as craqué mec
Effectivement j’ai bien craqué, quand j’ai passé 5h à chercher comment faire ce truc, à trouver le bon hook. Avant Gutenberg il fallait ajouter un filtre sur post_gallery, ça c’est les 1er articles que j’ai trouvé et j’étais content. Mais Gutenberg a tout changé, et n’a pas re-implelmenté cet event, j’ai remonté les pistes sur le depot git, les Issues ouvertes et fermées, tout ça pour arriver à la fin à un nom… “register_block_type”.
Ba ouai mec “register_block_type”
Arrêtes de m’appeler mec, mon gars
Je vous épargne la lecture de la doc wordpress avec le server-side rendering ou le client-side rendering, PHP ou JS, preview dans Gutenberg ou pas. Dans mon cas je voulais juste ajouter une balise <a> autour de mes <img>, donc server-side rendering (PHP)
Et t’es content maintenant ? T’as passé l’aprem a faire ça, sinon tu ajoutes le plugin FancyBox et t’arrêtes de nous saouler
Moins il y a de plugin plus le site sera robuste face aux mises à jour, de plus je développe mon thème, j ai déjà une version de jQuery, pas besoin qu’un plugin m’ajoute une version en plus, ajoute des filtres et autres trucs qu’on a rien a battre, et non merci au freemium
Alors craches le morceau !
Dans vos headers
    <script src="https://cdn.jsdelivr.net/npm/jquery@3.4.1/dist/jquery.min.js"></script>
    
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/fancyapps/fancybox@3.5.7/dist/jquery.fancybox.min.css" />
    <script src="https://cdn.jsdelivr.net/gh/fancyapps/fancybox@3.5.7/dist/jquery.fancybox.min.js"></script>
Dans votre function.php
register_block_type('core/gallery', array(
        'render_callback' => 'add_fancyBox',
    )
);
function add_fancyBox($data, $content){
    $dom = DOMDocument::loadHTML ($content, LIBXML_NOERROR );
    $imgNodes = $dom->getElementsByTagName('img');
    foreach ($imgNodes as $nodeImg) {
        $aNode = $dom->createElement('a');
        $aNode->setAttribute('data-fancybox', 'gallery-'.md5(json_encode($data)));
        $aNode->setAttribute('href', $nodeImg->getAttribute('src'));
        $fragment = $dom->createDocumentFragment();
        $aNode->appendChild( $nodeImg->cloneNode(true) );
        $fragment->appendChild( $aNode );
        $nodeImg->parentNode->replaceChild( $fragment, $nodeImg );
    }
    return $dom->saveHTML();
}Je ne suis pas développeur de thème expérimenté mais ça fait le job, si vous avez une meilleures façon de faire, je suis preneur.
 
							   
									  
Commentaires