この記事は最後に更新してから1年以上経過しています。

自動生成される抜粋からテーブルブロックの内容を除外する

説明

標準テーマである「Twenty Twenty-Two」や「Twenty Twenty-One」では、トップページやアーカイブページにおいて投稿情報を表示する際、その抜粋を使っている。とある投稿にテーブルブロックを入れた際、トップページに表示された抜粋には各セルの内容が列挙され、ちょっとモヤモヤした。

抜粋が決まるまで

投稿の抜粋を取得する関数として get_the_excerpt関数がある。この関数では投稿がパスワードで保護されていないかを調べ、保護されていない場合は'get_the_excerpt'フィルターを使って抜粋内容を取得(確定)している。この'get_the_excerpt'フィルターには標準で wp_trim_excerpt関数が指定されており、「抜粋(post_excerpt)」が未入力の場合は「本文(post_content)」からHTMLタグなどを除外した冒頭部分がその投稿の抜粋となる。

ブロックエディターで編集された投稿であっても上記の流れは同じである。ただしクラシックエディターで編集された場合は「本文」全体が抜粋対象となるのに対し、ブロックエディターで編集された場合は excerpt_remove_blocks関数によって抜粋対象のブロックが絞り込まれている。現時点(5.9.0)で抜粋対象となっているブロックは次の通り。

ブロック名タイトル分類
null*クラシックインナーブロック
'core/freeform'クラシック
'core/heading'見出し
'core/html'カスタムHTML
'core/list'リスト
'core/media-text'メディアとテキスト
'core/paragraph'段落
'core/preformatted'整形済みテキスト
'core/pullquote'プルクオート
'core/quote'引用
'core/table'テーブル
'core/verse'
'core/columns'カラムラッパーブロック
'core/column'カラム
'core/group'グループ

ラッパーブロックに分類されるブロックについては、その中に含まれる上記のブロックが抜粋対象となる。

2つのフィルターで制御

テーマやプラグインでこの分類に属するブロックを使う場合は問題ないと思うが、独自に作成したブロックを抜粋対象にする場合はexcerpt_remove_blocks関数には2つのフィルターを使って抜粋対象のブロックを制御することになる。

1つ目のフィルターは5.8.0で追加された'excerpt_allowed_wrapper_blocks'フィルターで、これはラッパーブロックのみ制御できる。例えば任意のラッパーブロックを抜粋対象に追加する場合は次のように記述する。

function mytheme_excerpt_allowed_wrapper_blocks( $allowed_wrapper_blocks ) {
	$allowed_wrapper_blocks[] = 'ブロック名';
	return $allowed_wrapper_blocks;
}

add_filter( 'excerpt_allowed_wrapper_blocks', 'mytheme_excerpt_allowed_wrapper_blocks', 10, 1 );

2つ目のフィルターは最終的な抜粋対象のブロックを決定する'excerpt_allowed_blocks'である。このフィルターを使ってお題である抜粋からテーブルブロックを除外する。ソースコードは次の通り。

function mytheme_excerpt_allowed_blocks( $allowed_blocks ) {
	$key = array_search( 'core/table', $allowed_blocks );
	if ( false !== $key ) {
		unset( $allowed_blocks[$key] );
	}
	return $allowed_blocks;
}

add_filter( 'excerpt_allowed_blocks', 'mytheme_excerpt_allowed_blocks', 10, 1 );

上記ではテーブルブロックを除外しているが、任意のブロックを抜粋対象に加える場合もこのフィルターを使用できる。


抜粋は投稿編集ページ内の「抜粋パネル」で入力でき、今回紹介した内容はその抜粋が未入力(空)の場合の対応になる。抜粋が入力されている場合は、上記のフィルターによる影響はないので、この点は安心してほしい。


最終更新 : 2022年04月06日 10:08


お勧め

add_shortcode(2018年5月27日 更新)

void add_shortcode( string $tag, mixed $func )
ショートコード(独自タグ)を追加する。ショートコードは、投稿記事内でテキスト内容がない[tag]や、テキストを内包する[tag]テキスト[/tag]の書式で使用できる独自タグのこと。標準の状態では、 the_content関数によって表示する直前のフィルター処理内でパラメータ$funcで指定した関数・メソッドが実行される。

get_user_setting(2022年1月31日 更新)

mixed get_user_setting( string $name [ , string $default = false ] )
ユーザーインターフェイス設定を取得する。

have_posts(2018年5月27日 更新)

bool have_posts( )
次の投稿データが存在するかを調べる。

in_category(2018年5月27日 更新)

bool in_category( mixed $category [ , mixed $post = null ] )
投稿情報が指定したカテゴリーに属しているか調べる。

add_feed(2024年6月24日 更新)

string add_feed( string $feedname, callable $callback )
フィードを追加する。