wordpressの仕組みを生かせないものか
wordpressはCMSとしての歴史が長く、便利な仕組み、関数を数多く備えているます。
簡単なCMSでも自作すると大変なので、オープンソースのwordpressはとてもありがたいアプリケーションと言えます。
そんな便利なwordpress関数を、外部から使うことはできないでしょうか?
wordpressの関数を外部から使う
できる!!
結論から言うとwordpress関数を外部から使うことは可能なんです。
たとえばajaxを独自経路で構築する場合、そのphpはwordpressにはマネージメントされないものなので、wordpress関数は使えません。
しかしあるファイルをrequireすると関数定義やクラス、各種設定が芋ずる的に読み込まれるので、関数やオブジェクトが使えるようになります。
これは便利この上ないですよ。
wordpressのファイル構造
wordpressは多段的にファイルを読み込むように設計されています。
まずindex.phpが起点となる。このindex.phpはテーマのindexではなく、publicスペースに置いてあるindexです。
index.phpには幾つかのコメントと、wp-blog-header.phpを読み込む為のrequireが一行書かれているだけです。
wp-blog-header.phpも簡素で、wp-load.phpとtemplate-loader.phpを読み込むためのrequireが書かれています。
ここで重要なのはwp-load.phpだ。wp-load.php以降では各関数の定義ファイルやクラスファイルを読み込んでいくことになります。
wp-load.phpではwp-config.php、functions.php、version.php、load.phpなどを読み込みます。
wp-config.phpはデータベース情報が記載されている重要なファイルで、これを元にwordpressはデータベースに接続しています。 このファイルではさらにwp-settings.phpを読み込んでいます。
このwp-settings.php以降で各種初期設定や、各種ファイルの読み込みがさらになされることになります。
最終的にはtemplate-loader.phpからクエリに従ってテンプレートファイルが読み込まれページが表示されることになるんです。
ファイル読み込みの図
すべてを網羅している訳ではないですが、ファイルが読み込まれていく順番を図にしてみました。
ほとんどの関数定義やクラス定義、または初期化設定(クラスのインスタンス化や各種定数の設定など)はwp_load.php以降で行われているようです。
つまり最低限wp-load.phpを読み込むことで、wordpress関数を外部から使うことが出来るようになるんですね。
wp-load.phpを読み込む
実際に読み込むのは簡単で単にrequireをしてあげればよいデス。ただ特に理由がないのならrequire_onceを使うことをお勧めします。
require_once( dirname( __FILE__ ) . '/wp-load.php' );
__FILE__はphpのマジック定数で、ファイル名が設定されるので、これを用いてディレクトリを得るdirnameメソッドでディレクトリの絶対パスを得て、目的のファイル名にスラッシュを付けて、つなげます。これでフルパスになりますので、めでたくrequireできる訳です。
requireする側のファイルと目的のファイルの階層が異なる場合は以下の様に階層を飛び越えるように記述します。
require_once( dirname(dirname( __FILE__ )) . '/wp-load.php' );
wp-load.phpに限って言えば、パブリックスペース直下に存在するファイルなので、wp-load.phpがrequireする側のファイルより階層が深いということは起こりえないです。
逆にrequireする側のファイルがテーマフォルダなどにおかれている場合は、dirnameを何個も重複させなくてはいけないですが、落ち着いて階層数を数えて必要なだけ使ってやればよいですね。
まとめ
一つのファイルを読み込むだけで、いろんな関数を使えるようになるのはとても便利。もちろん外部からだと、活用できる関数も限られてしまうかもしれないですが、さまざまなアイデアが思いつきますね。
この仕組みのおかげでwordpressが組み込んでいない経路でのajaxが本当に快適に出来きます。ありがたいことです。
皆さんも、何かの機会にこの仕組みを活用してみてはどうでしょうか。