Twenty Twenty-Twoテーマでは、デフォルトテンプレートのほかに、以下のテンプレートがあり、投稿や固定ページ右サイドバーのテンプレート項目で自由に選択できるようになっています。

  • 「Blank」空白のテンプレート
  • 「Single Post(No Sepalrator)」投稿用の水平線なし?テンプレート
  • 「Page (Large Header)」固定ページ用の大きなヘッダーを使ったテンプレート
  • 「Page (No Separators)」固定ページ用の水平線なし?テンプレート
  • 「page-home」一覧リストのテンプレート(なぜあるのか不明..)

まあ、自身の管理するサイトで気にしなければ誤って選択することも、編集してしまうこともないとは思いますが、他の方が誤って選択しないようにするためには、やはり非表示にするのが妥当でしょう。

でも..、こんな時は何かのコードを追加して..がセオリーなはずなのに、フィルタリングするフックをいくら探しても見つからない...。

実は分かってみれば「なーんだ」ってことなんですけど、私のように無駄な時間を溶かしてしまわぬよう、参考に紹介しておきます。

この措置を行うことで、下図のように不要なテンプレートが選択できないようになります

【TT2】編集画面のテンプレート設定欄で、不要なテンプレートを選択できないようにする方法|Twenty Twenty-Two (TT2)のカスタマイズ情報
変更前-TT2の削除できないテンプレートが表示される
【TT2】編集画面のテンプレート設定欄で、不要なテンプレートを選択できないようにする方法|Twenty Twenty-Two (TT2)のカスタマイズ情報
変更後-デフォルト以外になければ選択肢なしになる

必要なテンプレート以外を選択肢から削除する方法

このカスタマイズは、こちらで配布している子テーマを使用するか、子テーマを自身で作成して有効化していることが前提です

1.親テーマのtheme.jsonをコピーする

テンプレート選択肢の設定は、PHPプログラムではなく、theme.jsonで制御されています。

従って、親テーマのtheme.jsonに書かれている記述を子テーマ側で上書きする必要があります。

子テーマにthme.jsonがない場合はファイルを作成して(こちらで配布している子テーマでは作業不要)、親テーマのtheme.jsonの内容をそのままコピーします。

2.theme.jsonの内容を書き換える

theme.jsonの冒頭に書かれている以下の記述がテンプレートの出力設定です。

	"customTemplates": [
		{
			"name": "blank",
			"title": "Blank",
			"postTypes": [
				"page",
				"post"
			]
		},
		{
			"name": "page-large-header",
			"title": "Page (Large Header)",
			"postTypes": [
				"page"
			]
		},
		{
			"name": "single-no-separators",
			"title": "Single Post (No Separators)",
			"postTypes": [
				"post"
			]
		},
		{
			"name": "page-no-separators",
			"title": "Page (No Separators)",
			"postTypes": [
				"page"
			]
		}
	],

そして以下の部分が1つのテンプレートの指示内容です(以下はBlankテンプレートの例)。

{
			"name": "blank",
			"title": "Blank",
			"postTypes": [
				"page",
				"post"
			]
		},

これを見ると、「Blank」テンプレートが適用されるのは「page(固定ページ)」「post(投稿)」であることが分かります。つまり、この「postTypes」パラメーターで設定している投稿タイプで使用可能にするという設定ができるのですね。

そこで、不要なテンプレートの「postTypes」パラメーター内にある「page(固定ページ)」「post(投稿)」をそれぞれ空欄(””)にしてやれば、投稿や固定ページの編集画面でテンプレートの選択肢として出力されない(選択できない)ようになります。

親テーマのtheme.jsonの値を上書きする必要があるので、記述の削除ではなく空欄にします

試しに、上記のBlankテンプレートの「page」「post」の文字列を削除して保存後、実際に投稿や固定ページの編集画面を見て選択できなくなっていることを確認してみてください。

...いろいろ調べて悩んだ挙句、たったこれだけで制御できるんですね...というオチでした。

ちなみに、「page-home」という謎のテンプレートが残ってしまい、theme.jsonにもそのテンプレートに関する記述がありませんので、「”customTemplates”: [」の下に行を挿入して、以下を追加します。

		{
			"name": "page-home",
			"title": "page-home",
			"postTypes": [
				""
			]
		},

この記述がないのが謎なのですが、指定していないということは、どんな編集画面でも表示しなさい(無制御)ということなのでしょう。


以上、分かってみれば「なーんだ」ってちょっと笑ってしまう位簡単にできる、投稿・固定ページ編集画面で不要なテンプレートを選択できなくする方法でした。

ちなみに冒頭の右側画像で選択肢がなくなっているのは、「デフォルト」以外に使用可能なテンプレートがないからで、クラシックテーマのように「テンプレート」項目自体がなくなるわけではないようです。

編集リンク(Edit Templateリンク)を無効、または非表示にするには

以下のコードを「admin-style.css」へ追記することで、テンプレート選択画面の編集リンクを無効、または非表示にできます。

編集リンクのクリックを無効にする

button.components-button.is-link {
    pointer-events: none;
}

編集リンク自体を非表示にする

button.components-button.is-link {
    display: none;
}

ただ、一応その他のリンクに影響がないかは確認したものの、この部分だけっていうCSSクラスでないような気がしますので、投稿するだけのユーザーに対しては、管理者権限(テーマ編集権限)のないユーザー権限にするなどして運営したほうがよさそうです。

応用すれば使い道があるかも

今回気づいたtheme.jsonのテンプレート設定。

デフォルトにすることは難しそうですが、特定のテンプレートに対して特定の投稿タイプが割り当てられるので、〇〇というカスタム投稿タイプではそれ用に追加したテンプレートを選択可能にするということもできそうですね。