できる!Snow Monkey カスタマイズ – カスタム投稿のページテンプレート編

この記事は、不定期連載「できる!Snow Monkey カスタマイズ 」の第3回目です。

今回の記事のテーマ

Snow Monkey v6からは、プラグインでカスタムページテンプレートを追加できるようになっている為、同様にカスタム投稿タイプのテンプレートも簡単にプラグインで追加設定する事が可能になっています。
これを機会に、カスタム投稿タイプについて解説を行います。

カスタム投稿タイプのテンプレート設定をプラグインでします

前回(第2回)の記事「できる!Snow Monkey カスタマイズ – テンプレートのルートディレクトリの基礎」snow_monkey_template_part_root_hierarchyフックを使用する事で、My Snow Monkeyプラグインだけでカスタム投稿タイプでもテンプレートを正しく追加して設定する方法を解説します。

補足説明

カスタム投稿タイプは、カスタム投稿タイプを管理するプラグインを使用する事で簡単に追加することも可能です。またWordPressでの標準的な解説となる為、この記事ではカスタム投稿タイプの追加方法について詳しく解説しません。

カスタム投稿タイプとは?

カスタム投稿タイプは自分で作れる新しい投稿タイプです。

WordPress Codex 日本語版 – 投稿タイプ

とWordPress Codexに記載があります。

ルミェール

WordPressが標準デフォルトで用意している投稿タイプと別に、プラグインなどで独自に追加した投稿タイプがカスタム投稿タイプって事だね!

ルミェール(アイコン01)

WordPressが標準デフォルトで用意している投稿タイプには主に5つあり、

WordPress にはデフォルトで5つの主要な投稿タイプがあります。ユーザーが使えるものと内部で使われるものです:
– 投稿 (投稿タイプ: ‘post‘)
– 固定ページ (投稿タイプ: ‘page‘)
– 添付ファイル (投稿タイプ: ‘attachment‘)
– リビジョン (投稿タイプ: ‘revision‘)
– ナビゲーションメニュー (投稿タイプ: ‘nav_menu_item‘)

WordPress Codex 日本語版 – デフォルトの投稿タイプ

とWordPress Codexに記載があります。

カスタム投稿タイプを使う理由とは?

自分で新しい投稿タイプを作りたい時とは、どう言う時でしょうか?いくつかのケースを紹介します。

通常の記事と別けたい場合に使う

例えば、専門用語を紹介する用語集を記事とは別に作りたいとしましょう。
WordPress標準の投稿を使って行う場合であれば、通常の記事と用語集が混ざってしまう事にならないでしょうか?

用語集では、記事の「カテゴリー」や「タグ」を使わず、その代わりに「品詞」を設け「名詞」「動詞」「副詞」「形容詞」として区分分けを行いたいと思うでしょう。

ルミェール

標準で用意されている「カテゴリー」「タグ」などの要素をタクソノミーって言うんだ。カスタム投稿タイプタクソノミーを自分で設定しないと何も設定されないよ。

ルミェール(アイコン01)

カスタム投稿タイプの追加方法

Custom Post Type UIと言ったカスタム投稿タイプを設定できるプラグインなどが存在します。またプラグインで記述する場合、register_post_type関数に関してはWordPressのリファレンスに詳しい説明があります。
そちらを参考に各自で設定を行ってください。この記事では詳しく解説しません。

Custom Post Type UIプラグイン – WordPress.org公式プラグインディレクトリ
register_post_type関数 – WordPress Codex 日本語版

カスタム投稿タイプのテンプレートもプラグインで追加設定しよう

カスタム投稿タイプを設定出来たでしょうか?
しかし、それらの設定でもまだカスタム投稿タイプには足りない設定があると思われます。
それは「投稿の属性」パネルに存在する「テンプレート」でしょう。

ページテンプレート
通常であれば、投稿の属性パネルにテンプレート選択が可能

このままの状態では、カスタム投稿タイプの投稿に設定が存在しない為、レイアウトがデフォルトテンプレートの状態でしか表示できません。

Snow Monkey v6以降であれば、カスタムページテンプレートをプラグインで設定できますので、それと同様の手順をMy Snow Monkeyで設定を行う事でカスタム投稿タイプのテンプレートを選択できるようになりました。

ルミェール

プラグインでカスタムページテンプレートを設定できるようになったのはSnow Monkey v6の大きな変更の1つ!

ルミェール(アイコン01)

プラグインにpage-templatesディレクトリを作成し、snow_monkey_template_part_root_hierarchyフックで設定を行いましょう。
(※ すでに設定をされている場合は必要ありません)

簡単!Snow Monkeyのデフォルトレイアウトをカスタム投稿タイプで使用する方法

注意

Snow Monkey v6.0.0〜v6.1.1まではカスタムページテンプレートの上書きに問題がある為、下記の記述では正しく動作されない可能性があります。Snow Monkey v6.1.2以降でお試しください。

