Comprobar qué bloques de Gutenberg hay en post_content

2 ago 2018, 11:52:45
Vistas: 31.9K
Votos: 32

Estoy trabajando en un diseño que tiene diferentes estilos si cierto bloque de Gutenberg está presente en una página. En otras palabras, si el primer bloque es un bloque de Gutenberg personalizado, el post_title se renderiza en otro lugar debido a decisiones de diseño.

¿Existe alguna función en WordPress para obtener una lista de todos los bloques de Gutenberg presentes en el post_content?

1
Comentarios

Existe un sitio web https://whichblocks.com/ donde al ingresar la URL de una página web, escanea la página e identifica qué bloques de Gutenberg se utilizan en ella.

Teena Babu Teena Babu
14 feb 2020 11:33:47
Todas las respuestas a la pregunta 3
5
45

WordPress 5.0+ tiene una función para esto: parse_blocks(). Para verificar si el primer bloque en la publicación es el bloque de Encabezado, harías esto:

$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
Comentarios

¡Gracias! No podía encontrar esta función. Curiosamente, mi código personalizado hace básicamente lo mismo pero con mucho menos código. De cualquier forma, lo marco como aceptado ya que es la función incorporada correcta.

Jebble Jebble
2 ago 2018 14:36:00

Esta función ha quedado obsoleta (solo se renombró), deberías usar has_blocks($blockName) en su lugar: https://github.com/WordPress/gutenberg/pull/8631/commits/7e5efa2bcfa02c970a9bf0955e04a34a532157e7. También existe has_block() (sin la "s").

Nico Prat Nico Prat
12 nov 2018 11:16:10

@NicoPrat hemos actualizado la respuesta para reflejar los métodos correctos

Jebble Jebble
10 dic 2018 17:24:50

Ten en cuenta que actualmente hay un problema conocido donde parse_blocks() devuelve bloques no existentes como elementos NULL en el array - https://core.trac.wordpress.org/ticket/45312

Lee Lee
18 abr 2019 16:34:47
0

La solución que estoy utilizando al momento de escribir esto verifica los comentarios HTML de Gutenberg en el post_content. Debido a futuros cambios en Gutenberg, esto podría no funcionar en el futuro.

<?php    
$post_content = get_the_content( get_the_ID() ); // Obtener el post_content
preg_match_all('<!-- /wp:(.*?) -->', $post_content, $blocks); // Obtener todas las coincidencias entre las cadenas <!-- /wp: -->

// $blocks[1] contiene los nombres de todos los bloques presentes en el post_content
if ( in_array( 'heading', $blocks[1] ) ) {
    // El contenido del post contiene un bloque wp:heading
}
else {
    // El contenido del post no contiene un bloque wp:heading
}
2 ago 2018 12:26:09
1

A partir del lanzamiento de la versión 5.0, estas funciones han quedado obsoletas con la integración de Gutenberg en el núcleo. Imagino, aunque no lo he confirmado, que estas funciones todavía existen en el plugin independiente de Gutenberg.

En lugar de gutenberg_content_has_blocks usa has_blocks

En lugar de gutenberg_parse_blocks usa parse_blocks

6 dic 2018 21:09:21
Comentarios

@JeffreyvonGrumbkow el problema es que ian-hoyte tiene muy poca reputación para editar o comentar =)

honk31 honk31
4 mar 2019 18:11:04