Controlla quali blocchi Gutenberg sono presenti in post_content


19

Sto lavorando a un design che ha uno stile diverso se un certo blocco Gutenberg è presente in una pagina. In altre parole, se il primo blocco è un blocco Gutenberg personalizzato, il post_title viene visualizzato altrove a causa delle scelte di progettazione fatte.

Esiste una funzione in WordPress per ottenere un elenco di tutti i blocchi Gutenberg presenti nel post_content?


Esiste un sito Web thatblocks.com Quando si digita l'URL di una pagina Web, questa esegue la scansione della pagina e scopre quali blocchi di gutenberg vengono utilizzati nella pagina.
Teena Babu

Risposte:


27

WordPress 5.0+ ha una funzione per questo: parse_blocks(). Per vedere se il primo blocco nel post è il blocco Heading, dovresti farlo:

$post = get_post(); 

if ( has_blocks( $post->post_content ) ) {
    $blocks = parse_blocks( $post->post_content );

    if ( $blocks[0]['blockName'] === 'core/heading' ) {
    }
}

Grazie! Non sono riuscito a trovare questa funzione. Stranamente il mio codice personalizzato fa praticamente la stessa cosa ma con un codice decisamente inferiore! In ogni caso, contrassegnato come accettato in quanto è la funzione integrata appropriata.
Jeffrey von Grumbkow il

3
Questa funzione è stata deprecata (ma solo rinominata), dovresti has_blocks($blockName)invece usare : github.com/WordPress/gutenberg/pull/8631/commits/… . C'è anche has_block()(senza "s").
Nico Prat,

@NicoPrat abbiamo aggiornato la risposta per riflettere i metodi corretti
Jeffrey von Grumbkow,

Tieni presente che esiste un problema noto nel momento in cui parse_blocks()restituisce blocchi inesistenti come elementi dell'array NULL - core.trac.wordpress.org/ticket/45312
Lee

2

La soluzione che sto usando al momento della scrittura controlla il post_content per i commenti HTML di Gutenberg. A causa dei futuri cambiamenti di Gutenberg, questo potrebbe non funzionare in futuro.

<?php    
$post_content = get_the_content( get_the_ID() ); // Get the post_content
preg_match_all('<!-- /wp:(.*?) -->', $post_content, $blocks); // Get all matches in between <!-- /wp: --> strings

// $blocks[1] contains the names of all the blocks present in the post_content
if ( in_array( 'heading', $blocks[1] ) ) {
    // Post content contains a wp:heading block
}
else {
    // Post content does not contain a wp:heading block
}

0

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 autonomo di Gutenberg.

Invece di gutenberg_content_has_blocksusarehas_blocks

Invece di gutenberg_parse_blocksusareparse_blocks


2
La cosa di @JeffreyvonGrumbkow è che ian-hoyte ha un rappresentante basso per modificare o commentare =)
honk31
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.