他のページで設定したブロックの内容を表示したかった時の覚書。
汎用性からショートコードにまとめる。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
function example_extract_block_type_from_page( $post_id, $block_name ) { $post_content = get_post( $post_id )->post_content; $blocks = array_filter( parse_blocks( $post_content ), function( $block ) use( $block_name ) { return $block_name === $block['blockName']; }); $block_content = ''; foreach( $blocks as $block ) { $block_content .= render_block( $block ); } return $block_content; } function example_extract_block_type_from_page_shortcode( $atts=[] ) { $defaults = [ 'post_id' => 0, 'block_name' => '' ]; $atts = shortcode_atts( $defaults, $atts ); return example_extract_block_type_from_page( $atts['post_id'], $atts['block_name'] ); } add_shortcode( 'example_extract_block_type_from_page', 'example_extract_block_type_from_page_shortcode' ); |
実際のショートコード
1 |
[example_extract_block_type_from_page post_id="123" block_name="myblock"] |
ブロック名はブロックテンプレートで「$block」をvar_dumptして確認。
Advanced Custom Fieldsでカスタムブロックを作成している場合はブロック名が「acf/xxxxx」のようになる。
1 |
[example_extract_block_type_from_page post_id="123" block_name="acf/myblock"] |