Vérifiez quels blocs Gutenberg sont dans post_content


19

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

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


Il existe un site Web whichblocks.com Lorsque vous saisissez l'url d'une page Web, il scanne la page et découvre les blocs gutenberg utilisés dans la page.
Teena Babu

Réponses:


27

WordPress 5.0+ a une fonction pour cela: parse_blocks(). Pour voir si le premier bloc de la publication est le bloc d'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' ) {
    }
}

Merci! Je n'ai pas pu trouver cette fonction. Curieusement, mon code personnalisé fait essentiellement la même chose mais avec beaucoup moins de code! Quoi qu'il en soit, marqué comme accepté car c'est la fonction intégrée appropriée.
Jeffrey von Grumbkow

3
Cette fonction est obsolète (mais seulement renommée), vous devez utiliser à la has_blocks($blockName)place: github.com/WordPress/gutenberg/pull/8631/commits/… . Il y a aussi has_block()(sans "s").
Nico Prat

@NicoPrat nous avons mis à jour la réponse pour refléter les méthodes correctes
Jeffrey von Grumbkow

Gardez à l'esprit qu'il existe un problème connu en ce moment où parse_blocks()renvoie des blocs inexistants en tant qu'éléments de tableau NULL - core.trac.wordpress.org/ticket/45312
Lee

2

La solution que j'utilise au moment de l'écriture vérifie le post_content pour les commentaires HTML de Gutenberg. En raison des modifications futures 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
}

0

Depuis la sortie de la version 5.0, ces fonctions sont 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 d' gutenberg_content_has_blocksutilisationhas_blocks

Au lieu d' gutenberg_parse_blocksutilisationparse_blocks


2
@JeffreyvonGrumbkow est, ian-hoyte doit avoir un faible représentant pour éditer ou commenter =)
honk31
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.