WordPressの記事内でPHPを実行できると、記事に表示できるコンテンツの幅が増えます。
今回はPHPソースコードの実行例を記事内に表示する方法をまとめました。
記事内でPHPが実行できることによるリスク
はじめに今回の方法を取ることによるサイトのリスクをちょっとだけ。
まず、記事内でPHPを実行する方法には3つあります。
- プラグインを使う(Exec-PHP、runPHP)
- functions.phpの修正で記事内でのPHP実行
- functions.phpの修正でショートコードを使う
プラグインを使う方法とfunctions.phpの編集で記事内PHPを使えるようにする方法は、どちらも記事編集画面で直接PHPを入力できるようにする方法です。
ショートコードを使う方法は記事編集画面ではPHPを記述することはできませんが、PHPファイルをサーバーにアップしておいて、記事内でショートコードを利用してアップしたPHPファイルを読み込む方法です。
自分の認識違いでなければ、記事内で直接PHPスクリプトが実行できる状態は、少なからずサイト改ざんなどのサーバー攻撃の危険が増すことになります。
その為、今回採用したのはショートコードを利用する方法です。
記事内で直接PHPを編集・実行できませんが、セキュリティ上はプラグインを利用したり直接実行できるようにするより安全です。
PHPファイル用のフォルダを用意する
ショートコードで呼び出すPHPファイルを保管しておくフォルダを作成しておきます。
基本的にフォルダ名はなんでもいいのですが、ここでは「myphpfiles」としておきます。
FTPソフトを使って、現在使用しているテーマフォルダの直下にフォルダを作成します。
/wp(WordPressインストールフォルダ) ├ /wp-admin ├ /wp-content ├ /languages ├ /plugins ├ /themes ├ /your-theme(使用しているテーマのフォルダ) ├ /myphpfiles ← ここに作成
functions.phpの編集
ショートコードを利用してPHPファイルの読み込みができるように、現在使用しているテーマフォルダ内のfunctions.phpに以下の記述を追加します。
// 記事内にphpファイルをインクルード // ショートコードの書き方 [myphp file='test'] function Include_my_php($params = array()) { extract(shortcode_atts( array('file' => 'default'), $params )); ob_start(); include(get_theme_root() . '/' . get_template() . "/myphpfiles/$file.php"); return ob_get_clean(); } add_shortcode('myphp', 'Include_my_php');
2行目まではコメント行なので、自分でfunctions.phpを見たときに何が書いてあるか分かれば何でもいいです。
子テーマを利用している場合は下記を使って下さい。
// 記事内にphpファイルをインクルード // ショートコードの書き方 [myphp file='test'] function Include_my_php($params = array()) { extract(shortcode_atts( array('file' => 'default'), $params) ); ob_start(); include(get_stylesheet_directory_uri() . "/myphpfiles/$file.php"); return ob_get_clean(); } add_shortcode('myphp', 'Include_my_php');
子テーマの場合は、子テーマのスタイルシートがあるディレクトリを参照するようにしてあります。
これらの記述箇所はわかりやすく問題になりにくい、functions.phpの一番下に記載します。
include(get_theme_root() . '/' . get_template() . "/myphpfiles/$file.php");
これは親テーマのフォルダを指定する記述で
include(get_stylesheet_directory_uri() . "/myphpfiles/$file.php");
これは子テーマのフォルダを指定する記述です。
PHPコードの実行
記事内でPHPコードを実行するには、実行したい内容を記述したPHPファイルを「myphpfiles」へアップロードします。
今回は試しに次のコードをテキストエディタで作成して、「test.php」と言う名前にして保存します。
<?php $test = "テスト"; $doc = <<< EOM これはPHPファイルを実行した $test 結果です。<br> \$test の部分が「テスト」と表示されていれば、 正しく実行されていることになります。 EOM; echo $doc; ?>
保存した「test.php」をFTPソフトで「myphpfiles」へアップロードします。
記事の中でこのPHPファイルを実行するには次のショートコードを記載します。
[myphp file='test']
「myphp」とはfunctions.phpで定義した関数を呼び出すときのコードです。
「file=’test’」はフォルダ内のどのPHPファイルかを指定するコードです。