今回も引き続きWordPressのコアファイルを覗きながら、PHPの世界を覗いていきましょう。
今回見てみるファイルはwp-load.phpです。このファイルはwp-blog-header.phpで読み込まれていました。
軽くググってみるとwp-load.phpはWordPressの関数やら重要なファイルを読み込む部分で、wp-load.phpを読み込むことで外部からWordPressの関数を読み込んだり、何だか色々できそうな予感がしますが……
wp-load.phpはWordPressの関数やらなんやらを読み込む重要なファイルらしいけど。。。?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 | <?php /** * Bootstrap file for setting the ABSPATH constant * and loading the wp-config.php file. The wp-config.php * file will then load the wp-settings.php file, which * will then set up the WordPress environment. * * If the wp-config.php file is not found then an error * will be displayed asking the visitor to set up the * wp-config.php file. * * Will also search for wp-config.php in WordPress' parent * directory to allow the WordPress directory to remain * untouched. * * @package WordPress */ /** Define ABSPATH as this file's directory */ if ( ! defined( 'ABSPATH' ) ) { 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 wp-config.php exists in the WordPress root, or if it exists in the root and wp-settings.php * doesn't, load wp-config.php. The secondary check for wp-settings.php has the added benefit * of avoiding cases where the current directory is a nested installation, e.g. / is WordPress(a) * and /blog/ is WordPress(b). * * If neither set of conditions is true, initiate loading the setup process. */ if ( file_exists( ABSPATH . 'wp-config.php') ) { /** The config file resides in ABSPATH */ require_once( ABSPATH . 'wp-config.php' ); } elseif ( @file_exists( dirname( ABSPATH ) . '/wp-config.php' ) && ! @file_exists( dirname( ABSPATH ) . '/wp-settings.php' ) ) { /** The config file resides one level above ABSPATH but is not part of another install */ require_once( dirname( ABSPATH ) . '/wp-config.php' ); } else { // A config file doesn't exist define( 'WPINC', 'wp-includes' ); require_once( ABSPATH . WPINC . '/load.php' ); // Standardize $_SERVER variables across setups. wp_fix_server_vars(); require_once( ABSPATH . WPINC . '/functions.php' ); $path = wp_guess_url() . '/wp-admin/setup-config.php'; /* * We're going to redirect to setup-config.php. While this shouldn't result * in an infinite loop, that's a silly thing to assume, don't you think? If * we're traveling in circles, our last-ditch effort is "Need more help?" */ if ( false === strpos( $_SERVER['REQUEST_URI'], 'setup-config' ) ) { header( 'Location: ' . $path ); exit; } define( 'WP_CONTENT_DIR', ABSPATH . 'wp-content' ); require_once( ABSPATH . WPINC . '/version.php' ); wp_check_php_mysql_versions(); wp_load_translations_early(); // Die with an error message $die = sprintf( /* translators: %s: wp-config.php */ __( "There doesn't seem to be a %s file. I need this before we can get started." ), '<code>wp-config.php</code>' ) . '</p>'; $die .= '<p>' . sprintf( /* translators: %s: Codex URL */ __( "Need more help? <a href='%s'>We got it</a>." ), __( 'https://codex.wordpress.org/Editing_wp-config.php' ) ) . '</p>'; $die .= '<p>' . sprintf( /* translators: %s: wp-config.php */ __( "You can create a %s file through a web interface, but this doesn't work for all server setups. The safest way is to manually create the file." ), '<code>wp-config.php</code>' ) . '</p>'; $die .= '<p><a href="' . $path . '" class="button button-large">' . __( "Create a Configuration File" ) . '</a>'; wp_die( $die, __( 'WordPress › Error' ) ); } |
- error_reporting(……
これは出力するエラーの種類を設定出来るみたいです。使うタイミングはまだ謎ですが、無視したいエラーとかを除外するみたいな感じかなぁ。
- file_exists(……
file_exists関数は指定したファイルが存在すればtrueを、さもなければfalseを返します。
- @
PHPのアットマーク(@)はエラー制御演算子といって、任意の関数や変数の先頭につけることでその関数や変数についてはエラーを出力しないようにできるみたいです。
- &&
&&は比較演算子のひとつで論理積といい、andと同じ意味「共に真」を表します。がしかし、&&とandでは評価の優先順位が違います。
ここで大切なことはandは代入演算子「=」よりも優先順位が低いってことです。
なので
1 | $val = true and false; |
って書くと
valにtrueが代入されてから、val(中身はtrue) and false という感じで評価されます。
ただ、普通?はtrue and falseが評価されてから、その結果がvalに代入されると思うので、結果的に「何でvalの値がtrueなの?」ってなるんだと思います。
そこで、=よりも優先順位の高い&&を使って
1 | $val = true && false; |
と書くと、valの値はfalseとなります。
だからandはあんまり使わないのかなぁ、と。
ちなみに論理和(or)にも優先順位の高い||っていうのがあるので、そっちを多用することになるのかもしれません。
- ===
これも比較演算子の一つで==と同じ「等価」を表します。ただ、===の場合、単純に値が同じかどうかだけではなく、型も同じかを評価します。なので同じ値だとしても型が異なればfalseになります。==のより厳密なもの、ですね。
- strpos(……
strpos関数は「ある文字列から指定した文字列の位置を検索する」ものです。string positionってことかな。
検索した文字列が見つかればその位置を、見つからなければfalseを返すようです。
書式は
1 | strpos (検索対象の文字列, 検索文字列 [, 検索開始位置]); |
- header
生のHTTPヘッダを送信するそうです。意味不明ですね。
調べておきます!
とりあえずheader関数呼んだら、exitを呼ばないとダメみたいです。
- spinrtf(……
Cにもこんな関数ありましたが、おんなじ感じで、文字列を指定できるみたいです。変換指定子(Cの書式指定子みたいなのとか)も指定できます。
書式は
1 | sprintf (文字列, [,出力するデータがあればここに任意の数だけ指定する]); |
- wp_die(……
この関数を使えば処理を中断して、条件付きエラーメッセージをHTMLで出力できるそうです。詳しくは分かりませんが、エラー画面とかをカスタマイズするときに使えるみたいですね。
3つほどファイルを覗けば少しはPHPに親しめたっぽい?
今日3つ目のファイルを覗いてみましたが、何となくソースコードが何をしているのか何となく分かった気になりました(分かってないです)。……なりませんでした、か?
段々とPHPを使って自分で何かをコーディングしたい気持ちになってくるかもしれません。僕は作りたくってウズウズしてきました。何をつくるかは全く考えていませんが。
何となくコードを読むのに抵抗が無くなってくれば後はこっちのもんです。もうCやVBと同じ感覚で取り組めそうです。
まだコアファイルは見ていきますが、そろそろPHPで簡単なプログラムを調べつつ実装するのが良さそうです。