WordPressのディレクトリ/ファイルの役割を学ぼう

#概要
WordPressのプロジェクト上のディレクトリや、
バックエンド処理を行うソース・設定ファイル等についてのメモ。

- ブラウザ等からGUI上でWordPressを操作したことがあるが、バックエンドについても覚える必要が出てきた
- WordPressのディレクトリ構成をざっくり知りたい
<br>というようなときにお役立てください。
<br>

今回はdocker-composeを使い環境構築をしているので、その場合は以下が前提です。

- Docker上でWordPressのローカル実行環境が整っていること<br>手っ取り早くDockerの設定ソースを見たい方は以下からどうぞ。<br>→ https://github.com/nsktdeluxe/wp-practice_2

- `docker-compose up`でコンテナが起動していること

サーバーにソースをアップロードしている場合はFTPソフトなどで確認を行ってください。

#WordPressのコンテナに入る
現在起動中のコンテナを確認する

~~~
$ docker container ls
~~~
<br>
コンテナ一覧が表示されるので、中身を見たいWordPressコンテナのNAMES要素をコピー。
下記画面では「wp-practice_2_wordpress_1」（画像右上ハイライト箇所）

<img width="1135" alt="起動中のコンテナ一覧" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262145/9cad4357-f907-d8c4-14a1-417abd9c5794.png">

コピーしたものを以下のbashコマンドにペーストして叩く

~~~
$ docker exec -it wp-practice_2_wordpress_1 /bin/bash
~~~
<br>
これでWPのコンテナ内に入ることができました。
ホームディレクトリで`$ ls -al`すると、以下のようなディレクトリ一覧が出てきます。
<img width="1135" alt="Wordpressのディレクトリ一覧" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262145/dd728b88-3c66-7545-6b0c-c990520f8d63.png">

今回はこの中から、ホームディレクトリ直下の各種ファイルと
最低限覚えておきたい主要ディレクトリ４つについて説明します。

#ホーム直下のファイル
①〜⑥はphpの起動する順です。

|  ファイル名  |  説明  |
| ---- | ---- |
| .htaccess   |  Apacheの設定ファイル。サーバの挙動を決める。  |
|  index.php ( ① )  |  サーバにアクセスされたときに最初に読み込まれるページ。<br>テーマが使われているか(boolean型の定数'WP_USE_THEMES')をチェックして、require関数を使い ② を読み込む。  |
|  license.txt  |  ライセンスに関するテキストファイル（サーバーにアップロードする必要はない）  |
|  readme.html  |  WordPress のインストールや基本的な情報を記載したファイル（サーバーにアップロードする必要はない）  |
|  wp-activate.php  |  ユーザーアカウントに関するファイル  |
|  wp-blog-header.php ( ② )  |  WordPress 環境に関連するファイルをロードするファイル。 ③ と ⑥ を読み込む。 |
|  wp-comments-post.php  |  コメント投稿に関するファイル  |
|  wp-config.php ( ④ )  |  DBやデバッグモード、WPで使用する絶対パス等の設定をするファイル  |
|  wp-config-sample.php  |  インストール時にこのファイルを元に設定ファイルを作成することができるサンプルファイル。インストール後は wp-config.php という設定ファイルが生成される  |
|  wp-cron.php  |  擬似 cron ジョブ（ある種のスケジューリング機能）を担うファイル  |
|  wp-links-opml.php  |  リンクの XML 出力に関するファイル  |
|  wp-load.php ( ③ )  |  名前の通り、WordPress の動作や起動に関連するファイル ④ をロードするファイル。 |
|  wp-login.php  |  管理画面のログインに関するファイル  |
|  wp-mail.php  |  メールによるブログ投稿用ファイル  |
|  wp-settings.php ( ⑤ )  |  wp-includesを読み込むファイル  |
|  wp-signup.php  |  ブログ名やユーザー名などの設定に関するファイル  |
|  wp-trackback.php  |  トラックバックと Ping 送信用ファイル  |
|  xmlrpc.php  |  XML-RPC 通信に関するファイル  |
|  wp-includes/<br>template-loader.php ( ⑥ )  |  テーマフォルダからsingle.php、search.php、index.phpなどを読み込むファイル  |

 

