ディレクトリの中身を理解する
ディレクトリ | 説明 |
---|---|
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.phpwp-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のディレクトリ場所をいじることはできます。