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 でテーマのテンプレートファイルを読み込んでいる。テンプレートファイル読み込みの大まかな流れは以下の通り。
-
do_action( 'template_redirect' );
- テーマファイルが呼ばれる前に実行されるアクション
- WordPress で 1 番はじめに実行されるアクション ( だと思う )
-
is_page()
- 条件分岐タグでどのファイルを読み込むか分岐
-
get_page_template()
- 現在のテーマまたは親テーマでページテンプレートのファイルパスを取得する
-
get_query_template('page', array( 'pagetemplate.php', 'page-pagename.php', 'page-id.php', 'page.php ) );
-
get_page_template()
内で使われている関数 - テンプレートのファイルパスを取得する
-
-
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
orreturn TEMPLATEPATH
/pagetemplate or page-pagename or page-id or page.php
-
-
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対応 (「いちばんやさしい教本」シリーズ)”]