WordPress の PHP をちょっと見てみよう Ⅰ

公開日: : PHP, WordPress

WordPress PHP

WordPress には、たくさんのファイルが入っています。

ここではテーマ内ではなく、トップの index.php から、関数や抑えておきたいポイント、気になるところなどをピックアップしたりして、ちょっとだけ見て行こうと思います。

<今回のピックアップ項目>

(テーマのカスタマイズのことが知りたい場合は、とても分かりやすい、良いサイトが結構ありますので、検索してそちらへ。)

ここでは、テーマのことはまあまあ分かった上、なお、他の PHP が見てみたい人向けな感じになります。

WordPress PHP を見ていく

まずは、index.php を開いてみると、以下の2行が書いてあります。

define('WP_USE_THEMES', true);
require( dirname( __FILE__ ) . '/wp-blog-header.php' );

define()は定数設定で、以降PHP内で、WP_USE_THEMES っていう文字が出てきたら、値はtrueだよ、という意味。2行目はカレントディレクトリー内 wp-blog-header.php を読み込むです。

define(‘定数名’,値)

定数を定義するためのPHP関数。

require(‘ファイル名’)

ファイルを読み込むPHP関数。

dirname(‘ファイル名’)

パス中のディレクトリを取得するPHP関数。

__FILE__

現在参照中のファイルのフルパスとファイル名を表すPHPの定数。

WordPress PHP の開発・デバッグ

ちょっとここで、index.php に以下を書いて、dirname( __FILE__ ) の中身を見てみようと思います。

echo dirname( __FILE__ );exit;

結果はワードプレスをインストールしたカレントディレクトリーになっていると思います。

PHP の開発・デバッグするときには、echo print print_r などで内容を表示して、(次にexit;で終了したりして)みることをします。

WordPress メンテナンス中の例

余談ですが、ブログを急停止やメンテナンスしたいは、index.php のはじめに以下のコードを書きます。

<?php 
header("Content-type: text/html; charset=utf-8");
if( $_SERVER['REMOTE_ADDR'] != '自分のIPアドレス' ){
        echo 'ただいまメンテナンス中です。';exit;
}
?>

自分以外はメッセージを表示して終了します。

WordPress デバッグモード

また、WordPress にはデバッグモードがあります。
wp-config.php の84行目あたり

define('WP_DEBUG', false);

ここをtrueにすると、エラーの場合に真っ白じゃなく、エラー内容を表示してくれますので、開発中やデバッグ中にはここを有効にするといいと思います。

自分のデザインでWordPressを使いたい場合

index.php の1行目の定数 WP_USE_THEMES では、テーマを使うかという設定が出来るようになっています。

define(‘WP_USE_THEMES’, true);

自分のデザインでWordPressを使いたい場合や、他のCMSにWordPressデータを引っ張りたい場合などはここをfalse にします。

自分のデザインのPHPファイルに WordPress の index.php にある2行を入れておけば、WordPressが使えます。

WordPressテーマを使わないで自分のデザインに入れる場合の例

例えば、自分のデザイン index.php の階層以下にWordPressを入れてたとして、
WordPressをテーマを使わないで自分のデザインに入れる場合
index.php を以下のようにすれば、query_posts などをループ処理を表示出来ます。

<?php //index.php の2行をコピペ
define('WP_USE_THEMES', false);
require( dirname( __FILE__ ) . '/wordpress/wp-blog-header.php' );//パスを変更

query_posts( $args );//投稿を呼び出す ?>

<html>
<title>WordPressをテーマを使わないで自分のデザインに入れる場合の例</title>
<body>
<h1>自分のデザイン</h1>
<?php //ループ処理
if (have_posts()){?>
<ul>
<?php while (have_posts()) : the_post(); ?>
<li><time datetime="<?php the_time("Y-m-j") ?>"><?php the_time("Y/m/j") ?></time> <a href="<?php the_permalink();?>"><?php the_title(); ?></a></li>
<?php endwhile; ?>
</ul>
<?php }
else{ ?><ul><li>表示する記事はありませんでした。</li></ul>
<?php } ?>

</body>
<html>

表示はこんな感じで、投稿内容を表示出来ました。
kaisou2

WordPress 最初にアクセスしてるファイルの順番

そんな感じでPHPをたどっていくと、このようになっています。
—————————————————————————-
index.php → 1番目に読み込まれているファイル
wp-blog-header.php →2番目
wp-load.php →3番目
wp-config.php →4番目
wp-settings.php →5番目(ここからたくさんファイルが読み込まれている)
—————————————————————————-

順番に、2番目のファイル wp-blog-header.phpを開いてみます。

if ( !isset($wp_did_header) ) {
	$wp_did_header = true;
	require_once( dirname(__FILE__) . '/wp-load.php' );
	wp();
	require_once( ABSPATH . WPINC . '/template-loader.php' );
}

