WidgetでPHPを実行させる

WordPressのウィジェットでPHPを実行させたい場合がよくあります。ウィジェットでPHPを実行させるプラグインもありますがプラグインを使わずに行うことが理想ですよね。

ウィジェットでPHPを扱う

ちょとした小ネタです。

ずっと以前はウィジェットでPHPを使えるプラグインを使用していました。
当初はPHPだらけだったウィジェットパーツでしたが、気づけばphpコードは姿を消し、代わりに get_template_part() だらけになりつつありました。つまりウィジェットに直接PHPを書くのではなく、ファイルに書いてそれを読み込ませていたわけです。Widgetの編集画面がすこぶる使いにくいので、なるべく編集画面を避けるようになってきたこと、ファイル化したほうが管理的にも使い回し的にも楽で便利と気づいてきたからです。

それで「ただphpファイルを読み込むだけならプラグインでphpの使用許可を与えなくても、ショートコードで読み込めば良いだけでは」と気づいて、その方向にシフトしました。

使用したいPHPをファイルとして作る

使用したいphpをウィジェットに直接書かずファイルに作ります。良くあるのは「新着5件を表示」みたいなサブループ的なものとか「ログイン時のみ何かを表示・非表示」とかでしょうか。
何しろ使用したいPHPを、単機能PHPファイルとして個別に作成します。

PHPファイルを読み込むショートコード

PHPファイルを読み込む関数を作って function.php に書きます。

function my_file_Include($params = array()) {
   extract(shortcode_atts(array(
   	'file' => 'default'
   	), $params));
   ob_start();
   include(STYLESHEETPATH . "/$file.php");
   return ob_get_clean();
  }
add_shortcode('php', 'my_file_Include');

ファイルをインクルードするだけの関数です。この例ではショートコードを「php」、パスの指定を「file」、最初の「/」と拡張子phpを自動入力、デフォルトパスを子テーマトップとしています。ですのでショートコードはこの形になります。

[php file = ""]

使用するときは file=”” にファイル名(パス)を書きます。例えば custom フォルダの postsort.phpを読むならこう書きます。

[php file = "custom/postsort"]

もし「必ずcustomフォルダのファイルを読み込むのだ」と決まっているならもともとの関数にディレクトリまで書いてしまえばいいですね。

include(STYLESHEETPATH . "/custom/$file.php");

というふうに、ウィジェットでPHPを扱いたいときはファイルを作成して読み込むだけというシンプルな運用に変更、そのためだけにプラグインをインストールする必要もなくなりました。