Post_content'te Gutenberg bloklarının neler olduğunu kontrol edin


20

Bir sayfada belirli bir Gutenberg bloğu varsa, farklı stile sahip bir tasarım üzerinde çalışıyorum. Başka bir deyişle, ilk blok özel olarak oluşturulmuş bir Gutenberg bloğuysa, post_title, yapılan tasarım seçimleri nedeniyle başka bir yerde oluşturulur.

WordPress'de post_content'te bulunan tüm Gutenberg bloklarının bir listesini almak için herhangi bir işlev var mı?


1
Bir web sitesi olan whoblocks.com Bir web sayfası URL'si yazdığınızda, sayfayı tarar ve sayfada hangi gutenberg bloklarının kullanıldığını öğrenir.
Teena Babu

Yanıtlar:


29

WordPress 5.0+ bunun için bir işlevi vardır: parse_blocks(). Gönderinin ilk bloğunun Başlık bloğu olup olmadığını görmek için şunu yaparsınız:

$post = get_post(); 

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

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

Teşekkürler! Bu işlevi bulamadım. Funnily benim özel kod temelde aynı şeyi yapar ama çok daha az kod ile! Her neyse, uygun yerleşik işlev olarak kabul edildi olarak işaretlendi.
Jeffrey von Grumbkow

3
Bu işlev kullanımdan kaldırılmıştır (ancak yalnızca yeniden adlandırılmıştır), has_blocks($blockName)bunun yerine şunu kullanmalısınız : github.com/WordPress/gutenberg/pull/8631/commits/… . Ayrıca var has_block()("s" olmadan).
Nico Prat

@NicoPrat Cevabı doğru yöntemleri yansıtacak şekilde güncelledik
Jeffrey von Grumbkow

Şu anda parse_blocks()var olmayan blokları NULL dizi öğeleri olarak döndürdüğü bilinen bir sorun olduğunu unutmayın - core.trac.wordpress.org/ticket/45312
Lee

2

Yazarken kullandığım çözüm Gutenberg HTML yorumları için post_content kontrol edin. Gelecekte Gutenberg değişiklikleri nedeniyle bu gelecekte çalışmayabilir.

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

5.0 sürümünden itibaren bu işlevler şimdi çekirdek içine entegre edilmiş Gutenberg ile birlikte kullanımdan kaldırılmıştır. Hayal ediyorum, ancak bu işlevlerin hala Gutenberg bağımsız eklentisinde var olduğunu doğrulamamıştım.

Yerine gutenberg_content_has_blockskullanımıhas_blocks

Yerine gutenberg_parse_blockskullanımıparse_blocks


2
@JeffreyvonGrumbkow bir şey, ian-hoyte düzenlemek veya yorum yapmak için düşük temsilcisi var =)
honk31
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.