Wordpressのウィジェットでphpコードを実行する方法。

2021-08-26

Wordpress_ウィジェットでphpを実行_eyecatch

Wordpressを使っているとサイトの一部分にphpを使いたい場合があります。

そんな時はウィジェットがピッタリなのですが、標準の仕様ではphpのコードがそのまま表示されたり、コメントアウトされてしまったりとphpが使えません。

今回、テキストウィジェットでphpを使えるようにする方法をまとめました。

functions.phpを使う方法です。プラグインはエラーで使えませんでした。

テキストウィジェットでphpを実行する

今回使用するウィジェットパーツは「テキストウィジェット」です。
ウィジェットエリアのどこにでも挿入できるので、ここにphpのコードが記述できるようになると色々便利です。

しかし、そのままだとテキストウィジェットにphpを記述しても実行されません。

Wordpress_ウィジェットでphpを実行_001

コメントアウトされたphpコード

ウィジェットでphpを実行するにはいろいろな方法があります。
この記事で紹介している方法は下記の3つです。

  1. 方法1.functions.phpにコードを追加する。
  2. 方法2.ショートコードを作成して呼び出す。
  3. 方法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を実行_002

ビジュアルではなくテキストの方を使用する

注意点としてはビジュアルではなく、テキストモードで書くこと。
あとWordpress標準のテキストウィジェットしかダメです。
テーマによってカスタムされたウィジェットでは動きません。

Wordpress_ウィジェットでphpを実行_003

echoの内容が出力された

これでテキストウィジェットで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');

今回はこんな感じで作ってみました。
そしてテキストウィジェットに作成したショートコードを書きます。

Wordpress_ウィジェットでphpを実行_004

テキストウィジェットにショートコードを書く

今回はショートコード名をhelloとしたのでそれを角括弧で囲むだけです。
こちらもテキストモードで記述して下さい。

Wordpress_ウィジェットでphpを実行_005

ショートコードが実行された

ウィジェットでショートコードが使えない場合はfunctions.phpに↓を追加します。

//ウィジェットにショートコードを適用 
add_filter('widget_text', 'do_shortcode');

今回はphpのソースコードをfunctions.phpに書きましたが、ショートコードを外部phpに書いてfuncitons.phpで呼び出す方法もあります。
コードだらけで困る!という方は関連記事もご確認ください・w・

補足:カスタムHTMLではphpは使えない

ここで少し補足。
テキストウィジェットと似たウィジェットに「カスタムHTML」があります。
phpもコードなのでこれを使いたくなりますが、カスタムHTMLではダメです。

Wordpress_ウィジェットでphpを実行_006

Special characters must be escaped
特殊文字はエスケープする必要があります

上記のコードはテキストウィジェット専用です。
また、カスタムHTMLではphpのコードを書いた時点でエラーが出て保存できません。

Wordpress_ウィジェットでphpを実行_007

カスタムHTMLではそのままコードが出力される

無理やりエスケープ処理をしてみたところ、phpのコードがそのまま表示されてしまいダメでした。

方法3.プラグインを使用する

ウィジェットにphpを使う方法としてプラグインを使う方法もあります。
有名なのは下記のプラグインかな?

  • PHP Code Widget
  • Code PHP in Widget
  • Code Widget

「Code PHP in Widget」は既に配信終了していましたので、「PHP Code Widget」を使ってみます。

Wordpress_ウィジェットでphpを実行_009

インストールして有効化するとFatal errorが出てしまって使えませんでした。
代わりに「Code Widget」も試してみたのですが、phpのコードがコメントアウトされて表示できませんでした。

筆者の環境ではプラグインを使用する方法はことごとくダメでした…

が、プラグインによっても「eval関数」が使われている可能性があります。
どちらにしてもショートコードを使う方法がオススメです。



まとめ

Wordpressのウィジェットでphpを実行する方法のまとめでした。

セキュリティ、高速化の観点からショートコードを使用する方法がオススメです。

最後にブロックウィジェットの画面からテキストウィジェットってどうやって使うの?と思ったのですが、分かりませんでした…

Wordpress5.8以降でテキストウィジェットが見当たらない!
という方はブロックウィジェットを停止すれば出てくると思います。

-WordPress
-,

site-logo
ありがとうございました!
良かったらシェアしてネ・w・
当サイトはピンバックを受け付けます。
  • この記事を書いた人
ザキ

ザキ

X:@sologaku

プログラミングに興味があり情報系の大学を卒業。

新卒で社会人になるも数年で退職し今はフリーランスとして生きています。

少しでも誰かの役に立てれば...と思い、当サイトでIT関係のハウツーを発信しています。


ソロ学運営者:ザキの自己紹介

© 2020 sologaku