Vérifier la nature des blocs de Gutenberg dans post_content

4

Je travaille sur un dessin ayant 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?

    
posée Jeffrey von Grumbkow 02.08.2018 - 10:52

3 réponses

4

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' ) {
    }
}
    
réponse donnée Jacob Peattie 02.08.2018 - 12:52
1

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 apportés par 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
}
    
réponse donnée Jeffrey von Grumbkow 02.08.2018 - 11:26
-1

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

Au lieu de gutenberg_content_has_blocks , utilisez has_blocks

Au lieu de gutenberg_parse_blocks , utilisez parse_blocks

    
réponse donnée ian-hoyte 06.12.2018 - 20:09

Lire d'autres questions sur les étiquettes