目的の箇所はどのテンプレートをいじれば変更できるの?

ヘッダ画像

WordPressで現在のページ表示に使用しているテンプレートをすべて知る

WordPressでは、投稿タイプに応じてデフォルトの構成テンプレートが適用されます。
ただし、プラグインなどを使用しなくても、トップページ(インデックスページ)・固定ページ・カテゴリ、あるいはカスタム投稿タイプなど、表示の際にテーマ中のデフォルトとは異なったテンプレートを適用することができます。
しかし、テーマ構成が複雑になった場合に該当ページが「どのテンプレートで表示されているか?」分からないケースもあります。
そこで現在表示しているテーマの情報を表示させてみます。

適用しているテーマ名とテンプレート名を取得

まずは表示に使われているテーマ名とテンプレート名を取得してみます。
このような際にWordPressでは適用されているテンプレートの情報を持つ$templateという関数で調べることができます。

<?php
if ( is_user_logged_in() ) {
global $template;
$template_dir = basename ( dirname( $template ) );
$template_name = basename($template, '.php');
echo "テーマ:{$template_dir}<br />テンプレート:{$template_name}";
}
?>

テーマの「Twenty Seventeen」の「single」のテンプレートが適用されている

このglobal $templateをヘッダテンプレートのbody直下あたりに記述すれば、ブラウザの最上部、あるいはフッタテンプレートのbodyの閉じタグ直前あたりに記述すれば、ブラウザの最下部に適用されているテーマ名とテンプレートが表示されます。

includedしているテンプレートを表示する

WordPressではヘッダ・メイン・サイドバー・フッタなどをパートごとに読み込むわけですが、各テンプレート内においてもget_template_partを使うことにより、さらに別のテンプレートを読み込むことができます。
便利ではあるのですが、インクルードが多すぎると該当の箇所が実際にどのテンプレートで表示されているのか非常に分かりにくくなってしまいます。
つまり、目的のカスタマイズを行うためには構成テンプレート認識する必要があるということです。
WordPressにデフォルトのTwentyシリーズなどもそういう傾向がありまね。

こういった際に役立ちそうな該当ページの表示に使われているテンプレートを確認する方法を紹介します。
このPHPコードを読み込んだ時点でincludedされているテンプレートの一覧を書き出しますので、こちらはフッタテンプレートのwp_footer()以降</body>直前などに挿入ください。
最下部にincludedされたものを含むすべての使用テンプレートを表示します。

<?php
if ( is_user_logged_in() ) {
$inc_file_list=get_included_files();
foreach($inc_file_list as $ink_key => $ink_val){
if(stristr($ink_val,'themes')){
$ink_temp=mb_strlen($ink_val)-strrpos($ink_val,'.');
$ink_temp=strrpos($ink_val,'/',$ink_temp);
echo substr($ink_val,$ink_temp+1).'<br />'.PHP_EOL;
}
}
}
?>

少々、追加項目はありますが、下記は自前のオリジナルテーマに実装したものです。

フッタ部分に仕様テンプレートを表示

Twentyシリーズの構成テンプレート?

例としてカスタマイズに人気のTwentyシリーズの表示に使用されているテンプレート一覧を取得してみました。

Twenty Seventeenのインデックスページ

  • functions.php
  • custom-header.php
  • template-tags.php
  • template-functions.php
  • customizer.php
  • icon-functions.php
  • index.php
  • header.php
  • header-image.php
  • site-branding.php
  • content.php
  • sidebar.php
  • footer.php
  • footer-widgets.php
  • site-info.php
  • svg-icons.svg

いかがでしょうか。
ページの表示に実はこんなにたくさんのテンプレートを使っているのです!

例えばインデックスページでは記事全文が表示されますが、これを抜粋にしたい場合はtwentyseventeen/template-parts/post/content.phpの中のthe_contentthe_excerptに書き換えます。
このようなカスタマイズを行うには構成テンプレートを知る必要があるのです。
Twentyシリーズはなかなかよくできていますが、正直なところ、構成テンプレートが複雑で初心者にはカスタマイズが難しいと思います。

Twenty Fourteenの投稿ページ

  • functions.php
  • custom-header.php
  • template-tags.php
  • customizer.php
  • featured-content.php
  • widgets.php
  • single.php
  • header.php
  • content.php
  • comments.php
  • sidebar-content.php
  • sidebar.php
  • footer.php
  • sidebar-footer.php

一応、is_user_logged_inでログイン状態時のみテンプレート情報を表示するようにしています。

あとがき

プラグイン化してもよいかと考えたのですが、大した内容ではないですし、わたしはソースをそのまま公開しました。
この記事を書いた時点では存在していませんでしたが、最近はこの仕組みをプラグイン化したものがあるようですね。

いずれにしても、基本的にカスタマイズ時以外では不要なコードかと思いますので、制作案件として承っている場合はお客様への納品時の消去をお忘れなく!

コメントを残す

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



関連記事

WordPressのログインユーザー名は丸見え!? 知っていますか?WordPressのログインユーザー名はだだ漏れだという事実を...ダッシュボード乗っ取り防止のためのセ...

絶対に分かる!WordPressの子テーマ作成 WordPressでは子テーマという機能があります。既存のテーマを作成すれば、カスタマイズする際に変更したい部分だけを子...

WordPressのRSSフィードを完全にコントロールする WordPressではコンテンツの更新情報を知らせるために標準でRSSを出力します。その出力方法は...http://e...

「トップに戻る」ボタンでスマホでのユーザビリティアップ! ウェブサイト上でコンテンツを下にスクロールさせると「トップに戻る」ボタンが出現して、クリックするとビューンとページの初め...