Open7

投稿リンクのブロックをつくったときのメモ

ちあきちあき

表示はダイナミックブロックっぽいけど、中身自体は innerBlock を使いたい。
ということでこういうissueを見つける。

https://github.com/WordPress/gutenberg/issues/16319

どうやら

save: props => {
  return <InnerBlocks.Content />
}

でコンテンツはとれるようだ。あとはレンダー関数で $content を出力すればよさげ

ちあきちあき

https://github.com/WordPress/gutenberg/blob/trunk/packages/block-library/src/read-more/index.php

参考にしつつrenderの関数書いてたけど、WordPress6.1から render というプロパティが追加されてるのを教えてもらった!

https://make.wordpress.org/core/2022/10/12/block-api-changes-in-wordpress-6-1/

ちあきちあき
<?php
/**
 * Server-side rendering.
 *
 * @var array    $attributes The block attributes.
 * @var string   $content The block content.
 * @var WP_Block $block The block object.
 *
 * @package My_Theme\Blocks
 */

?>

<?php if ( ! empty( $block->context['postId'] ) ) : ?>
	<a
		<?php
		echo get_block_wrapper_attributes(
			array(
				'href'   => get_the_permalink( $block->context['postId'] ),
				'target' => esc_attr( $attributes['linkTarget'] ),
			)
		);
		?>
	>
		<?php
		// インナーブロックのaタグをspanタグに置き換える
		$block_content = str_replace( array( '<a', '</a>' ), array( '<span', '</span>' ), $content );
		echo do_blocks( wp_kses_post( $block_content ) );
		?>
	</a>
<?php endif; ?>
ちあきちあき

phpでごにょごにょ…ごにょ…って書かなくていいのがすごくいい。