テキストウィジェットにPHPの実行コード書いても動かないよ~
それWordPressの仕様だから
だけどPHPファイルをテキストウィジェットにインクルードしちゃえばショートコードで実行できるわ
本稿ではPHPファイルをインクルードしてウィジェット化する方法を紹介します。
この方法を知っていると、サイドバーへのテキストウィジェット設置のみならず、トップページレイアウトの幅も広がります。
以下は子テーマの使用を前提に記します。
導入例
サイドバーウィジェット
本サイトで仕様しているテーマLuxeritasには関連記事のサイドバーウィジェットがありません。
そのためテーマから記事末尾の関連記事コードを抜き出し、ウィジェット化しています。
トップページレイアウト
本サイトで用いていた過去のレイアウトです。
当時はLuxeritasでタイル型レイアウトを採用していなかったことから自分で作りました。
各カテゴリをウィジェット化して、固定ページに貼り付けています。
コード直接さわるよりも柔軟性あっていい感じです。
導入方法
1.ショートコードを使えるようにする
既にしている方は飛ばして下さい。
funcitons.phpに次の記述をします。
add_filter('widget_text', 'do_shortcode');
2.子テーマにファイルフォルダを作る
別に作らなくてもいいのですが、あった方が整理に便利です。
ここではmyphpfilesという名前にします。
3.インクルードできるようにする
functions.phpに次のコードを記述します。
function Include_my_php($params = array()) { extract(shortcode_atts(array( 'file' => 'default' ), $params)); ob_start(); include(STYLESHEETPATH . "/myphpfiles/$file.php"); return ob_get_clean(); } add_shortcode('myphp', 'Include_my_php');
4.使いたいコードをPHPファイルにする
ここではhoge.phpという名前にしておきます。
テキストファイルに使いたいコードを記述し、UTF-8形式・拡張子PHPで保存。
FTPなどで、myphpfilesフォルダにアップします。
5.テキストウィジェットを設置し、ショートコードを記述する
ショートコード[myphp file=’hoge’]を記述します。
”[”は半角に変えて下さい。
間違えやすいポイント
この方法を紹介している記事は多いです。
しかしやってみたけど動かなくてハマったという人もいるかもしれません。
それは他サイトの記事のコードがこうなっているから。
include(get_theme_root() . '/' . get_template() . "/$file.php");
私もハマった1人。
当時の話ですが、どこのサイトの記事を見てもこうなってました。
自分で調べてみて、ようやく動かない原因がわかりました。
動かない理由は、上記が「親テーマだけ」の使用を前提にしたコードだから。
子テーマを使う場合、get_template()は親テーマのディレクトリを返しちゃうの
試しに親テーマにファイルを入れてみてください。
動きますので。
子テーマを使う場合はこちらが正解となります。
(上のコードと異なり、myphpfilesを作成せず直接入れる場合)
include(STYLESHEETPATH . "/$file.php");
2024年現在ですと、さすがに正しいコードの方が広まっているみたいです。
まとめ
本当に便利だから試してみてね!