Snow Monkey公式Webサイトの「カスタムページテンプレートの追加方法」では処理をコピーして使用されているのですが、カスタム投稿タイプでテンプレートとして使用する場合、Snow Monkeyのデフォルトのレイアウトと同じようにする場合であればテーマファイルを読むように調整してあげる方が良いかもしれません。

ルミェール

処理を上書きすると、テーマがアップデートされた時や、投稿されている記事のテンプレートにも影響が出ちゃう。カスタム投稿タイプにもSnow Monkeyの投稿テンプレートはテーマのアップデートに気にせずに使いたいよね。

ルミェール(アイコン04)

Snow Monkeyで用意されている標準のテンプレートは、v6.1.2現在は下記のように6つ存在しています。

Template Name編集画面で表示されるテンプレート名ファイル名 / 選択された際の値
Landing pageランディングページpage-templates/blank.php
Left sidebar左サイドバーpage-templates/left-sidebar.php
Full widthフル幅page-templates/one-column-full.php
One column ( slim width )1カラム ( スリム幅 )page-templates/one-column-slim.php
One column1カラムpage-templates/one-column.php
Right sidebar右サイドバーpage-templates/right-sidebar.php

テーマ標準と同様のレイアウトを使用するのに必要な事は、6つのページテンプレートを同じファイル名で配置にする事、Template NameTemplate Post Type、下記の記述です。

ワンポイントアドバイス

テーマ標準で用意された6つのページテンプレートのファイル名と同一のファイル名でページテンプレートを生成した場合、そのファイルの処理が上書きされて適用されます。
その為、既存の投稿のテンプレートに対しても影響が出てしまいますので、テーマと同じテンプレートのファイル名を使用しないようにするか、テーマと同様のレイアウトを使用したいのであれば、テーマファイルを読込むようにした処理を設定しておくと良いでしょう。

<?php
/**
 * Template Name: 自由に付けられます
 * Template Post Type: 追加したいカスタム投稿タイプのname
 *
 */

$base_name = pathinfo( __FILE__, PATHINFO_BASENAME );
include( get_stylesheet_directory() . '/page-templates/' . $base_name );

Template Nameは、テーマテンプレートと同一の名前にする必要はありません。
Template Post Typeは、追加したいカスタム投稿タイプのみでも適用されます。

例えばランディングページ用のページテンプレート(page-templates/blank.php)をglossary(用語集)と言うカスタム投稿タイプでも使用したい場合は同じようにpage-templates/blank.phpを生成し

<?php
/**
 * Template Name: ランディングページ
 * Template Post Type: glossary
 *
 */
$base_name = pathinfo( __FILE__, PATHINFO_BASENAME );
include( get_stylesheet_directory() . '/page-templates/' . $base_name );

と記述します。

テネーブル

上記のように記述する事でテーマのpage-templatesディレクトリにある同一ファイルをinclude(読込み)しますので、テーマのページテンプレートに記載された処理が実行されます。
テーマがアップデートされた場合でもアップデートされたテーマのページテンプレートを読込んで処理を反映しますので上書きによる影響を受けません。

テネーブル(アイコン01)

同様に、left-sidebar.phpである場合はTemplate Name: 左サイドバーと変更し、page-templates/left-sidebar.phpと言う名前でファイルを生成します。

標準で用意されている6つのタイプのテンプレートに関しては、下記のように6つのファイルを用意し、上記のようにテーマディレクトリのページテンプレートを読み込む記述の方法で直接な上書きせずに使用すれば、テーマのアップデート時にもそのまま対応が可能でしょう。

my-snow-monkey(プラグインディレクトリ)

my-snow-monkey.php

template-root

page-templates

blank.php

left-sidebar.php

one-column-full.php

one-column-slim.php

one-column.php

right-sidebar.php

テーマ標準のページテンプレートは上書き非推奨?

Snow Monkeyで用意された6つのページテンプレートは、投稿や固定ページの表示にも使用されていますので、変更を行った場合はそれらの記事やページの表示にも影響を及ぼします。

Snow Monkeyではsnow_monkey_template_part_root_hierarchyフックで設定されたテンプレートルートディレクトリに配置されたpage-templatesディレクトリをページテンプレートディレクトリとして上書きした形で読込みますが、Template Post Typeは、すべてのルートディレクトリを参照するようですので同じファイル名の場合はTemplate Post Typeが適用されていなくても優先度が高いファイルの処理で上書き実行されます。

テネーブル

Template Post Typepost(投稿)、page(固定ページ)の設定が無くても、同一ファイル名の場合、優先度が高いファイルの処理が適用されるようなのです。

テネーブル(アイコン01)

その為、テーマと同じ6つのページテンプレートのファイル名でテンプレートを作成した場合は、上書きした処理結果で表示されてしまいますので、使用するにあたっても、上記で紹介したようにテーマディレクトリをincludeするような形で使用するのみが良いと思われます。

テネーブル

もしカスタムページテンプレートを独自で追加したい場合は、テーマで用意されている6つのページテンプレートのファイル名と重複しないオリジナルのファイル名とオリジナルのTemplate Nameを使用する事を推奨します。

テネーブル(アイコン01)