ショートコードプラグインを使えば、投稿画面やウィジェットでPHPが動きましたよ。

ブログ

Google先生に尋ねてみました。
WordPressの投稿画面やウィジェットに配したテキスト内でPHPコードを使うにはどうしたら良いのでしょうか、と。
先生は例のごとく、多数の選択肢を提示してくれました。
その中から僕が選んだものは、ショートコードプラグインでした。

スポンサーリンク

ショートコードプラグインとは

ざっくりいうと、PHPのショートコードをプラグインにまとめたものです。
僕が参考にしたのはこちらのサイト。

Exec-PHP愛好家向けショートコードプラグインの作り方 | firegoby


こちらのサイトでは、サンプルからその使い方まで詳しく説明されています。
こちらのサイトの指示に従って作業を進めていけばショートコードプラグインを簡単に実装することができますよ。

ショートコードプラグインを使うと以下のことができるようになります。

  • 投稿画面で記述したPHPコードを実行
  • ウィジェットに配置したテキストに記述したPHPコードを実行
ショートコードについてはWordPressのテーマを変更した際に使ったことがあったので知っていました。
しかし、PHPのコードを記事本文やウィジェットで使うためには、ショートコードをまとめたプラグインにしてWordPressに登録する必要が有ることは知りませんでした。
試しにプラグインにしないでショートコードだけを記述してみましたが、そのまま表示された時はショックを受けたものです。

Exec-PHPという選択肢もありましたが…

ショートコードプラグインのことを知る前、Exec-PHPというプラグインを試してみました。
その機能はショートコードプラグインと同じなので、当初はPHP素人らしくプラグインに頼ろうと思ったのです。
しかし、Exec-PHPは何やらリスクが有るらしいことが情報として入って来ました。
そのリスクに関しても先ほどの記事では言及されていますので、是非ご覧下さい。

ちなみに、そこにはいくつかExec-PHPが危険な理由が記されていましたが、僕が特に納得したのは以下の理由。

このプラグインは2009年から4年以上メンテされてないんです。

これはたぶんWordPressにショートコードが実装されちゃったから作者さん本人がショートコードを使うようになっちゃったからだと思うんですよね。笑

引用元:Exec-PHP愛好家向けショートコードプラグインの作り方 | firegoby

これを読んで
「自分で使わなくなったものには手をかけない。自分に置き換えてもそうするよな。」
と納得。
もちろん、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はセキュリティ面でリスクがあるので使わない
なお、ウィジェットに配したテキスト内でPHPコードを実行させるには以下のコードをfunctions.phpに追記する必要があります。
add_filter('widget_text', 'do_shortcode');
現在、Exec-PHPを使っている方はもちろん、投稿画面やウィジェット内のテキストに記述したPHPコードを有効にしたい方は、是非、お試し下さい。
それでは。

コメント

タイトルとURLをコピーしました