Controlla quali blocchi Gutenberg sono presenti nel post_content

2 ago 2018, 11:52:45
Visualizzazioni: 31.9K
Voti: 32

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?

1
Commenti

Esiste un sito web https://whichblocks.com/ che, quando inserisci l'URL di una pagina web, analizza la pagina e identifica quali blocchi Gutenberg sono stati utilizzati.

Teena Babu Teena Babu
14 feb 2020 11:33:47
Tutte le risposte alla domanda 3
5
45

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' ) {
    }
}
2 ago 2018 13:52:03
Commenti

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
2 ago 2018 14:36:00

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
12 nov 2018 11:16:10

@NicoPrat abbiamo aggiornato la risposta per riflettere i metodi corretti

Jebble Jebble
10 dic 2018 17:24:50

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
18 apr 2019 16:34:47
0

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
}
2 ago 2018 12:26:09
1

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

6 dic 2018 21:09:21
Commenti

@JeffreyvonGrumbkow il fatto è che ian-hoyte ha un reputazione troppo bassa per modificare o commentare =)

honk31 honk31
4 mar 2019 18:11:04