Google先生に尋ねてみました。
WordPressの投稿画面やウィジェットに配したテキスト内でPHPコードを使うにはどうしたら良いのでしょうか、と。
先生は例のごとく、多数の選択肢を提示してくれました。
その中から僕が選んだものは、ショートコードプラグインでした。
ショートコードプラグインとは
ざっくりいうと、PHPのショートコードをプラグインにまとめたものです。
僕が参考にしたのはこちらのサイト。
Exec-PHP愛好家向けショートコードプラグインの作り方 | firegoby
こちらのサイトでは、サンプルからその使い方まで詳しく説明されています。
こちらのサイトの指示に従って作業を進めていけばショートコードプラグインを簡単に実装することができますよ。
ショートコードプラグインを使うと以下のことができるようになります。
- 投稿画面で記述したPHPコードを実行
- ウィジェットに配置したテキストに記述したPHPコードを実行
しかし、PHPのコードを記事本文やウィジェットで使うためには、ショートコードをまとめたプラグインにしてWordPressに登録する必要が有ることは知りませんでした。
試しにプラグインにしないでショートコードだけを記述してみましたが、そのまま表示された時はショックを受けたものです。
Exec-PHPという選択肢もありましたが…
ショートコードプラグインのことを知る前、Exec-PHPというプラグインを試してみました。
その機能はショートコードプラグインと同じなので、当初はPHP素人らしくプラグインに頼ろうと思ったのです。
しかし、Exec-PHPは何やらリスクが有るらしいことが情報として入って来ました。
そのリスクに関しても先ほどの記事では言及されていますので、是非ご覧下さい。
ちなみに、そこにはいくつかExec-PHPが危険な理由が記されていましたが、僕が特に納得したのは以下の理由。
このプラグインは2009年から4年以上メンテされてないんです。
これはたぶんWordPressにショートコードが実装されちゃったから作者さん本人がショートコードを使うようになっちゃったからだと思うんですよね。笑
これを読んで
「自分で使わなくなったものには手をかけない。自分に置き換えてもそうするよな。」
と納得。
もちろん、eval()というPHPでも非推奨の関数を使っている点もリスキーな理由ですよ。
ウィジェット内で使うには一手間必要
先ほどの参考記事に従ってショートコードプラグインを導入すると、そのプラグインに記述したショートコードをWordPressの記事投稿画面で使えるようになります。
確かにこれはありがたい機能です、
しかし、僕がやりたかったことは「ウィジェットとして配置したテキスト内でPHPのコードを実行すること」です。
これはショートコードプラグインを導入しただけではできません。
実はもう一手間必要なのです。
それは、functions.phpに次の1行を追記することです。
add_filter('widget_text', 'do_shortcode');これを使用中のテーマにあるfunctions.phpに追記して下さい。
これだけでウィジェットとして配置したテキスト内でPHPのコードが使えるようになります。
なお、この情報は以下の記事を参考にさせて頂きました。
ウィジェットに入力したショートコードが機能しないとき
add_filter(‘widget_text’, ‘do_shortcode’); …
ありがとうございます。
ショートコードプラグインには複数のショートコードを記述可能
ちょっと気になったことがありました。
それは、ショートコードプラグインに複数のショートコードを記述できるのか。
答えは「可能」でした。
例えば、以下の様なコードを書いたとします。
<?php /* Plugin Name: My Shortcode */ add_shortcode('my-shortcode1', 'my-shortcode-func1'); function my-shortcode-func1() { return '<p>test1</p>'; } add_shortcode('my-shortcode2', 'my-shortcode-func2'); function my-shortcode-func2() { return '<p>test2</p>'; } add_shortcode('my-shortcode3', 'my-shortcode-func3'); function my-shortcode-func3() { return '<p>test3</p>'; } ?>これらのショートコードは全て正常に動作しました。
1つのプラグインに対して1つのショートコードしか登録できないのかも?
なんて考えてしまいましたが、そんなことはありませんでした。
まとめ
WordPressの投稿画面、ウィジェットに配したテキスト内に記述したPHPコードを実行するには
- ショートコードプラグインを使う
- プラグインExec-PHPはセキュリティ面でリスクがあるので使わない
add_filter('widget_text', 'do_shortcode');現在、Exec-PHPを使っている方はもちろん、投稿画面やウィジェット内のテキストに記述したPHPコードを有効にしたい方は、是非、お試し下さい。
それでは。
コメント