Verifique o que os blocos de Gutenberg estão em post_content

4

Estou trabalhando em um design que possui estilo diferente se um determinado bloco de Gutenberg estiver presente em uma página. Em outras palavras, se o primeiro bloco for um bloco de Gutenberg personalizado, o post_title será renderizado em outro lugar devido às escolhas de design feitas.

Existe alguma função no WordPress para obter uma lista de todos os blocos de Gutenberg presentes no post_content?

    
por Jeffrey von Grumbkow 02.08.2018 / 10:52

3 respostas

4

O WordPress 5.0+ tem uma função para isso: parse_blocks() . Para ver se o primeiro bloco na postagem é o bloco "Cabeçalho", você faria isso:

$post = get_post(); 

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

    if ( $blocks[0]->blockName === 'core/heading' ) {
    }
}
    
por Jacob Peattie 02.08.2018 / 12:52
1

A solução que estou usando como escrita confere o post_content para os comentários em HTML do Gutenberg. Devido a futuras mudanças no Gutenberg, isso pode não funcionar no 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
}
    
por Jeffrey von Grumbkow 02.08.2018 / 11:26
-1

A partir do lançamento do 5.0, essas funções foram substituídas pelo Gutenberg agora integrado ao núcleo. Eu imagino, mas não confirmei que estas funções ainda existem no plugin autônomo de Gutenberg.

Em vez de gutenberg_content_has_blocks use has_blocks

Em vez de gutenberg_parse_blocks use parse_blocks

    
por ian-hoyte 06.12.2018 / 20:09