WordPressのディレクトリ構造について

WordPressのディレクトリについて WordPress

ディレクトリの中身を理解する

WordPress のファイル
ディレクトリ 説明
wp-admin 管理画面に関するファイルを格納するディレクトリ
wp-content テーマやプラグインなどに関するファイルを格納するディレクトリ
wp-includes WordPress システム全般に関するファイルを格納するディレクトリ
ファイル 説明
.htaccess WordPress インストール後に生成される .htaccess ファイル(※)
index.php サイトにアクセスがあった場合に、最初に読み込まれるファイル(インデックスファイル)
license.txt ライセンスに関するテキストファイル(サーバーにアップロードする必要なし)
readme.html WordPress のインストールや基本的な情報を記載したファイル(サーバーにアップロードする必要なし)
wp-activate.php ユーザーアカウントに関するファイル
wp-blog-header.php WordPress 環境に関連するファイルをロードするファイル
wp-comments-post.php コメント投稿に関するファイル
wp-config.php 設定ファイル
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 WordPress の基本設定に関するファイル
wp-signup.php ブログ名やユーザー名などの設定に関するファイル
wp-trackback.php トラックバックと Ping 送信用ファイル
xmlrpc.php XML-RPC 通信に関するファイル

wp-includes フォルダー

wp-includes フォルダーには、API、クラス、関数などのプログラムファイルが格納されています。WordPressのアップデートでは最新の状態に書き換わります。

wp-admin フォルダー

WordPress の管理画面の表示部分に関するファイルが格納されていて、管理画面の表示に使われる HTML(PHP)、CSS、画像ファイル等から構成されています。WordPress をアップデートすると新しいバージョンのファイルに書き換わります。

wp-content フォルダー

内容変更が多いファイルが格納される場所。画像の書き込みや削除を行うので、サーバーによっては、パーミッションの設定が必要です。

cache キャッシュデータで、存在しない場合もある、無視して良い

languages 言語サポート用のファイル、無視して良い

upgrade アップグレード時のファイル、存在しない場合もある、無視して良い

themes テーマや子テーマの格納場所
WordPress管理画面やFTPを用いた変更をする

plugins プラグインの格納場所
WordPress管理画面やFTPを用いた変更をする

uploads 各種メディア(画像,PDF,その他)の格納場所
WordPress管理画面からメディアのアップロードや削除、編集などをする

WordPressが表示されるまでの流れ

主な読込の流れ
1)  index.php
2)  wp-blog-header.php
3)  wp-load.php
4)  wp-config.php
5)  wp-settings.php
6)  wp-includes/template-loader.php

全てのアクセスは、WordPressのドキュメントルート「/」直下の.htaccessファイル内に記述により、直下のindex.phpが実行されます。

/* ローカルサーバーの場合 */ 

// Linux 環境の場合 
/var/www/html/index.php 
/usr/local/apache2/htdocs/index.php

// Windows XAMPP 環境の場合 
C:\xampp\htdocs\index.php

// Mac MANP 環境の場合
 /Applications/MAMP/htdocs/index.php

.htaccess

/*   .htaccess   */
RewriteEngine On                   // 転送を有効化
RewriteBase /                     // ドキュメントルート以降のアクセスを転送対象とする
RewriteRule ^index\.php$ - [L]          // 無限転送防止。index.php以外のアクセスのみリダイレクト
RewriteCond %{REQUEST_FILENAME} !-f             // 実ファイルが存在する場合は転送しない 
RewriteCond %{REQUEST_FILENAME} !-d          // 実ディレクトリが存在する場合は転送しない
RewriteRule . /index.php [L]                      // 上記以外のリクエストを全てindex.phpへ転送する

パーマリンク設定を標準の/?p=投稿ID形式に指定している場合は「 index.php?p=9となり」URLのリダイレクトの必要はないので、上記の.htaccessは生成されないときがある。※テーマによる。

.htaccess ファイルは WordPress のパーマリンク設定時に自動的に生成され、テーマディレクトリに配置されています。WordPress のパーマリンクは .htaccess ファイルと Apache の mod_rewrite モジュールで制御されています。 レンタルサーバーの場合はApache は標準で設定済です。

index.php

<?php   /*     index.php   */

require( dirname( __FILE__ ) . '/wp-blog-header.php' );
//                __FILE__  == "/index.php"
//        dirname(__FILE__) == "/"

wp-blog-header.phpファイルを読み込みます。

wp-blog-header.php

<?php /* /wp-blog-header.php */

// 設定の読み込み(データベース情報、WordPress関数・クラスの定義)
require_once( dirname( __FILE__ ) . '/wp-load.php' );

wp();     // WordPressのセットアップ(URL解析、クエリ変換)

// テンプレートの読み込み
require_once( ABSPATH . WPINC . '/template-loader.php' );
// ABSPATH == "/"
//   WPINC == "wp-includes"

wp-blog-header.phpでは設定の読み込みとURL解析/クエリ変換と、テンプレートのファイルが読込みれます。wp-load.php、WPINC/template-loader.php が読込。

wp-load.php
wp-config.php を読込。
wp-config.php はサイトのURL、データベース情報、ユーザーアカウントが設定。

wp-config.php

wp-settings.php が読込。
wp-settings.php はWordPress関連の関数やクラスが読込まれます。

wp()関数ではリクエストされたURLへの解析が行われます。

例)カテゴリーページへのリクエストURL(/category/wordpress/)を、厳格なクエリ(/index.php?category_name=wordpress)に変換されます。
クエリの結果を元に、投稿ページやカテゴリーページの判定が行われます。判定結果をみて is_single()is_category()などといったページ判定関数が実行されます。

