Controlla quali blocchi Gutenberg sono presenti nel post_content
Sto lavorando su un design che ha uno stile diverso se un determinato blocco Gutenberg è presente in una pagina. In altre parole, se il primo blocco è un blocco Gutenberg personalizzato, il post_title viene renderizzato altrove a causa delle scelte di design effettuate.
Esiste una funzione in WordPress per ottenere un elenco di tutti i blocchi Gutenberg presenti nel post_content?
 
                            WordPress 5.0+ ha una funzione per questo: parse_blocks(). Per verificare se il primo blocco nel post è un blocco Heading, dovresti fare così:
$post = get_post(); 
if ( has_blocks( $post->post_content ) ) {
    $blocks = parse_blocks( $post->post_content );
    if ( $blocks[0]['blockName'] === 'core/heading' ) {
    }
}
 
                                Grazie! Non riuscivo a trovare questa funzione. Curiosamente il mio codice personalizzato fa praticamente la stessa cosa ma con molto meno codice! Comunque, segnato come accettato dato che è la funzione integrata corretta.
 Jebble
                            Jebble
                        Questa funzione è stata deprecata (ma solo rinominata), dovresti usare has_blocks($blockName) invece: https://github.com/WordPress/gutenberg/pull/8631/commits/7e5efa2bcfa02c970a9bf0955e04a34a532157e7. C'è anche has_block() (senza la "s").
 Nico Prat
                            Nico Prat
                        @NicoPrat abbiamo aggiornato la risposta per riflettere i metodi corretti
 Jebble
                            Jebble
                        Tieni presente che attualmente esiste un problema noto in cui parse_blocks() restituisce blocchi inesistenti come elementi NULL dell'array - https://core.trac.wordpress.org/ticket/45312
 Lee
                            Lee
                        https://developer.wordpress.org/reference/functions/parse_blocks/ :)
 bbeecher
                            bbeecher
                        La soluzione che sto utilizzando al momento della scrittura controlla il post_content per i commenti HTML di Gutenberg. A causa di futuri cambiamenti in Gutenberg, questo potrebbe non funzionare in futuro.
<?php    
$post_content = get_the_content( get_the_ID() ); // Ottieni il post_content
preg_match_all('<!-- /wp:(.*?) -->', $post_content, $blocks); // Ottieni tutte le corrispondenze tra le stringhe <!-- /wp: -->
// $blocks[1] contiene i nomi di tutti i blocchi presenti nel post_content
if ( in_array( 'heading', $blocks[1] ) ) {
    // Il contenuto del post contiene un blocco wp:heading
}
else {
    // Il contenuto del post non contiene un blocco wp:heading
}
 
                                A partire dalla versione 5.0 queste funzioni sono state deprecate con Gutenberg ora integrato nel core. Immagino, ma non ho confermato, che queste funzioni esistano ancora nel plugin standalone di Gutenberg.
Invece di gutenberg_content_has_blocks usa has_blocks
Invece di gutenberg_parse_blocks usa parse_blocks
