WordPressでプラグインを使わずに投稿・固定ページにPHPを読み込む

WordPress
この投稿は最終更新から9年以上経過しているため、内容が古くなっている可能性があります。

PHPをWordPressの投稿内に読み込む

PHPをWordPressの投稿内で使いたい、そう思ったことのある方は多いと思います。
便利なプラグインもあることはあるのですがそのためだけに入れるのもちょっとなあ、と。

とある投稿だけにPHPを読み込みたい、そんな時のための方法です。
プラグインを使わず「functions.php」に記入してショートコードで読み込みます。

同じ方法を紹介しているブログはたくさんありますが一部ハマったので備忘録として残しておきます。

functions.phpへの記入内容

基本的に「functions.php」の<?php ~ ?>内に下記を丸ごとコピペして投稿内でショートコードで読み込むだけの簡単な作業なのですが、この記述で悩みました。

多くのブログでは「functions.php」への記述を下記のように紹介しています。
7行目の「include~」の部分が悩みどころでした。

// PHPの読み込み
function PHP_Include($params = array()) {
	extract(shortcode_atts(array(
	    'file' => 'default'
	), $params));
	ob_start();
    include(get_theme_root() . '/' . get_template() . "/$file.php");
	return ob_get_clean();
}
add_shortcode('myphp', 'PHP_Include');

私は小テーマ内に読み込みたいphpファイルを置いていました。
この書き方では親テーマの中に読み込むファイルを探しに行くことになりエラーが返ってきます。

小テーマ用に書き換える

小テーマ内に読み込むPHPを置きたいので、7行目を以下のように変更しました。
ついでに整理しやすいように専用フォルダとして「myphp」を作りました。

// PHPの読み込み
function PHP_Include($params = array()) {
	extract(shortcode_atts(array(
	    'file' => 'default'
	), $params));
	ob_start();
	include(get_stylesheet_directory() . "/myphp/$file.php");
	return ob_get_clean();
}
add_shortcode('myphp', 'PHP_Include');

スタイルシートのあるディレクトリ=小テーマから「myphpフォルダ」の中のphpを読み込みます。

「myphpフォルダ」は整理用に作成しただけですので、読み込みたいphpファイルをテーマフォルダ直下に置くのであれば最後の記述は ”/$file.php” だけでOKです。

あとは投稿内にショートコードを記入するだけです。
ショートコードの名前は10行目で指定したもので、この場合「myphp」です。

[myphp file="ファイル名"]

ファイル名の部分は拡張子無しの名前を入れます。
例えば「serchform.php」を読み込みたいとすると

[myphp file="searchform"]

と記入します。

実際にサーチフォームを読み込んでみます。

このように投稿内にphpを読み込むことができます。

追記

スマホ表示用のプラグイン「WPtouch」を使用している場合、ショートコードがそのまま表示されてしまいます。

どうしてこんなことになってしまうのかというと「WPtouch」はデバイスがスマホやタブレットだと判断した時に<従来使用しているテーマ>ではなく、<Wptouchが用意している独自のテーマ>でページを構成するプラグインです。このテーマには「funcsions.php」が読み込まれないために起こる現象です。

これを解消するために「functions.php」に記入した内容をプラグイン化してしてしまいます。
プラグインを使いたくないから始めたことなのに、いつの間にかプラグインを作ることになってしまいました。