ワードプレスでサイト作りをしているとき、リスト表示などカスタマイズしたいときにググるとよく出てくる「このPHPコードをコピペして・・・」という紹介記事。
WordPressではセキュリティの観点から(後述します)投稿や固定ページなどの本文、ウィジェットではPHPコードを直接実行できるようになっていません。
そこで登場するのが「EXEC PHP」や「ezPHP」などのプラグイン。これらを使えば簡単に本文内でphpコードを実行できるようになります(専門用語では「phpを評価する」というようです)。
ただ、「EXEC PHP」はPHPのバージョンが7以降のサーバーでは動作しないし、ネット上ではこのプラグインは危険??というものがたくさんあります。
そこで今回は、投稿や固定ページの本文などでphpコードを直接実行するにあたって注意することについて分かる範囲で解説したいと思います。おそらく他のサイトとは大きく認識が違うと思いますので参考程度に読んでください。
「PHPの直接実行は危険」は本当??
WordPressがこれを推奨しない(標準で実行しないようにしている)理由について、いろいろと調べてみました。
すると・・・PHPコードを直接実行することが危険だということでもないような結論に達しました。
懸念されるのは不正にログインされて、不正なPHPコードを記述されてしまうことなんです。
ここで考えるべきはログインしたときの権限。
管理者でログインされてしまえばテーマ内やプラグイン内のPHPプログラムを書き換えたりすることができますから、「サイト全体が危険=投稿や固定ページ本文に限ったことではない」ということになりますね。
そして、投稿者や寄稿者、編集者など記事投稿ができる権限では、その投稿にPHPコードを挿入して実行させることができるようになり、編集者は他人の投稿を編集できるようになりますからリスクが高まります。
つまり、PHPを記述することが危険なのではなく、不正にログインされることが危険ということなんですね。
結論としては不正ログイン対策をすることである程度の危険は回避できるということになります。
不正ログインしようとした形跡は当サイトでも見受けられますし、いろいろな方法で対策をすることはできます
のでいろいろな方法でサイトをガードするようにすることが最善策だと思われます。
PHPコードとショートコードのどちらを使う?
前述したようにPHPが投稿本文で実行できないとプラグインなどで作られたコンテンツを表示したり動作させたりする方法がありませんね。そこで登場するのがショートコード。[]で囲まれたコードを入れることで動作するという機能ですね。
これが何をしているかというと、ショートコードをWordPressが読み込んだときに、ショートコードの元となるプログラムを探しに行き、実行し、表示するという動作をさせているんです。これによって何かのコンテンツを追加表示させるためのプラグインが動作できるんですね。
それからショートコードにはもう1つ利点があって、WordPressではエラーとなったショートコードは動作させずにショートコードをそのまま表示するようになっています。
PHPコードを本文で使えるようにして挿入し、表示してみたらエラーが出たという経験はありませんか?PHPは実行させた段階でエラーが出るとその下のプログラム行は読み込まずに停止してしまう(転んでしまう)という欠点があります。PHPを挿入した過去の投稿が使用できなくなったプログラムコードのせいで停止し、ページが表示されなくなっていることに気づかないなんてこともあります。それを回避できるのがショートコードのいいところです。
エラー時にはショートコードがズバリ表示されてしまいますが、それがショートコードであることはWordPressでサイトを作っている人しか分からないわけですから、ページが途中でエラーコードになってしまうよりはよっぽといいということです。
ではPHPコードをショートコード化して投稿本文などに挿入するには??というところへ行くと思います。それができるようになるプラグインがあるんですね。WordPressはどこまでもすばらしい!!
そのプラグインは
です。これを使うと、あらかじめ設定画面でPHPコードを入力したショートコードを作っておいて、そのショートコードを挿入すればエラー対処ができるというような機能を追加できます。非常に便利です。
ただ、このプラグインを使うと「EXEC PHP」のように投稿本文などに挿入されたPHPコードも実行できてしまうので、都市伝説のように言われているPHPコードを使えるようにするのは危険と考える方は使用を控えたほうがいいかもしれませんね。