投稿内容の取得やループは、wp()関数の実行後からつかえます。このwp-blog-header.phpファイルの実行後は、テンプレートを読み込んでページを表示するだけになります。

表示はtemplate-loader.phpで行われます。

wp-settings.php

主にwp-includesディレクトリ内のファイルを複数読み込みしていきます。

テーマディレクトリのfunction.phpを読込

wp-admin/includes/class-wp-site-health.php を読込
WordPressのバージョンをチェックして更新を表示する等の内容

//要点のみ

define( 'WPINC', 'wp-includes' );   //"WPINC"のディレクトリを定義しています。

//------------------------(省略)------------------------

// Load the functions for the active theme, for both parent and child theme if applicable.
foreach ( wp_get_active_and_valid_themes() as $theme ) {
	if ( file_exists( $theme . '/functions.php' ) ) {
		include $theme . '/functions.php';  //テーマのfunctionが読込
	}
}
unset( $theme );

//------------------------(省略)------------------------


/**
 * Fires after the theme is loaded.テーマがロードされた後に発生します。
 * @since 3.0.0
 */

do_action( 'after_setup_theme' );

// Create an instance of WP_Site_Health so that Cron events may fire.
if ( ! class_exists( 'WP_Site_Health' ) ) {
	require_once ABSPATH . 'wp-admin/includes/class-wp-site-health.php';   //adminからファイル読込
}
WP_Site_Health::get_instance();

// Set up current user.
$GLOBALS['wp']->init();

//------------------------(省略)------------------------

// Ajax リクエストは wp-admin/admin-ajax.php を使用する必要があります。
//  admin-ajax.php はリクエストを処理できます

/**
 * This hook is fired once WP, all plugins, and the theme are fully loaded and instantiated.
 * Ajax requests should use wp-admin/admin-ajax.php. admin-ajax.php can handle requests for
 * users not logged in.
 * @link https://codex.wordpress.org/AJAX_in_Plugins

 * @since 3.0.0
 */
do_action( 'wp_loaded' );


template-loader.php

アクセス時のURLに応じてそれぞれ異なるテンプレートが読み込まれます。

<?php /*    /wp-includes/template-loader.php    */

if (     is_home()     && $template = get_home_template()     ):
    // ホームページへのアクセスが行われた場合
    // $template == "/wp-content/themes/テーマ/index.php"
elseif ( is_single()   && $template = get_single_template()   ):
    // 投稿ページへのアクセスが行われた場合
    // $template == "/wp-content/themes/テーマ/single.php"
elseif ( is_page()     && $template = get_page_template()     ):
    // 固定ページへのアクセスが行われた場合
    // $template == "/wp-content/themes/テーマ/page.php"
elseif ( is_category() && $template = get_category_template() ):
    // カテゴリーページへのアクセスが行われた場合
    // $template == "/wp-content/themes/テーマ/category.php"
endif;

include( $template ); // テンプレートファイルを読み込み・表示する

例)カテゴリーページ(http://marycore.jp/category/wordpress/http://marycore.jp/?cat=9)は、is_category()関数が有効になり、get_category_template()テンプレートファイルの取得されます。

最後に、取得されたテンプレートファイルのパスをincludeで読込むことで、テンプレートが整形され、HTMLが出力・表示される仕組みです。

投稿ページの表示

投稿ページは基本のテンプレートsingle.phpが実行されます。ただし、WordPressテーマによっては実行されるファイル名が異なります。
category.php はカテゴリページが表示されるファイルですが、WordPressテーマによってはファイルが存在しません。

プログラム 用途
index.php トップページ用
home.php フロントページ用(無い場合も多い)
page.php 固定ページ用
single.php 投稿ページ用
archive.php 投稿のアーカイブ一覧ページ用
アーカイブの一覧については、下記のように細分化されている場合もある
category.php カテゴリ別一覧
tag.php タグ別一覧
date.php 日付別一覧
author.php 投稿者別一覧 など
search.php サイト内検索の一覧ページ
404.php 該当のURLが存在しなかったときに表示するページ
404エラー、Page Not Found用

single.php

get_header() ヘッダーの表示
get_template_part(‘content’); 投稿した本文の表示
get_sidebar() サイドバーの表示
comments_template(”, true); コメントの表示
get_footer() フッターの表示

プラグインが動作する仕組み

ページを表示する際に、plugin.phpでプラグイン読込が実行されます。
wp-admin/includes/plugin.php

DBに登録されて有効化されたプラグインが実行されます。

データベースの wp-options テーブルに option_name が active_plugins とされるカラム行を読み、保存されているプラグインの PHPファイル を順に読込ます。
プラグインが実行される順番は、ファイル名のアルファベット順です。

ABSPATHはどこで定義されているのか

ABSPATHが定義されている場所は、wp-config.phpです。wp-config.phpの読込む前にも定義されていますが、最終的にABSPATHで定義されます。

/* 編集が必要なのはここまでです ! WordPress でブログをお楽しみください。 */
/** Absolute path to the WordPress directory. */
if ( !defined('ABSPATH') )
   define('ABSPATH', dirname(__FILE__) . '/');

WP_CONTENT_DIR

WP_CONTENT_DIR はテーマや画像が格納されている”wp/wp-content”のパスが定義されています。
公式ページには移動方法が記載されています。ややこしいですけど。WordPressの構造の理解とPHPの扱いが慣れていれば、WordPressのディレクトリ場所をいじることはできます。

タイトルとURLをコピーしました