isset($変数名)

変数が存在するかどうか。

require_once(‘ファイル名’)

ファイルを一回だけ読み込む。

次の3番目のファイル wp-load.php

define( 'ABSPATH', dirname(__FILE__) . '/' );

error_reporting( E_CORE_ERROR | E_CORE_WARNING | E_COMPILE_ERROR | E_ERROR | E_WARNING | E_PARSE | E_USER_ERROR | E_USER_WARNING | E_RECOVERABLE_ERROR );

if ( file_exists( ABSPATH . 'wp-config.php') ) {
	require_once( ABSPATH . 'wp-config.php' );
・・・・

エラー出力の設定をして、wp-config.php ファイルを読み込んでいます。

file_exists(‘ファイル名’)

ファイルがあるかどうか。

wp-config.php ファイルは一番大事なものなので、あるないで分岐して、なかったら、wp-config.php を作るかどうかのメッセージを出しているみたいです。通常はあるはずので、ifの最初を通って次に行きます。

4番目 wp-config.php は基本的な設定ファイルで、ほぼ定数を設定して、最後で wp-settings.php を呼び出してます。

5番目 wp-settings.php を開きます。
最初に読み込んでいる
wp-includes/load.php (関数設定)
wp-includes/default-constants.php(関数設定)
wp-includes/version.php (変数設定)

は、関数・変数の定義で実行順番としては後なので飛ばして、 wp-settings.php で最初に実行してる関数に行きます。

wp_initial_constants();

wp-includes/default-constants.php の中で定義されています。

function wp_initial_constants() {
	global $blog_id;
	if ( !defined('WP_MEMORY_LIMIT') ) {
		if( is_multisite() ) {
			define('WP_MEMORY_LIMIT', '64M');
		} else {
			define('WP_MEMORY_LIMIT', '40M');
		}
	}
	if ( ! defined( 'WP_MAX_MEMORY_LIMIT' ) ) {
		define( 'WP_MAX_MEMORY_LIMIT', '256M' );
	}
・・・・

マルチサイトかどうかで、php.ini(PHPの設置ファイル)の値をセットしなおしています。

is_multisite()

マルチサイトか?というWP関数です。wp-includes/load.php で定義されています。

ini_get()

php.ini の値をゲットする。

ini_set()

php.ini の値をセットする。

WordPress のマルチサイト機能

WordPress3.0 から、複数のブログを設置したい時や、サブドメインと併用で使ったりすることが出来ます。
有効にするには、wp-config.php に以下を加えたり、.htaccess を変更したりと少し大変そうです。

define( 'WP_ALLOW_MULTISITE', true );

設置したい場合はこちらの記事が分かりやすいと思いました。
<参考サイト>
WordPress マルチサイト機能を使ったんで、手順・やったことをまとめて綴ります

WordPress でメモリーエラーが出る場合

WordPress マルチサイトを設置をしてない時に、”Allowed memory size of ・・・” などのメモリ系のエラーが出たり、表示が遅すぎてエラーになったりした時にはここの数字を上げた方がいいと思います。

この関数が読み込まれる前、すなわち、wp-config.php の require_once(ABSPATH . ‘wp-settings.php’); の前に加える。

define('WP_MEMORY_LIMIT', '96M');

ついでに以下も加えておくと、管理画面での WP_MEMORY_LIMIT の値を増減させることが出来る。

define('WP_MAX_MEMORY_LIMIT', '256M');

phpinfo.php を作っておこう

PHPを開発・デバッグするときには、PHP の設定ファイル php.ini がどうなっているかを確認することをよくします。
phpinfo.php というファイルに1行を書くだけで、アクセスすると、PHPの設定がどうなっているか見れます。

<?php phpinfo();?>

見た後は、サーバからは削除して、ローカルに持っておくと便利です。

phpinfo

wp-settings.php に戻ります、次は、

wp_check_php_mysql_versions();

wp-includes/load.php の中で定義されています。名前の通りPHPとMySQL のバージョンをチェックしています。
バージョンはさっき抜かした wp-includes/version.php に変数で設定してあり、もし違ったら、dieメッセージを出して終了になります。

@ini_set( ‘magic_quotes_runtime’, 0 );
@ini_set( ‘magic_quotes_sybase’, 0 );

magic_quotes

php.ini の設定です。(いろんな思い出がよみがえる響きです・・)
(’) (”) (\)( )とかの文字がDBに保存される時に、バックスラッシュで自動的にエスケープされるMySQLの(有難迷惑)機能です。
PHP5.3~非推奨になっていますので、ここでも無効に設置しています。

date_default_timezone_set( ‘UTC’ );

WordPressでは、日付/時刻関数で使用されるタイムゾーンがUTC(世界時間)になっています。
date()関数を使うと、日本では9時間前になります。

その代わりに、WordPessには、ローカル時間を扱うdate_i18n()やcurrent_time()関数を用意しています。

ローカル時間を表示する場合 例

echo date_i18n("Y-m-d H:i:s");

ローカル時間のタイムスタンプを取得する場合 例

ecurrent_time("timestamp");
date_i18n("U");
wp_unregister_GLOBALS();

wp-includes/load.php の中で定義されています。
php.iniのregister_globals の設定が有効になっていた時のための関数です。

register_globals

PHP 5.3~非推奨となり、 PHP 5.4~で削除されているので、無効になっていることが多いと思うので、returnします。
ざっくり言うと、もし有効になっていたら、POSTやGETで送られてきた$GLOBALS 変数の値を勝手に変数化してしまうのがちょっと危険なので、unset()関数を使ってクリアにしている感じです。

wp_fix_server_vars();

$_SERVER(サーバに関する環境変数が入っているPHPグローバル変数)の値を見て、WindowsサーバのIISや、PHPがCGI版を使っている時の $_SERVER の値誤差をいろいろ調整しています。

php_sapi_name()

PHP が使用しているインターフェイスの型を返すPHP関数。

PHPのCGI版とモジュール版

レンタルサーバのプランなどで、CGI版とモジュール版という2種類を見かけると思います。これは、PHPのインターフェイス(動く仕組み)の違いです。
モジュール版のが速いのですが、レンタルサーバーの多くはCGI版を使っています。
CGI版でも速く動くようにFastCGIというものもあります。

  • さくらサーバは、最上位のビジネスプロプランに限り、モジュール版への切り替えが可能になっています。
  • エックスサーバーや、このサイトで使っているロリポップでは、CGI版の(FastCGI)というものを使っています。

ソースに戻ります。

if ( empty( $_SERVER['REQUEST_URI'] ) || ( php_sapi_name() != 'cgi-fcgi' && preg_match( '/^Microsoft-IIS\//', $_SERVER['SERVER_SOFTWARE'] ) ) ) {
・・・・

レンタルサーバの場合はIISサーバはほとんどなく、Apache が多いので、$_SERVER[‘SERVER_SOFTWARE’]はApacheとなります。
php_sapi_name()は、CGI版の場合は cgi ですが、FastCGI を使っている場合は、cgi-fcgi となります。

なので、この1つ目のif文はIISサーバで、かつFastCGIを使ってない場合ってことになり、その場合に、$_SERVER[‘REQUEST_URI’]、$_SERVER[‘PATH_INFO’]を変更しています。

以降のif文では、CGI版でPHPが動作している場合、さらに海外サーバのDreamhost での場合などに、$_SERVER[‘SCRIPT_FILENAME’]、$_SERVER[‘PATH_INFO’] 、$_SERVER[‘PHP_SELF’]を調整しています。

$_SERVER[‘REQUEST_URI’]

ページにアクセスするために指定されたURI。

$_SERVER[‘PATH_INFO’]

実際のスクリプトファイル名とクエリ文字列の間にある、クライアントが提供するパス名情報。

$_SERVER[‘SCRIPT_FILENAME’]

現在実行されているスクリプトの絶対パス。

$_SERVER[‘PHP_SELF’]

現在実行しているスクリプトのファイル名。

wp_favicon_request();

wp-includes/load.php の中で定義されています。
ファビコンへのアクセスがあったら、ファビコンのヘッダーを出力して、これ以降のPHPへの処理は終了させています。(ちょっと何故かは分かりません。)

wp_maintenance();

wp-includes/load.php の中で定義されています。
管理パネルからアップグレードやプラグインの修正を行っているときにメンテナンスモードに切り替わります。
その間は自動で .maintenance が作られ、ファイルがあったらメンテナンス中のメッセージを出しています。

is_rtl()

wp-includes/locale.php で定義されています。
現在のロケールが右書きか調べる関数。

ということですが、ここまでにwp-includes/locale.php はまだ読み込まれてないような気がするので、メンテナンス時に別のルートから実行されるのでしょうか。(ちょっと分からないので保留します。)

timer_start();

wp-includes/load.php の中で定義されています。
ページリクエスト時からの経過時間を取得しています。
timer_stop()関数もあり、timer_start()からの経過時間を取得出来る。

wp_debug_mode();

wp-includes/load.php の中で定義されています。
デバッグモードが有効の場合、php.ini のdisplay_errors、log_errorsを有効にして、エラーを表示するように設定しています。

次は、

if ( WP_CACHE ) WP_DEBUG ? include( WP_CONTENT_DIR . '/advanced-cache.php' ) : @include( WP_CONTENT_DIR . '/advanced-cache.php' );

WordPressのプラグイン「WP Super Cache」を使っている時のファイル読み込みです。
「WP Super Cache」をインストールすると、advanced-cache.phpとadvanced-cache.php というファイルが作られます。

ブログの表示速度をあげるプラグイン「WP Super Cache」

「WP Super Cache」とは、WordPressのデータベースを静的なページにしてブログの表示速度をあげるプラグインです。
(個人的には、次記事の「WordPress が重い人におすすめ Tribe Object Cache プラグインを入れる」のがおすすめ。)

私は入れたことがないので、インストールは以下のサイトなどを参考にしてみてください。
<参考サイト>
WP Super Cacheを使用してみる

最後に

と言うわけで、index.php から順に読んできましたが、(だんだん駆け足になりました)まだ5ファイル目( wp-settings.php )の途中ですが、長くなってきたのでこのへんで次回にまわそうと思います。

ここの説明には、独自の解釈なども入っているので、間違えなどあるかもしれません。
変なところなど何かありましたら、ご指摘いただけると嬉しいです。

関連記事

WordPress エラー:Failed to load plugin: table from url https://cdn.tinymce.com/4/plugins/table/plugin.min.js

WordPress エラー:Failed to load plugin: table from url https://cdn.tinymce.com/4/plugins/table/plugin.min.js

WordPress エラーの状態 WordPress 管理画面のテキスト入力欄で(ビジュアルタブの

記事を読む

WordPress カレンダー カスタマイズ

WordPress カレンダー カスタマイズ

WordPressでカレンダーの表示部分をいじってみようかと思います。 どうやら、カレンダー関

記事を読む

wordpress タイトルの変更

WordPress タイトルの変更

テンプレートタグ the_title(); get_the_title(); WordPress

記事を読む

WordPress レスポンシブ テンプレート 元にサイトを作ってみる その2

DEMO を見る カスタム投稿タイプ functions.php 今回は3つのリストメニュ

記事を読む

wordpress カスタム投稿で 2ページ目以降が404

wordpress カスタム投稿で 2ページ目以降が404になってしまう

wordpress のカスタム投稿で、ニュースのページを作っていました。 ニュース一覧で、ペー

記事を読む

Wordpress VR Test

WordPress で VR させて、360°のパノラマ画像を表示する

WordPress.com内ショートコードで VR させる WordPress.com内で、VR(

記事を読む

WordPress プラグイン「 Search Everything 」

WordPressでカテゴリー名も検索にひっかけるプラグイン「Search Everything」

WordPressでカテゴリーも検索にひっかけるプラグイン「Search Everything 8.

記事を読む

Wordpress 自作フォーム 2(注意点とエラー:This is somewhat embarrassing, isn’t it? など)

WordPress 自作フォーム その2(注意点とエラー:This is somewhat embarrassing, isn’t it? など)

前回(WordPress 自作フォーム 1)のつづきです。 今回は細かいところや注意点とエラーなど

記事を読む

リビジョンを削除し、テーブルを最適化してDBの容量を削減

WordPress リビジョンを削除し、テーブルを最適化してDBの容量を削減

WordPress リビジョン機能 リビジョンは過去の記事を保存してくれる WordPress の

記事を読む

ロリポップでWordPressのPHPバージョンを5から7にする

ロリポップでWordPressのPHPバージョン7.1に変更後「サイトに技術的な問題が発生しています。」

WordPress.org の推奨環境 PHP7以上 MySQL5.6以上またはMaria

記事を読む

PHP WordPress

Message

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

WordPress エラー:Failed to load plugin: table from url https://cdn.tinymce.com/4/plugins/table/plugin.min.js
WordPress エラー:Failed to load plugin: table from url https://cdn.tinymce.com/4/plugins/table/plugin.min.js

WordPress エラーの状態 WordPress 管理画面のテキ

wordpress タイトルの変更
WordPress タイトルの変更

テンプレートタグ the_title(); get_the_title

All-in-One WP Migration で サーバ移動
「All-in-One WP Migration」プラグインで 簡単に WordPress のサーバー移行する手順メモ

1.移行元サイトでのデータエクスポート 「All-in-One WP

DNSサーバーとは
ドメインとは?DNSサーバーとは?

ドメインとは? ドメインとは? ドメインとは、インターネット上のネ

javascriptで複数同じ名前のformの値を取得する
javascriptで複数同じ名前のformの値を取得するとエラー Cannot read property ‘value’ of undefined

Javascript で value の値を取得する このようなHT

→もっと見る

    • 202404
      Mon Tue Wed Thu Fri Sat Sun
      1234567
      891011121314
      15161718192021
      22232425262728
      2930
    にほんブログ村 IT技術ブログへ にほんブログ村 IT技術ブログ PHPへ にほんブログ村 IT技術ブログ WordPressへ
    にほんブログ村 FC2 Blog Ranking
    PAGE TOP ↑