WordPress ショートコードで好きなPHPファイルを挿入できるコードをアレンジ

PHP コード
重要8年以上前に編集した記事です。情報がけっこう古いかも…。

この記事は約 4 分で読めます。

いつだったか、興味本位で、PHPファイルをショートコードで、記事内に挿入して表示させたいと思って、以下の記事のコードを、そのまんまコピペして試したところ、何も表示されませんでした。(コピペ好きなわたしには、よくあることです。)

How to Develop a PHP File Include Plugin for WordPress How to Develop a PHP File Include Plugin for WordPress 

それで、へろへろ調べて、以下のようにコードを修正して、functions.phpに追記したところ、PHPファイルをうまく表示できました。

function fuji_shortcode_gaibufile_purun($params = array()) {
	extract(shortcode_atts(array(
		'file' => 'chiwa'
	), $params));

	ob_start();//バッファリングを開始
	require_once( $_SERVER['DOCUMENT_ROOT'] . '/favo-file/'. esc_attr($file) .'.php' );
	$output_string = ob_get_contents();//バッファの内容を変数($output_string)に代入
	ob_end_clean();//バッファの中身を削除

	return $output_string;
}
//ショートコード登録
add_shortcode('purun_jikkou', 'fuji_shortcode_gaibufile_purun');

上記の例だと、ルート直下にfavo-fileという、ディレクトリを作って、そこに好きなPHPファイルを格納してます。

★この記事は、2016年6月23日 21:46:40 に、五行易ドットJP の 藤山 恭江が書いたものです。
記事の引用は、著作権法に定める範囲内で大歓迎です\(^o^)/
引用する場合、出典元の表示として『 五行易ドットJP:WordPress ショートコードで好きなPHPファイルを挿入できるコードをアレンジ 』←『』内の表示をお願いしますm(_ _)m
読んでいただいてうれしいです。ありがとうございます(≧▽≦)

require_once( $_SERVER['DOCUMENT_ROOT'] . '/favo-file/'. esc_attr($file) .'.php' );

ファイルの名前まで、esc_attr($file)で、無害化(サニタイズ)しなくても、いいのかも、、、なんですが、念のためやっておりますです。

それと、わたしはできるだけ、WordPress のファイルのある場所を隠したい、という方針なので、WordPress が設置されている場所とは、ぜんぜん違う別の場所に、PHPファイルを格納するディレクトリを置いてるので、こんなパスになってます。

ちなみに、コデックスを見ると、このような隠ぺいによるセキュリティというのは、なんだか微妙…みたいですね。

隠蔽によるセキュリティ 隠蔽によるセキュリティ 

つかいかたは、例えば、挿入したい好きなPHPファイルがkonchiwa.phpの場合、[purun_jikkou file=konchiwa]といったように、ファイル名を指定してショートコードを、書きます。

ということで、require_onceとか、$_SERVER['DOCUMENT_ROOT']なんてのは使わずに、そのかわりに以下の記事のように

get_template_part($file);

これで、挿入したいPHPファイルを、子テーマのディレクトリ内に入れておけますよ。

WordPressで子テーマ使用時にショートコードで記事本文中に任意のテンプレートを読み込む方法(リンク切れ)

挿入したいファイルの拡張子が、.phpじゃなくて、.htmlとかだったら、以下の記事のコードで、バッチリ表示できます。

WordPress任意のファイルを読み込むショートコードの処理 WordPress任意のファイルを読み込むショートコードの処理