WordPressブロックテーマのテンプレートパーツ(ヘッダー)変更を一括で反映させる

WordPressブロックテーマのテンプレートパーツ(ヘッダー)変更を一括でテンプレートに反映させる

ブロックテーマでは、テーマオプションとして複数のテンプレートパーツ(ヘッダーなど)が用意されている場合があります。

例えば、テーマ「Ipsum」の場合、ヘッダーパーツには以下の3種類があります。

  • header (デフォルト)
  • header-collapsed (ナビゲーションメニュー固定)
  • header-sticky (ヘッダー固定)

通常、すべてのページ(テンプレート)でヘッダーパーツを header-stick に変更したい場合、個別のテンプレートを1つずつ開いて変更・保存し直す必要があります。ページ数が多いと非常に手間がかかりますよね。

そこで今回は、個別のテンプレートファイルを書き換えることなく、読み込まれるテンプレートパーツを一括で切り替えるTipsをご紹介します。

サンプルコード

サンプルコードでは、WordPress7.2での 新しいデフォルトテーマ ipsum を使ってみます。

以下のコードを my-plugin.php に張り付けてみてください。

/**
 * Ipsum のヘッダーパーツを一括変更する
 *
 * デフォルトの header から header-sticky へ
 */
function nendebcom_ipsum_change_header_template_part( $parsed_block ) {

	// Template Part ブロック以外は対象外。
	if ( 'core/template-part' !== ( $parsed_block['blockName'] ?? '' ) ) {
		return $parsed_block;
	}

	// Ipsum テーマ以外は対象外。
	if ( 'ipsum' !== ( $parsed_block['attrs']['theme'] ?? '' ) ) {
		return $parsed_block;
	}

	// 対象のヘッダーパーツ。
	$header_slugs = array(
		'header',
		'header-collapsed',
		'header-sticky',
	);

	// 対象外のパーツは変更しない。
	if ( ! in_array(
		$parsed_block['attrs']['slug'] ?? '',
		$header_slugs,
		true
	) ) {
		return $parsed_block;
	}

	//header-stickyに変更
	$parsed_block['attrs']['slug'] = 'header-sticky;

	return $parsed_block;
}
add_filter( 'render_block_data', 'nendebcom_ipsum_change_header_template_part' );

このように header-sticky(ヘッダー固定) になりました。

header-stick(ヘッダー固定の仕様)

もし、特定のテンプレートを別のテンプレートパーツ(ヘッダー)に変更したい場合は以下のように変更してください。

	//↓コメントアウトする
	//$parsed_block['attrs']['slug'] = 'header-sticky';

	// 固定ページだけ別のヘッダーにする。
	if ( is_page() ) {

		//header-collapsedに変更
		$parsed_block['attrs']['slug'] = 'header-collapsed';

	} else {

		//header-stickyに変更
		$parsed_block['attrs']['slug'] = 'header-sticky';

	}

ご注意

テンプレート側で別のテンプレートパーツ(ヘッダー)に設定してても、上記のコードでの指定のヘッダーを使用するようになります。

テンプレートもできるよ

テンプレートを変更せずに 投稿のデフォルトテンプレートとして、はじめから 2カラム(サイドバー)を読み込ませるTips をご紹介します。