カスタムページテンプレートの追加方法

カスタムページテンプレートは、ページ編集画面で選択できるテンプレートのことです。Snow Monkey には右サイドバー、フル幅、1カラム(スリム)などいくつかのテンプレートが用意されていますが、オリジナルのカスタムページテンプレートを追加することもできます。

1. 子テーマを用意する

カスタムページテンプレートを追加するには、まず子テーマを使用する必要があります。Snow Monkey のカスタマイズは子テーマではなく My Snow Monkey プラグインを推奨していますが、カスタムページテンプレートの追加は子テーマでしかおこなえません(将来的にはなんとかしたいですが…)。ということで、下記のページを参考に子テーマを用意してください。

2. カスタムページテンプレート用のディレクトリを作成する

用意した子テーマのディレクトリの中に、カスタムページテンプレート用のディレクトリを作成します。page-templates という名前でディレクトリを作成してください。

子テーマ/
├ page-templates/
└ style.css

3. カスタムページテンプレート用のファイルを作成する

子テーマ/page-templates の中にカスタムページテンプレート用の PHP ファイルを作成します。このとき、ファイル名は snow-monkey/page-templates の中に無いものにしてください(同じ名前だとカスタムページテンプレートの「追加」ではなく「上書き」になります)。ここでは、my-one-column-slim.php という名前のファイルをつくる想定とします。

子テーマ/
├ page-templates/
│ └ my-one-column-slim.php
└ style.css

そして、my-one-column-slim.php に、下記のコードを記述してみてください。

<?php
/**
 * Template Name: My One Column Slim
 * Template Post Type: post, page
 */

use Framework\Controller\Controller;

Controller::layout( 'one-column-slim' );
Controller::render( 'content', get_post_type() );

ここまでできたら、ページ編集画面で My One Column Slim というテンプレートが選択できるようになっているか確認してください。

3-1. レイアウト(大枠)用のファイルを作成する

もしレイアウト(大枠)部分は既存の1カラム(スリム)と同じものを流用する場合はこのステップは飛ばしてください。

子テーマ/page-templates/my-one-column-slim.php に記述した Controller::layout( 'one-column-slim' ); というコードは、snow-monkey/templates/layout/wrapper/one-column-slim.php というレイアウトファイルを使用しますよ、という命令になります。

もし snow-monkey/templates/layout/wrapper/one-column-slim.php ではなく、オリジナルのレイアウトにしたい場合は、子テーマ/templates/layout/wrapper の中にファイルを追加する必要があります。ここでは my-one-column-slim というレイアウトファイルを使用する想定とします。

子テーマ/
├ page-templates/
│ └ my-one-column-slim.php
├ templates/
│ └ layout/
│   └ wrapper/
│     └ my-one-column-slim.php
└ style.css

レイアウトファイルをゼロからつくるのは結構大変なので、Snow Monkey のレイアウトファイルの中からベースにしたいものを選んでコピーし、それを編集するという方法をオススメします。

そして、子テーマ/templates/layout/wrapper/my-one-column-slim.php を呼び出すように 子テーマ/page-templates/my-one-column-slim.php のコードを変更しましょう。

<?php
/**
 * Template Name: My One Column Slim
 * Template Post Type: post, page
 */

use Framework\Controller\Controller;

Controller::layout( 'my-one-column-slim' ); // ← ここ
Controller::render( 'content', get_post_type() );

3-2. ビュー(コンテンツ部分)用のファイルを作成する

もしビュー(コンテンツ)部分は既存のものを流用する場合はこのステップは飛ばしてください。

子テーマ/page-templates/my-one-column-slim.php に記述した Controller::render( 'content', get_post_type() ); というコードは、snow-monkey/templates/view/content-<post_type>.php というレイアウトファイルを使用しますよ、という命令になります。

もし snow-monkey/templates/view/content-<post_type>.php ではなく、オリジナルのビューにしたい場合は、子テーマ/templates/view の中にファイルを追加する必要があります。ここでは my-content というレイアウトファイルを使用する想定とします。

子テーマ/
├ page-templates/
│ └ my-one-column-slim.php
├ templates/
│ └ view/
│   └ my-content.php ← 固定ページでも投稿でも同じビューファイルで良い場合はこれだけで OK
│   └ my-content-post.php ← 投稿用のビュー(任意)
│   └ my-content-page.php ← 固定ページ用のビュー(任意)
└ style.css

ビューファイルをゼロからつくるのは結構大変なので、Snow Monkey のビューファイルの中からベースにしたいものを選んでコピーし、それを編集するという方法をオススメします。

そして、子テーマ/templates/view/my-content-<post_type>.php を呼び出すように 子テーマ/page-templates/my-one-column-slim.php のコードを変更しましょう。

<?php
/**
 * Template Name: My One Column Slim
 * Template Post Type: post, page
 */

use Framework\Controller\Controller;

Controller::layout( 'one-column-slim' );
Controller::render( 'my-content', get_post_type() ); // ← ここ

Snow Monkey オンラインコミュニティ

Snow Monkey をより良いテーマにするために、今後の機能開発等について情報共有したりディスカッションをしたりする場所です。より多くのユーザーの交流があったほうがより良いプロダクトに育っていくと思いますので、ぜひご参加ください!