呟く茸の日記帳HOMEBLOGABOUTCONTACT呟く茸の日記帳ホームブログプログラミングWordPressテーマを構成するファイルについてWordPressテーマを構成するファイルについて2017-08-09プログラミングHiratake半年ほど前、この「呟く茸の日記帳」を新しくするため、オープンソースのブログソフトウェアである「WordPress(以下、WP)」の自作テーマを作りなおしました。その際に、WPテーマを構成するファイルについて調べて自分用にまとめたのですが、まわりの人にみせる機会が何度かあり、需要があるのかもしれないと思ったのでとりあえずここに置いておきます。詳しく書いてあるサイトなんかもあると思いますし、間違ってる箇所もあるかもしれないので、参考程度にどうぞ。WPテーマについてWPテーマとは、WordPressで制作されたサイトの見た目を変更したり、機能を追加することができるファイルの集合体である。ファイルの場所テーマは、デフォルトでは「wp-content/themes/」の中にあるサブディレクトリに存在している。WPに「test-theme」というテーマをインストールしたとすると、そのテーマのファイルは「wp-content/themes/test-theme/」ディレクトリに存在する。構成WPテーマは次のようなファイルで構成される。phpindex.phpメインテンプレート必須のファイルである他のテンプレートがない場合にはこのファイルが表示されるfunctions.phpテーマの関数を定義することができる基本的にプラグインのように動作するhome.phpホームページのテンプレートindex.phpよりも表示の優先度が高い。設定ページでフロントページを作成した固定ページにしている場合は設定した固定ページが優先される。front-page.phpフロントページのテンプレートhome.phpよりも表示の優先度が高い。設定ページでフロントページを作成した固定ページにしている場合でも、このテンプレートが優先される。single.php個別投稿ページのテンプレートsingle-<post_type>.phpという名前のファイルを用意することができる投稿タイプ(後述)がnubescoの個別投稿であれば、single-nubesco.phpが呼び出されるpage.php固定ページのテンプレートpage-<slug>.phpという名前のファイルを用意することができる固定ページのスラッグがnubescoであれば、page-nubesco.phpが呼び出されるpage-<id>.phpという名前のファイルを用意することもできる固定ページのIDが334であれば、page-334.phpが呼び出されるidよりもslugが優先されるcategory.phpカテゴリページのテンプレートカテゴリ別の記事一覧を表示する際に用いられる存在しない場合は「archive.php」が用いられるcategory-<slug>.phpという名前のファイルを用意することができるカテゴリのスラッグがnubescoであれば、category-nubesco.phpが呼び出されるcategory-<id>.phpという名前のファイルを用意することもできるカテゴリのIDが334であれば、category-334.phpが呼び出されるidよりもslugが優先されるtag.phpタグページのテンプレートタグ別の記事一覧を表示する際に用いられる存在しない場合は「archive.php」が用いられるtag-<slug>.phpという名前のファイルを用意することができるタグのスラッグがnubescoであれば、tag-nubesco.phpが呼び出されるtag-<id>.phpという名前のファイルを用意することもできるタグのIDが334であれば、tag-334.phpが呼び出されるidよりもslugが優先されるtaxonomy.phpカスタム分類別の記事一覧を表示する際に用いられる存在しない場合は「archive.php」が用いられるarchive.phpカスタム投稿タイプ別の記事一覧を表示する際に用いられるarchive-<post_type>.phpという名前のファイルを用意することができる投稿タイプ(後述)がnubescoの記事一覧であれば、archive-nubesco.phpが呼び出されるauthor.php作成者別の記事一覧を表示する際に用いられる存在しない場合は「archive.php」が用いられるauthor-<nicename>.phpという名前のファイルを用意することができる作成者のnicenameがhiratakeであれば、author-hiratake.phpが呼び出されるauthor-<id>.phpという名前のファイルを用意することもできる作成者のidが334であれば、author-334.phpが呼び出されるdate.php日付別の記事一覧を表示する際に用いられる存在しない場合は「archive.php」が用いられるsearch.php検索結果を表示する際に用いられるattachment.php投稿タイプがattachmentのものを表示する際に使用される<MIME_type>.phpという名前のファイルを用意することができるファイルの種類が「text/plain」であれば、「text.php」「plain.php」「textplain.php」の順に探して、存在すれば呼び出され、こちらのほうがattachment.phpよりも優先度が高いimage.php、video.phpなど404.phpサーバエラー404ページの表示に使用されるheader.phpモジュールテンプレート呼び出す際は「get_header();」を使用footer.phpモジュールテンプレート呼び出す際は「get_footer();」を使用sidebar.phpモジュールテンプレート呼び出す際は「get_sidebar();」を使用searchform.phpモジュールテンプレート呼び出す際は「get_search_form();」を使用comments.phpモジュールテンプレート呼び出す際は「get_comments_template();」を使用CSSstyle.cssメインのスタイルシートテーマにはこのファイルが必須であり、テーマのヘッダ情報(後述)を含んでいる必要があるrtl.cssRTLスタイルシートウェブサイトのテキスト方向が右から左の場合、自動的に適用されるその他ファイルscreenshot.pngテーマのスクリーンショットテーマ一覧で表示されるページテンプレート固定ページなどを作成する際に、選択できるテンプレートを作成することができる。テンプレートのファイル名は拡張子がphpであればなんでもよく(予め用途が決まっているものはNG)、たとえば「mypage.php」のような感じである。ここにテンプレートの名前を入れる*/?>と書き込む必要がある。ここで「ここにテンプレートの名前を入れる」と書いてある部分は、当たり前だがこの通り入れる必要はなく自分の好きな名前を書き込む。投稿タイプ投稿タイプとは、投稿された記事や固定ページなどに付けられるタイプである。デフォルトでは、次のものが用意されている。投稿(投稿タイプ:post)最もよく使われる投稿タイプ投稿した記事に付けられる固定ページ(投稿タイプ:page)固定ページに付けられる添付ファイル(投稿タイプ:attachment)WPのメディアアップロードシステムを使ってアップロードされたファイルに付けられるリビジョン(投稿タイプ:revision)下書きや後悔済みの投稿の変更履歴を保存するための投稿タイプナビゲーションメニュー(投稿タイプ:nav_menu_item)ナビゲーションメニュー(管理画面の、外観→メニューでいじるやつ)を保存するための投稿タイプ用意されている投稿タイプとは別に、自分で「カスタム投稿タイプ」を作ることが可能である。モジュールテンプレートモジュールテンプレートとは、複数ページで使用する共通のパーツを分けて管理するために使用されるものである。デフォルトで用意されているものも存在する(上に記載した通りである)が、自分で作ることもできる。?>というコードで呼び出すことが出来る。?>というコードで呼び出すことが出来る。テーマのヘッダ情報(CSS)style.cssには次のようなヘッダ情報をつける必要がある。記述できるものの一部について以下に記す。URI:テーマの作成者のWebサイトアドレスTags:テーマのタグテンプレートタグテンプレートタグとは、ブログのデータを動的に表示したり、カスタマイズしたりするときに使うPHPのタグである。テンプレートタグの中には、WordPressループ内でしか使用できないものWordPressループ外でしか使用できないものどこでも使用できるものが存在するので、注意する必要がある。WordPressループについては後で述べる。WordPressループWPには、「WordPressループ」と呼ばれるものが存在する。ループとは、繰り返し処理である。WordPressで作成した投稿などを繰り返し表示するための記述である。テンプレートタグの中には、このループ内でしか使えないものが多数あるので、使うことができるようにしておかなければならない。ループは次のような形がよく用いられる。表示する投稿が存在するかをチェックしている。「have_posts()」は、表示するものが存在するかどうかをチェックする関数で、これを使用するとループが開始する。ループ内でループを発生させると永久ループが発生してしまうので注意が必要である。「the_post()」は、ループ内で値をカウントアップする役割があるため、これを記述しないとループが終了しなくなってしまう。記事一覧ページなどでは、ループは1ページに表示する記事の回数だけ行われる。個別記事ページなどでは、1度だけ実行される。関数WPには便利な関数が多数定義されている。これらを使うことでプラグインの開発をすることも可能である。WPで関数を使用する際やプラグインを作成する際に用いられるものの中に「フィルターフック」と「アクションフック」がある。フィルターフックWPでは、データベースとブラウザの間にフィルターが存在している。投稿した記事は、WPフィルターを通った後にデータベースに保存され、データベースに保存されているデータはWPフィルターを通ってからブラウザへ出力される。データベースに保存されている記事本文には<p>タグは付いていないが、<p>タグを付けるフィルターを通ることで、ブラウザに表示されるデータには<p>タグがついているのである。このように、WPのほとんどの入出力は必ず最低1つのフィルターを通過する。フィルターフックとは、このフィルターを通過する際に、自分で作った関数やプラグインをWPに実行させることである。「the_content(本文)」の中の文字列を置換するみたいなことが出来る。関数をフック(引っ掛ける)するには、「add_filter」という関数を用いる。);フィルターを削除したい場合は「remove_filter」という関数を用いる。functions.phpに書いてしまえば、すべてのページで削除される。single.php内に書けば、個別記事ページで削除される。アクションフックWPで発生する特定のイベントによって始動するものである。投稿を公開する、テーマを変更する、管理画面を表示する、header.phpを読み込む、といったときに発動するものである。アクションフックも、フィルターフックと同様に削除が可能である。次の例はWPのバージョンが<head>内に出力されるのを削除したものである。はてブHiratakeCSSとプリキュアがすき。