WordPress テーマのテンプレートファイルのファイルパスをプラグインで変更する

こんにちわ、@kuck1u です。

タイトルで何言ってるのか分からないと思うが、僕もどういったらいいのか分からない。それよりも、この記事を書き始めた時に思ったのだけれど、たぶん、使う機会はそうそうないと思う。ま、そのようなことはひとまず置いておいて話しを進めようと思う。

タイトルの内容がどういうことか簡単に説明すると、投稿ページを開いた時に読み込まれるテーマのテンプレートファイルは以下のいずれかになることが多い。

  • wp-contents/themes/theme-name/single.php
  • wp-contents/themes/theme-name/single-hoge.php
  • wp-contents/themes/theme-name/index.php

この記事の内容は上記を

  • wp-contents/plugins/plugin-name/single.php
  • wp-contents/plugins/plugin-name/single-hoge.php
  • wp-contents/plugins/plugin-name/index.php

へ変更しようというもの。

[tmkm-amazon asin=’4844337092′][/tmkm-amazon]

テーマファイルの読み込まれ方 ( 固定ページの場合 )

まずは、テーマのテンプレートファイルの呼ばれ方をもの凄くざっくりと。

index.php の中で wp-blog-header.php が require され、wp-blog-header.php 内で wp-load.php が require_once された後、同ファイル内で wp-includes/template-loader.php が require_once される。
wp-includes/template-loader.php でテーマのテンプレートファイルを読み込んでいる。テンプレートファイル読み込みの大まかな流れは以下の通り。

  1. do_action( 'template_redirect' );
    • テーマファイルが呼ばれる前に実行されるアクション
    • WordPress で 1 番はじめに実行されるアクション ( だと思う )
  2. is_page()
    • 条件分岐タグでどのファイルを読み込むか分岐
  3. get_page_template()
    • 現在のテーマまたは親テーマでページテンプレートのファイルパスを取得する
  4. get_query_template('page', array( 'pagetemplate.php', 'page-pagename.php', 'page-id.php', 'page.php ) );
    • get_page_template() 内で使われている関数
    • テンプレートのファイルパスを取得する
  5. locate_template( array( 'pagetemplate.php', 'page-pagename.php', 'page-id.php', 'page.php ) );
    • get_query_template() 内で使われている関数
    • get_query_template() の 第 2 引数が空の時は 第 1 引数の値に .php を追加したものがセットされる
    • STYLESHEETPATH で探した後 TEMPLATEPATH で探す
    • return STYLESHEETPATH or return TEMPLATEPATH /pagetemplate or page-pagename or page-id or page.php
  6. return apply_filters( "{$type}_template", $template );
    • get_query_template() の返り値
    • $type = get_query_template() の第 1 引数
    • $template = locate_template() の返り値

プラグインでテーマのテンプレートファイルを別のファイルパスに書き替える例

function posttype_kucklu_template( $template ) {
$object = get_queried_object();
if ( 'post' == $object->post_type )
$template = WP_PLUGIN_DIR . '/kucklu-special-dynamite/single.php';
return $template;
}
add_filter( 'single_template', 'posttype_kucklu_template' );

template_redirect フックで替える事も可能だが、実際にテーマファイルを読み込んでるのは single_template なので、single_template を書き替えるのが適切だと判断。
また、 template_redirect はプラグインから呼ばれる事が多いので、template_redirect は避けた方がいいという判断。
何でもかんでも template_redirect にすればいいってもんじゃないんですよ ! などと言ってみたりw

最後に・・・

そもそもだけど、これ使い道ないし、たぶん the_content フックを使う事の方が多いと思う。というくらいに役に立たない記事でした。

それでは本日はここまで。

KUCKLU でした。

[amazonjs asin=”4844337092″ locale=”JP” title=”いちばんやさしいWordPressの教本 人気講師が教える本格Webサイトの作り方 第2版 WordPress 4.x対応 (「いちばんやさしい教本」シリーズ)”]

この記事が気に入ったら
いいね ! しよう

Twitter で

Written by くっくる

WordPressを使ったウェブサイトの構築・HTMLコーディングの受託案件を中心に埼玉県にて活動中。バイラルメディア風にFacebook pageのいいね!ボタンを設置できるVA Social Buzzをはじめ、複数のWordPressプラグインを公開している。共著書として「エンジニアのためのWordPress開発入門」がある。

View all author posts →

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください