web-dev-qa-db-fra.com

Vérifiez ce que sont les blocs de Gutenberg dans post_content

Je travaille sur un design qui a un style différent si un certain bloc de Gutenberg est présent sur une page. En d'autres termes, si le premier bloc est un bloc de Gutenberg construit sur mesure, le post_title est rendu ailleurs, en raison des choix de conception effectués.

Existe-t-il une fonction dans WordPress permettant d’obtenir une liste de tous les blocs de Gutenberg présents dans le post_content?

9

WordPress 5.0+ a une fonction pour cela: parse_blocks(). Pour voir si le premier bloc de l'article est le bloc En-tête, procédez comme suit:

$post = get_post(); 

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

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

La solution que j'utilise au moment de l'écriture vérifie le post_content pour les commentaires HTML de Gutenberg. En raison de futurs changements de Gutenberg, cela pourrait ne pas fonctionner à l'avenir.

<?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
}
1

Depuis la sortie de la version 5.0, ces fonctions étaient obsolètes, Gutenberg étant désormais intégré au noyau. J'imagine, mais je n'ai pas confirmé que ces fonctions existent toujours dans le plugin autonome Gutenberg.

Au lieu de gutenberg_content_has_blocks, utilisez has_blocks

Au lieu de gutenberg_parse_blocks, utilisez parse_blocks

0
ian-hoyte