#主要ディレクトリ
###1. `wp-admin`
管理画面に関するファイルを格納するディレクトリ。管理画面の表示に使われるadmin.php、HTML（PHP）、CSS、画像ファイル等から構成されている。
Wordpressをアップデートすると**ここの内容も最新版に置き換わってしまう**ため、管理画面のカスタマイズをするにはfunctions.php（後述）を編集するかプラグインを使用する。

###2. `wp-includes`
API、クラス、関数などのプログラムファイルが格納されている。
ここもWordpressをアップデートすると最新版に置き換わる。

###3. `wp-content`
サイト構築に関わるファイルが格納されている。


- languages……多言語に対応するための翻訳ファイルが入っている
- plugins……プラグインが入っている
- themes……テーマ（次項**4.**で説明）
- upgrade……アップデート時に利用するもの
- uploads……画像や動画など。初期状態では存在しないが、アップロードをすると自動的に作成される
- index.php……フォルダ一覧が見えないようにするためのダミーのindex（これはプロジェクト内各所に存在する）。<br>中身を見ると`// Silence is golden.`(沈黙は金)というコメントだけ書かれている。

###4. `wp-content/themes`
初期状態では'twentynineteen'、'twentyseventeen' などのディレクトリに公式テーマが置かれている。
テーマを作成する場合は、ここに任意の名前でディレクトリをつくり**テンプレートファイル**（ページの表示のしかたを決めるもの）、css、jsなどを配置する。

##テーマファイルの中身
（例：wp-content/themes/twentynineteen）

※`style.css`と`index.php`の２ファイルが必須（これらがあればテーマとして認識されるようです）。

###テンプレートファイル

|  ファイル名  |  説明  |
| ---- | ---- |
|  404.php  |  404 not foundのページを出力する  |
|  archive.php  |  アーカイブ（一覧）ページを出力する  |
|  category.php  | カテゴリーごとのアーカイブ（一覧）ページを出力する  |
|  date.php  |  日付ごとのアーカイブ（一覧）ページを出力する  |
|  front-page.php  |  サイトのトップページを出力する  |
|  home.php  |  ブログのトップページを出力する  |
|  index.php  |  他に適切なテンプレートが存在しない場合に最終的に使用されるファイル  |
|  page.php  |  個々の固定ページを出力する  |
|  search.php  |  検索結果のページを出力する  |
|  single.php  |  個々の投稿のページを出力する  |
|  tag.php  |  タグごとのアーカイブ（一覧）ページを出力する  |
|  author.php  |  作成者別のアーカイブ（一覧）ページを出力する  |

###スタイルシート(css)
|  ファイル名  |  説明  |
|  ----  |  ----  |
|  style.css  |  必須ファイル。冒頭にテーマ情報*を記載する。  |
|  style-editor.css,<br>style-editor-*.css など  |  エディタ用css  |

*テーマの名前(必須)、URI、テーマのライセンス、ライセンスのURIなど。

###共通パーツファイル
indexや固定ページ、記事のページなどで各パーツを表示するために使用する。

|  ファイル名  |  説明  |
|  ----  |  ----  |
|  footer.php  |  フッターの共通パーツ  |
|  header.php  |  ヘッダーの共通パーツ  |
|  sidebar.php  |  サイドバーの共通パーツ  |

###コンテンツファイル

|  ファイル名  |  説明  |
|  ----  |  ----  |
|  content.php  |  記事の中身を表示するためのファイル  |
|  content-*.php  |  同上  |

###function関連ファイル

|  ファイル名  |  説明  |
|  ----  |  ----  |
|  functions.php  |  現在のテーマに新しい機能を追加したいときに編集するファイル  |
|  inc(ディレクトリ)  |  function.phpで使用しているテンプレートファイルが入っている  |

*レイアウトを変更する時は、主に`functions.php`と`style.css`を直す。<br>必要に応じて共通パーツファイルに手を加える


#参照
https://www.webdesignleaves.com/pr/wp/wp_folder_structure.html
https://www.nishi2002.com/27755.html
https://www.slideshare.net/michirosakamoto/10wordpress
https://www.webdesignleaves.com/pr/wp/wp_templates.html