カスタム投稿のページテンプレートについて – Snow Monkey カスタマイズ

本記事は、カスタム投稿タイプのページテンプレートについて解説をします。

本記事の対応バージョンについて

本記事の対応バージョン

本記事は Snow Monkey v9.0 に対応しています。
( Snow Monkey v9 で動作を確認しています)

本記事のテーマ

Snow Monkey v6 以降では、プラグインでカスタムページテンプレートを追加できるようになっています。それと同様に、カスタム投稿タイプのテンプレートも簡単にプラグインで追加設定する事が可能になりました。

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

snow_monkey_template_part_root_hierarchy フィルターフックを使用することで、プラグインだけでカスタム投稿タイプでもテンプレートを正しく追加して設定する方法を解説します。

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

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

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

と、WordPress Codex には記載されています。

ルミェール

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

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

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

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

と、WordPress Codex には記載されています。

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

自分で新しい投稿タイプを作りたい時とは、どう言う時でしょうか?

いくつかのケースを紹介します。

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

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

また、用語集では、記事の「カテゴリー」や「タグ」ではなく、その代わりに「品詞」「名詞」「動詞」「副詞」「形容詞」と言った分類で分ける辞書のような構成にしたいかもしれません。標準の記事の構成では難しい仕様もあるでしょう。

ルミェール

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

テネーブル

上記の用語集の例であれば、「分類」と言うタクソノミーで、「品詞」「名詞」「動詞」「副詞」「形容詞」と言った値を登録すると言った感じですね。

カスタム投稿タイプの追加方法について

カスタム投稿タイプの追加方法には、register_post_type 関数を用いて自身で記述を行うか、Custom Post Type UI と言ったカスタム投稿タイプを設定できるプラグインなどが存在します。

register_post_type 関数を使用して自身でプラグインを記述する場合や、Custom Post Type UI と言ったプラグインを使用して設定を行うなどは、WordPress のリファレンスやプラグインの配布ページに詳しい説明があります。そちらを参考にして各自で設定をしてください。本記事では詳細解説を割愛します。

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

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

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

投稿の属性に表示されるテンプレート要素

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

カスタマイザーで、カスタム投稿タイプであっても「投稿」と「固定ページ」のビューテンプレートを選択できるようになっていますが、それ以外のテンプレートを選択したい場合もあるはずです。

Snow Monkey v6以降であれば、カスタムページテンプレートをプラグインで設定できるように対応されており、それと同様の手順を My Snow Monkey プラグインで設定を行えば、カスタムページテンプレートを選択できるようになりました。これを使用してカスタム投稿でもページテンプレートを設定してみましょう。

ルミェール

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

Snow Monkey の標準のページテンプレートをカスタム投稿タイプでも使用する方法

まずは、 My Snow Monkey プラグインに、プラグインのテンプレートパーツのルートディレクトリを作成し、snow_monkey_template_part_root_hierarchy フックで設定を行いましょう。
(※ すでに設定をされている場合は必要ありません)

Snow Monkey 公式ウェブサイトの「カスタムページテンプレートの追加方法」の記事では、ファイルの記述をコピーして使用されているのですが、カスタム投稿タイプでも標準のページテンプレートとして使用する場合、テーマにある同一のページテンプレートファイルを読むように調整してあげる方が良いかもしれません。そのようにしてみましょう。

ルミェール

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

現在の Snow Monkey で用意されている標準のページテンプレートは、次のように7つあります。

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
Landing page ( slim width )ランディングページ(スリム幅)page-templates/blank-slim.php
(Snow Monkey v7以降に追加されています)

テーマ標準と同様のレイアウトを使用するのに必要なことは

  • 7つのページテンプレートを同じファイル名で配置にすること
  • Template Name
  • Template Post Type
  • 後述の記述

です。

ワンポイントアドバイス

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

<?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(読込み) しますので、テーマのページテンプレートに記載された処理が実行されます。

テーマがアップデートされた場合でもアップデートされたテーマのページテンプレートを読込んで処理を反映しますので、上書きなどの問題を受けません。

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

標準で用意されている7つのタイプのテンプレートに関しては、次のように7つのファイルを用意し、上記のようにテーマディレクトリのページテンプレートを読込む記述の方法で使用すれば、テーマのアップデート時にもテーマのアップデートされたページテンプレートで対応されます。

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

my-snow-monkey.php

template-root(プラグインのテンプレートルートディレクトリ)

page-templates

blank.php

blank-slim.php

left-sidebar.php

one-column-full.php

one-column-slim.php

one-column.php

right-sidebar.php

テーマ標準のページテンプレートは、プラグインで上書き非推奨

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

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

テネーブル

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

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

テネーブル

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

最後に

本来の WordPress では、子テーマを使用しないと難しいカスタム投稿のページテンプレートなどと言った仕様を Snow Monkey ではプラグインでも行えるようにしていることからも、プラグインの方では上書きが推奨できないなどの部分もあります。

しかし、子テーマを作らずにプラグインで可能なので、カスタム投稿に合わせたデザインのページテンプレートを同一のプラグインで配布できるのは非常に魅力があると思います。興味のある方は、そういうことにも挑戦してみてください。

この記事の筆者

Kmix39(ケミ)

電子の妖精。当ウェブサイトの記事制作などを行なっています。
金融・不動産・医療・教育などの数々の業種のシステム開発を経験を積み、スマートフォンアプリケーションと WordPress などのウェブアプリケーションを日々勉強中。