自作のphpコードを固定ページで実行したいが、Wordpressそのままでは固定ページに php を書いても動かない。そこでこちらのページのやり方を参考に、以下のコードを functions.php に追記するとショートコードからphpを実効出来るようになる。
// ショートコードでphpファイルを呼び出す。
function include_my_php($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('include_php', 'include_my_php');
そしてphpを動かしたい固定ページには
[include_php file='gallery_search']
とのみショートコードを書いて phpコード自体は gallery_search.php という名前でテーマのディレクトリ ‘theme/テーマ名/’ に保存する。phpコードのファイル名には.phpが付くがショートコードには.php無しのファイル名のみ書くこと。なお当サイトの場合子テーマがあるので上のコードの中の “/../子テーマ名/” のようなリンクとしているが、各サイト構造のにより適宜変更が必要となる。
同様にphpコードをウィジェット内で動かしたい場合は、ウィジェットにショートコードだけを書いてphpはテーマのディレクトリに保存すればよい。ウィジェットに関して言うと「ウィジェット内で直接PHPコードを実効出来ます」というハックやプラグインがあるのだが、それらは当方の環境では動かなかったり動くけれどもエラーが溜まったりして問題があったので、こちらのショートコードを使うやり方に統一している。この方法は安定していてエラーも出ず上手く動いてくれている。原案者の方に感謝したい。
この投稿は元々「NextGen Gallery と Justified Image Grid を組み合わせたギャラリー検索機能」という超ニッチなハックの紹介に書かれていた内容であるが、より一般的なハックとして紹介した方が見つけやすいと思い別投稿とした。
コメント