従来型テンプレートと、新しいテンプレートのおさらい

テンプレートとは、

エディタで作成した、投稿タイトルや本文、メタデータ(投稿日やカテゴリー)などを、どんなHTMLで表示するかを記述したファイルです。

従来は、PHP形式でしたが、新しく追加されるテンプレートは、HTMLで、カスタム投稿タイプに保存されるので、エディタですべて完結する利点があります。

テーマへの依存性が大幅にするなくなるため、これまでのようにチャイルドテーマを作成してカスタマイズするといった作業は多分過去のものになっていくだろうと思います。

一方、PHP形式のテンプレートと、ショートコードを組み合わせたり、条件分岐タグを複雑に使用したテンプレートで、出来ていたことが、出来なくなるということもありそうですが、もともとのテンプレート階層を、全面的に置き換えるものではなさそうなので、必要な場所では、従来のPHPテンプレートを使用することを検討する余地もありそうです。

いずれにしろ、現在のテンプレート階層と、新しいテンプレートシステムの違いや動作の仕組みを十分理解することは、重要になりつつあります。

テンプレート階層

投稿や、固定ページで使用されるテンプレートは、命名規則があり、特定の投稿IDやURLスラッグなどと組み合わせて、特定の投稿で特別なテンプレートを使用して表示することができるようになっています。

カスタムテンプレート

https://wpdocs.osdn.jp/%E3%83%9A%E3%83%BC%E3%82%B8%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88

テーマに、以下のようにコメント行を追加したテンプレートを作成しておくと、テーマの投稿編集画面で、テンプレートを選択できるようになります。Template Post Typeを指定しておくことで、投稿、固定ページいずれでも選択できるようになります。

/**
 * Template Name: Gallery template
 * Template Post Type: post, page
 *
 */

従来から使用された PHP カスタムテンプレートは、WordPressの外部で、phpファイルを作成して、アップロードする必要があり、作るのが面倒でしたが、

WordPress5.8からは、エディタのメニューから、作成できるようになります。

テンプレートの項目に ‘New’ というリンクが見えますが、このリンクをクリックすると、新しいテンプレートが作成できます。

作成したテンプレートは、外観/テンプレートに保存されます。このテンプレートには、wp-custom-template というプレフィックスのついたテンプレートとして保存されることを覚えておいてください。

テンプレートパートファイル

ヘッダーやフッターなど、テンプレートの一部分を構成する部分で使用されるテンプレートです。

以下の関数を使用することで slug-name.phpファイルを表示します。

slug-name.phpが、存在しない場合は、slug.phpを表示します。

get_template_part( $slug, $name );

これ以外にも、ヘッダーやフッターを呼び出す場合に引数を追加することで

get_header('html5');

header-html5.phpが存在すれば、そのファイルを表示し、存在しない場合は、header.phpを表示する仕組みがあります。

これらのテンプレートでは、条件分岐タグ – WordPress Codex 日本語版 を使用することで、さらに詳細な表示条件を指定することができるようになっています。

従来から使用された PHP テンプレートは、WordPressの外部で、phpファイルを作成して、アップロードする必要があり、作るのが面倒でしたが、

これらのテンプレートも、外観/テンプレート、外観/テンプレートパート内で、新規に作成することができるようになりました。

作成したテンプレートは、Template Partブロックや、headerブロック、footerブロックなどを使って、呼び出すことができます。

WordPress 5.9 HTMLテンプレート

WordPress 5.9で計画されている新しいテンプレートの仕組みは、これらのもともとあるテンプレートの仕組みに、新たにカスタム投稿タイプにテンプレートを保存する仕組みが追加されます。

テンプレートフィルターで、以下のテンプレートがカスタム投稿タイプに保存されるようになります。(WordPress5.8現在)

$filter_list = array( 'embed_template', '404_template', 'search_template',
		  'frontpage_template', 'home_template', 'privacypolicy_template',
		  'taxonomy_template', 'attachment_template', 'single_template',
		  'page_template', 'singular_template', 'category_template',
		  'tag_template', 'author_template', 'date_template',
		  'archive_template', 'index_template', );

これらのテンプレートがカスタム投稿タイプに保存されることで、これまで、テーマに付属するテンプレートをカスタマイズする場合には、チャイルドテーマを作成する必要がありましたが、チャイルドテーマを作成しないくても、テンプレートのカスタマイズができるようになり、このことが「ノーコーディングでカスタマイズができる」といった言い方の意味です。

サイトエディタでヘッダー部分やフッタ部分を変更した場合は、それらもテンプレートパートファイルとして保存されます。

WordPressを初めて使い始めた方などは、「なんかめんどくせえ」話になりそうで、気が引けますが、大事な部分は、

WordPressのテンプレート階層の主要なテンプレートは、がHTMLテンプレートに置き換えられますが、全部のテンプレート階層が置き換えられるわけではないという事です。

チャイルドテーマを作らなくて済むなら、既存のサイトでFSEを有効にしたいと思うかもしれません。

実験してみましょう。

ブロックエディタ対応テーマの、TT1 blocks 0.4.7を使用して、Gutenberg を有効にします。コアは、WordPress5.7.2です。

テーマに、archive.phpを追加してみましょう。ファイルの中身は、hello archiveとだけ書いておきましょう。

適当なカテゴリーを開くと、 私の環境ではhello archive が表示されました。

実験2を行ってみます。

テーマをemulsion に切り替えて、archive.phpを追加して、PHPテンプレートが使用されるかどうかを調べてみたいと思います。

テーマのモードは、FSEにするのを忘れないでください。

結果、PHP テンプレートで表示されることはなく、表示に変化はありません。

なにがこの違いを生んでいるのでしょうか?

PHPテンプレートで表示するためには、emulsion テーマの block-templates内のテンプレートの名前を変更する必要があります。category.html , archive.htmlを他の名前にリネームしてみると、phpテンプレートが適用されます。

このことから、Full Site Editing対応テーマが、いくつかあった場合、異なる結果を生むということが理解できるはずです。

現在サイトエディタ対応テーマは、そういったPHPベースのテンプレートは存在しないので、問題が発生することはないかもしれませんが、私たちは、新しくサイトを作るだけでなく、現在のサイトを、新しいものに移行したいといった事が少なからずあります。

既存サイトから、ワードプレスの新しい仕組みに移行しようとするとおそらくテストは必須になると思います。

このようなことから、emulsionテーマでは、現在のテーマで表示する設定、現在のテーマのメイン部分だけを置き換える設定、(サイドバーの動作検証が、既存のサイトエディタ対応テーマでは、やりにくいので)フルサイトエディタ表示の3つのモードで表示できるように、フィルターを追加した主な理由です。

テンプレートは、テーマだけが使用するものではなく、プラグインでも、テンプレートを使うものはたくさんあります。あなたが使用するプラグインとの互換性をチェックする時も、このちょっと変わったテーマは、きっと役に立つだろうと思います。