• このエントリーをはてなブックマークに追加

ショートコードを使って投稿本文内でPHPを使う!

WordPressのテンプレートタグを、投稿や固定ページの本文内でも使いたい時があります。
私の場合はテンプレートタグ get_bloginfo() でした。公開ディレクトリを変更したりする場合に、本文内の内部リンクに get_bloginfo() が使えれば、いちいち書き直さなくて済むからです。

最初はプラグインExec-PHPを使おうと考えたのですが、これが結構セキュリティ的に危険だという記事を拝見して思いとどまりました。
Exec-PHPはインストールするだけで、エディタ内でPHPが使えるようになる非常に便利で危険な代物です。

まず、php.netには、Exec-phpで使用されているeval()という関数が非常に危険だと書かれています。

社内SEのWordPress、PHP、jQuery、Excel、VBAなどの備忘録
/wp-shortcode/phpeval/" data-orig-file="https://i0.wp.com/se.ekaki-j.com/wp/wp-content/uploads/2014/05/phpeval.png?fit=600%2C440" data-orig-size="600,440" data-comments-opened="1" data-image-meta="{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}" data-image-title="eval関数について" data-image-description="" data-medium-file="https://i0.wp.com/se.ekaki-j.com/wp/wp-content/uploads/2014/05/phpeval.png?fit=300%2C220" data-large-file="https://i0.wp.com/se.ekaki-j.com/wp/wp-content/uploads/2014/05/phpeval.png?fit=600%2C440" src="https://i0.wp.com/se.ekaki-j.com/wp/wp-content/uploads/2014/05/phpeval.png?resize=600%2C440" alt="eval関数について" class="aligncenter size-full wp-image-8097" srcset="https://i0.wp.com/se.ekaki-j.com/wp/wp-content/uploads/2014/05/phpeval.png?w=600 600w, https://i0.wp.com/se.ekaki-j.com/wp/wp-content/uploads/2014/05/phpeval.png?resize=300%2C220 300w, https://i0.wp.com/se.ekaki-j.com/wp/wp-content/uploads/2014/05/phpeval.png?resize=320%2C235 320w" sizes="(max-width: 600px) 100vw, 600px" data-recalc-dims="1" />

また、このプラグインは、2009年以降、更新されていないというのもちょっと…です。

Exec-PHP

ある程度の知識のある個人で使用するサイトならそう心配することもないかもしれませんが、クライアントに渡すものであったりとか会員サイトなどですと、投稿本文で自由にPHPを使えるということは、セキュリティホールを作ることにもなりかねないので、ちょっと怖いですね。
それに、プラグインを使わなくても簡単に出来ることは、使わずに実現したほうがスマートだと思うので、ショートコードを使ってエディタ内でPHPを使えるようにしました。これなら安全です!

まずはfunctions.phpに以下のコードを記入。ショートコード化する内容がテンプレートタグの場合。私の場合は get_bloginfo() が使いたかったので…。

function home_func() {
    return get_bloginfo('url');
}
add_shortcode('home', 'home_func');

ちなみにテンプレートタグじゃない場合こんな感じ。

function test_func() {
    return 'ショートコードテスト';
}
add_shortcode('test', 'test_func');

そして投稿本文内にショートコードを記入。

[home]
[test]

結果はこんな感じになります。

http://se.ekaki-j.com
ショートコードテスト

簡単すぎますね!よく使うものはショートコード化しておくと便利ですね。

スポンサーリンク







  • このエントリーをはてなブックマークに追加
スポンサーリンク