Verifică ce blocuri Gutenberg sunt prezente în post_content

2 aug. 2018, 11:52:45
Vizualizări: 31.9K
Voturi: 32

Lucrez la un design care are un stil diferit dacă un anumit bloc Gutenberg este prezent pe o pagină. Mai exact, dacă primul bloc este un bloc Gutenberg personalizat, post_title este randat în altă parte datorită deciziilor de design luate.

Există vreo funcție în WordPress pentru a obține o listă cu toate blocurile Gutenberg prezente în post_content?

1
Comentarii

Există un site web https://whichblocks.com/ Când introduci adresa URL a unei pagini web, acesta scanează pagina și identifică ce blocuri Gutenberg sunt folosite în acea pagină.

Teena Babu Teena Babu
14 feb. 2020 11:33:47
Toate răspunsurile la întrebare 3
5
45

WordPress 5.0+ are o funcție pentru asta: parse_blocks(). Pentru a verifica dacă primul bloc din articol este blocul Heading (Titlu), ai putea face astfel:

$post = get_post(); 

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

    if ( $blocks[0]['blockName'] === 'core/heading' ) {
    }
}
2 aug. 2018 13:52:03
Comentarii

Mulțumesc! Nu am putut găsi această funcție. În mod amuzant, codul meu personal face practic același lucru dar cu mult mai puțin cod! Oricum, marcat ca acceptat deoarece este funcția corectă integrată.

Jebble Jebble
2 aug. 2018 14:36:00

Această funcție a fost învechită (dar doar redenumită), ar trebui să folosești has_blocks($blockName) în loc: https://github.com/WordPress/gutenberg/pull/8631/commits/7e5efa2bcfa02c970a9bf0955e04a34a532157e7. Există și has_block() (fără "s").

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

@NicoPrat am actualizat răspunsul pentru a reflecta metodele corecte

Jebble Jebble
10 dec. 2018 17:24:50

Ține minte că în prezent există o problemă cunoscută în care parse_blocks() returnează blocuri inexistente ca elemente NULL în array - https://core.trac.wordpress.org/ticket/45312

Lee Lee
18 apr. 2019 16:34:47
0

Soluția pe care o folosesc în momentul de față verifică post_content pentru comentariile HTML Gutenberg. Datorită modificărilor viitoare ale Gutenberg, acest lucru s-ar putea să nu mai funcționeze în viitor.

<?php    
$post_content = get_the_content( get_the_ID() ); // Obține conținutul postului
preg_match_all('<!-- /wp:(.*?) -->', $post_content, $blocks); // Obține toate potrivirile dintre șirurile <!-- /wp: -->

// $blocks[1] conține numele tuturor blocurilor prezente în post_content
if ( in_array( 'heading', $blocks[1] ) ) {
    // Conținutul postului conține un bloc wp:heading
}
else {
    // Conținutul postului nu conține un bloc wp:heading
}
2 aug. 2018 12:26:09
1

Începând cu versiunea 5.0, aceste funcții au fost învechite, deoarece Gutenberg a fost integrat în nucleul WordPress. Presupun, dar nu am confirmat, că aceste funcții încă există în plugin-ul standalone Gutenberg.

În loc de gutenberg_content_has_blocks folosiți has_blocks

În loc de gutenberg_parse_blocks folosiți parse_blocks

6 dec. 2018 21:09:21
Comentarii

@JeffreyvonGrumbkow problema este că, ian-hoyte are reputație prea mică pentru a edita sau comenta =)

honk31 honk31
4 mar. 2019 18:11:04