WordPress でプラグイン使わずにウィジェットで PHP コード動かす

テキストウィジェットで PHP

WordPress のテキストウィジェットで PHP コードを書けるようにするプラグインとしては、

などがあるが、、、

これらは、セキュリティ上危険なために嫌われている eval() という言語構造が使われている。

そして eval() は、ネイティブな PHP よりも動作が約 20 倍遅いという特徴があるw

ぶっちゃけ、eval() が許容できるのであれば、プラグインなんぞ使わんでも簡単にできる。
が、ここでは、あえてその方法は紹介しない。

なので、eval() もプラグインも使わず、もう少し安全で、なおかつ速度も出るようにウィジェットで PHP コード動かす方法を考えてみた。

やり方

とりあえず、やってみた方法。以下、その手順。

動かしたい PHP を書いたファイルを用意しておく

まず、ウィジェット内に書きたい内容の PHP ファイルをテーマディレクトリ(functions.php と同じ場所)に用意しておく。

ここでは、仮に ahoaho.php というファイルを用意して、中身は ↓ こんな感じにしておく。

<?php
echo 'あほです (`・ω・´)b';

functions.php

functions.php に以下を追加。
'ahoaho' の部分は、上記ファイル名の .php を除いた名前。

※ PHP 5.3 以上のみで有効な書式で書いてます。

add_filter( 'widget_text', function( $ret ) {
	$php_file = 'ahoaho';

	if( strpos( $ret, '[' . $php_file . ']' ) !== false ) {
		add_shortcode( $php_file, function() use ( $php_file ) {
			get_template_part( $php_file );
		});

		ob_start();
		do_shortcode( '[' . $php_file . ']' );
		$ret = ob_get_clean();
	}

	return $ret;
}, 99 );

テキストウィジェット

WordPress のテキストウィジェットに上記のショートコード [ahoaho] を書いて保存する。

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

出来上がり

テキストウィジェットで PHP が動いている様子

以上。

WordPress

Posted by るな