Wordpressを使っているとサイトの一部分にphpを使いたい場合があります。
そんな時はウィジェットがピッタリなのですが、標準の仕様ではphpのコードがそのまま表示されたり、コメントアウトされてしまったりとphpが使えません。
今回、テキストウィジェットでphpを使えるようにする方法をまとめました。
functions.phpを使う方法です。プラグインはエラーで使えませんでした。
この記事の目次
テキストウィジェットでphpを実行する
今回使用するウィジェットパーツは「テキストウィジェット」です。
ウィジェットエリアのどこにでも挿入できるので、ここにphpのコードが記述できるようになると色々便利です。
しかし、そのままだとテキストウィジェットにphpを記述しても実行されません。
ウィジェットでphpを実行するにはいろいろな方法があります。
この記事で紹介している方法は下記の3つです。
- 方法1.functions.phpにコードを追加する。
- 方法2.ショートコードを作成して呼び出す。
方法3.プラグインを使用する。
後述しますがプラグインはエラーで使えませんでした。
それぞれ特徴がありますのでご自身に合った方法で実装して下さい。
方法1.funcions.phpにコードを追加する
子テーマなどのfuncitons.phpにコードを追加する方法です。
一番簡単ですが、セキュリティ上推奨されていない危険な関数「eval」を使いますのであまりオススメではないです。
以下のコードをfunciotns.phpに追記します。
function enable_php_code_textwidget ($text) { if (strpos($text, '<' . '?') !== false) { ob_start(); eval('?' . '>' . $text); $text = ob_get_contents(); ob_end_clean(); } return $text; } add_filter('widget_text', 'enable_php_code_textwidget', 100);
テキストウィジェットにある「<?」から「>?」までをeval関数で実行するものです。
続いて「テキストウィジェット」にphpのコードを書きます。
注意点としてはビジュアルではなく、テキストモードで書くこと。
あとWordpress標準のテキストウィジェットしかダメです。
テーマによってカスタムされたウィジェットでは動きません。
これでテキストウィジェットでphpが使えるようになりました。
方法2.ショートコードを呼び出す
続いてphpのコードをショートコード化してウィジェットテキストにてショートコードを使ってphpを実行する方法です。この方法がオススメです。
ショートコードの作成は難しそうですが、functions.phpだけで完結できます。
まずショートコードを作成します。テンプレは以下です。
function test() { ~ここにphpコードを書く~ } add_shortcode('ショートコード名', 'test');
[ショートコード名]を使って呼び出す準備です。
ショートコード名と書かれている部分に任意のショートコード名を書きます。
(testはコールバック関数名なので任意でOKです。)
function hello_shortcode() { //echo 'Hello world!'; //ショートコードはreturnを使う設計らしい。 return 'Hello world!'; } add_shortcode('hello', 'hello_shortcode');
今回はこんな感じで作ってみました。
そしてテキストウィジェットに作成したショートコードを書きます。
今回はショートコード名をhelloとしたのでそれを角括弧で囲むだけです。
こちらもテキストモードで記述して下さい。
ウィジェットでショートコードが使えない場合はfunctions.phpに↓を追加します。
//ウィジェットにショートコードを適用 add_filter('widget_text', 'do_shortcode');
今回はphpのソースコードをfunctions.phpに書きましたが、ショートコードを外部phpに書いてfuncitons.phpで呼び出す方法もあります。
コードだらけで困る!という方は関連記事もご確認ください・w・
補足:カスタムHTMLではphpは使えない
ここで少し補足。
テキストウィジェットと似たウィジェットに「カスタムHTML」があります。
phpもコードなのでこれを使いたくなりますが、カスタムHTMLではダメです。
Special characters must be escaped
特殊文字はエスケープする必要があります
上記のコードはテキストウィジェット専用です。
また、カスタムHTMLではphpのコードを書いた時点でエラーが出て保存できません。
無理やりエスケープ処理をしてみたところ、phpのコードがそのまま表示されてしまいダメでした。
方法3.プラグインを使用する
ウィジェットにphpを使う方法としてプラグインを使う方法もあります。
有名なのは下記のプラグインかな?
- PHP Code Widget
- Code PHP in Widget
- Code Widget
「Code PHP in Widget」は既に配信終了していましたので、「PHP Code Widget」を使ってみます。
インストールして有効化するとFatal errorが出てしまって使えませんでした。
代わりに「Code Widget」も試してみたのですが、phpのコードがコメントアウトされて表示できませんでした。
筆者の環境ではプラグインを使用する方法はことごとくダメでした…
が、プラグインによっても「eval関数」が使われている可能性があります。
どちらにしてもショートコードを使う方法がオススメです。
まとめ
Wordpressのウィジェットでphpを実行する方法のまとめでした。
セキュリティ、高速化の観点からショートコードを使用する方法がオススメです。
最後にブロックウィジェットの画面からテキストウィジェットってどうやって使うの?と思ったのですが、分かりませんでした…
Wordpress5.8以降でテキストウィジェットが見当たらない!
という方はブロックウィジェットを停止すれば出てくると思います。
関連記事
ブロックウィジェットの停止方法です。
WordPress5.8で使いにくくなったウィジェット画面を元に戻す。プラグインかfunctions.phpで対処する。