Advertisement

【PHPプラグインやめました】WordPressのショートコードでPHPファイルを読み込み表示させる方法

Photo by Luca Bravo on Unsplash PHP
Photo by Luca Bravo on Unsplash

 

これまでWordpressのウィジェットなどでPHPプログラムを表示する際にプラグインを使用してきましたが、セキュリティの問題などもありプラグインの使用をやめることにしてショートコードを使ってPHPを展開することにしました

 

Advertisement

やっぱりphpプラグイン内のeval関数は危険

2018年現在最新のWordpressプラグインにPHP Everywhereというのがありますが、このプラグインにもEval関数が使われています。

 

Eval関数とは指定された文字列をスクリプトとして実行する関数で、セキュリティ問題としてこの関数に対し不正なコードを引き渡すというものがあります。

システムに対する攻撃が可能ということなので、このプログラムは極力使用しないほうが良いです。

 

WordPressではショートコードを使って各種プログラムを呼び出す機能があります。

ショートコードとはあらかじめ用意しておいたプログラムのテンプレートを簡単に呼び出す方法です。

これを使って投稿ページや固定ページ、そしてサイドバーなどのウィジェットでPHPを展開することが可能になります。

 

 

PHPファイルをショートコードで呼び出す準備

 

まず、functions.phpのバックアップを取り以下のコードを追記します。

//phpをshotecodeで呼び出す
/*
*include内記述の
*子テーマは STYLESHEETPATH
*親テーマは get_theme_root() . '/' . get_template()
*/
function short_php($params = array()) {
    extract(shortcode_atts(array('file' => 'default'), $params));
    ob_start();
    include(STYLESHEETPATH . "/code/$file.php");
    return ob_get_clean();
}
add_shortcode('phpcode', 'short_php');

 

当サイトは子テーマなので10行目のinclude内はSTYLESHEETPATHとなります。

親テーマの場合はget_theme_root() . ‘/’ . get_template()となります。

また、作成した各phpファイルをディレクトリ内に管理するので当サイトはcodeというディレクトリを作成し、10行目のPHPファイルを呼び出す部分にディレクトリ名”/code”を追記しています。

 

function名はshort_php、呼び出し名はphpcodeとしています。この名前は各自わかりやすい名称にしてください。

 

7行目と最終行内の引数2番目にfunction名を、最終行の引数1番目に呼び出し名を追記します。

 

続いてphpファイルを展開したい場所に以下のショートコードを追記します。

 

サンプルではcode内にtest.phpというファイルを用意して以下の内容を表示させますのでショートコードのファイル名には拡張子を除くファイル名のみ記述します。

<?php

print "halo!";

?>

 

ウィジェットのテキストにショートコードを記述して表示してみましょう。

指定した場所にphpファイルの内容が表示されていれば成功です。

 

当サイトのWordpressテーマLIQUID PRESS ではサイドバーでもショートコードが通常表示されますが、もしサイドバーにショートコードが展開されない場合はfunctions.phpに以下のコードを追記してみてください。

//ウィジェットにshotecodeを適用
add_filter('widget_text', 'do_shortcode');

 

このテクニックを使えばプラグインなしでウィジェット内などのお好きな場所でPHPコードを展開することができるようになります。

 

参考: WordPress投稿ページにPHP利用→ショートコードを使おう! | vdeep

PHPWordpressテクニック
Advertisement

プログラマーです。メインはWEB作成をやってます。
生まれも育ちもアスペルガー。心屋仁之助さんの前者後者理論を実践しています。
プロフィール詳細はこちらから

ARMDroidをフォローする
ARMDroidをフォローする
Advertisement
ARMDroid BLOG