*

WordPress記事内でプラグインを使わずにPHP,JavaScriptプログラムを動かす

公開日: : 最終更新日:2014/04/22 初心者がWordPressでブログを作る , , , ,

New WordPress Buttons and Stickers / Nikolay Bachiyski

WordPressのカスタマイズをしていると、

「記事内や固定ページ内にPHPやJavaScriptを記述したい!」

という欲望がムクムクと膨らんでくると思います。

しかし、現状の仕様ではWordPressの記事内にPHPなどのスクリプト言語を記述することはできません。

当サイトの以下の記事では、記事内でPHPとJavaScriptのプログラムを動作させています。

>> FX運用計画シミュレーションツール

一体どうやっているのか?
実現の方法をご説明します。

プラグインを使って記事内にPHPを記述する

世の中には便利なプラグインが溢れていて、プラグインを探すのが趣味のような方もいらっしゃるのではないでしょうか。

例に漏れず、PHPを記述できるようになるプラグインもいくつか存在するようです。

WP記事内にPHPを記述するプラグインの例

こういうプラグインが有名です。

私も以前、Exec-PHPを使ったことがあり、とても便利だったのを覚えていますがそれも今は昔。

プラグインを使わない理由

そんな便利なプラグインですが、当サイトでは極力プラグインは使わないようにしています。
理由は以下の通りです。

・WordPress本体のバージョンアップで使えなくなることがある
・プラグインの更新で使えなくなることがある
・他のプラグインとコンフリクトして正常動作をしなくなることがある
・プラグインを外すと過去の記事が崩れるなどの影響が出ることがある

しかも、上で紹介したプラグインは、この記事執筆時点(2014年4月)で2年以上もアップデートされていないです。
それはええのんかな?

プラグインを使わずにWordPress記事内でPHPプログラムを動かす

さて、本題。
プラグインを使わずに、WordPressの記事や固定ページ内でPHPファイルをインクルードし、PHPやJavaScriptプログラムを実行する方法を紹介します。

プラグインを使わずにWP記事内でPHPを実行するための手順

「functions.php」内にコードを記述する

まず、テーマ関数ファイル「functions.php」内に以下のコードを記述します。

テーマフォルダ内にPHPファイル管理用フォルダを作成する

次に、有効にしているテーマフォルダ内に「myphpfiles」というフォルダを作成し、そのフォルダ内に実行したいPHPファイルを配置します。
※フォルダ名は何でも良いですが、その場合はコード内のinclude関数内の「myphpfiles」という記述を作成したフォルダ名に合わせて変更してください。

例えば「myphpcode.php」というファイルを実行したい場合は、こんな感じです。

(ワードプレスディレクトリ)>wp-content>themes>(テーマフォルダ)>myphpfiles>myphpcode.php

ショートコードでPHPファイルを指定

あとは、記事や固定ページ内でPHPプログラムを実行したい場所に、以下のショートコードを書くと、「myphpfiles」フォルダ内にあるPHPファイル「myphpcode.php」を呼び出して実行してくれます。

意外に簡単でしたね♪

phpコードを書く

あとは好きなようにプログラムをガリガリ書いてください。

参考)How to Develop a PHP File Include Plugin for WordPress(『SitePoint.com』より)

サンプルコード

簡単なプログラムを書いて、実行してみましょう。
「myphpcode.php」内に以下のコードを書いてみてください。

※PHPの文法上、このプログラムでは末尾の「?>」は省略できますが、分かり易くするために書いておきます。

次に、WordPressの記事を新規作成して、記事内に以下のコードをコピペしてみてください。

※このとき、必ずテキストエディッタを用いてください。ビジュアルエディタを用いると、ショートコードを正常に読み込まない可能性があります。
…とは言え、WordPressでPHPを動かしたいなんて思う人が、ビジュアルエディタを使っているとも思えませんがww

下書き保存して、プレビューで見てみましょう。
記事内に以下のように表示されたら成功です!

ここに表示される。
↓↓↓↓↓
PHP is running in the WordPress article!
↑↑↑↑↑

JavaScriptはPHPファイルの中に記述すればOK

JavaScriptを実行したければ、PHPファイル内にJavaScriptコードを書けばOKです。
さきほど作ったファイル「myphpcode.php」の中の「?>」の下に以下のコードを追記してみましょう。

これをプレビューしてみると、以下のように表示されていればOKです。

ここに表示される。
↓↓↓↓↓
PHP is running in the WordPress article!
JavaScript is running in the WordPress article, too!!
↑↑↑↑↑

ちなみに、上の例ではJavaScriptのライブラリのひとつであるjQueryを使っています。WordPressはデフォルトでjQueryが使えるようになってはいるのですが、WordPressの中ではjQueryの短縮オブジェクト名「$」が使えないという制限があるため、以下を参考にしてWordPress内でも「$」が使える方法で記述しています。

参考)WordPressでjQueryを使うときに、問題なく動作させる為の基礎知識やTipsと、動かない場合の対処例(『かちびと.net』より)

子テーマを使っている場合の注意点

当サイトもそうですが、子テーマを使ってカスタマイズを行っている方も多いと思います。
その場合は、子テーマフォルダ配下に「myphpfiles」フォルダを作成し、子テーマの「functions.php」内に書くコードを以下のように変更します。

関数 include() 内で呼び出している get_template() 関数を、get_stylesheet() に変更しています。これは、子テーマを扱っている場合はよくやるので、頭の片隅に置いておくとよいでしょう。

参考)WordPress の関連 URL、パスを呼び出す関数、定数色々(『WordPressの開発テクニック集 WP Tips』より)

セキュリティ上の注意点

この方法は、セキュリティ上のリスクを抱えています。

例えば、マルチサイト環境や複数ユーザーで管理している環境では利用しない方がいいかもしれません。
全ての管理者ユーザーがPHPを実行できてしまいます。
使い方を誤ると、このプラグインの存在自体がセキュリティホールになる可能性があります。
PHPファイルを管理するフォルダのアクセス権限を設定するなどの対策を講じる必要があります。

また、管理者権限を盗まれたりした場合、悪意のある攻撃者がスクリプトを実行し放題となります。
(ま、管理者権限を盗まれたらどの道アウトですがww)

記事内に直接PHPプログラムを書く訳ではないため、「Exec-PHP」などよりは危険度は低いですが、以上のリスクがあることを充分に理解した上で、自己責任の上で運用してください。

当サイトでの使用例

当サイトでは、例えば以下の記事が、この方法を使って書かれています。

>> FX運用計画シミュレーションツール

フォームに値を入力して「計算」ボタンをクリックすると、PHPプログラムで計算を実行して、計算結果とグラフを表示します。

グラフの描画についてはjQueryプラグインのjqPlotを利用しています。詳しくは以下の記事を参照ください。

>> 【WordPress】見栄えのいいグラフを動的に描画できるjQueryプラグイン「jqPlot」をWPで使用する方法

スポンサードリンク

「いいね!」と思ったらシェアしてもらえると...大感謝です。
  • このエントリーをはてなブックマークに追加
  • follow us in feedly

関連記事

stinger3_logo_140415

WordPressテーマ【STINGER】子テーマのスマホ用スタイルシート「smart.css」を自力でカスタマイズする

WorpPressテーマ「STINGER」は、WordPressの初心者でも簡単に設定できるテンプレ

記事を読む

jqplot-jquery-graph-in-wordpress

【WordPress】見栄えのいいグラフを動的に描画できるjQueryプラグイン「jqPlot」をWPで使用する方法

当サイトの以下の記事では、数値計算を実行した後、計算結果をグラフ表示しています。 >>

記事を読む

スポンサードリンク

Comment

  1. ゆりこ より:

    1人だけのサイトならばあまり問題はないと思いますが、やはり、広く使ってもらうテクニックとしてはツッコミどころが多いと思います。
    より安全な手法としては、個別の php ファイルについてはショートコードを定義する関数でくるんでしまい、投稿本文ではそれぞれのショートコードを記述して関数の中身を呼び出します。これならば PHP ファイルを選択する部分に動的要素がなくなるので、安全性がグッとアップします。

    提示された例であれば、myphpcode.php の記述内容は、「PHP is running in the WordPress article!」を出力するショートコード [myphpcode] を定義するものとします。つまり、個別の PHP ファイルはすべてショートコードの定義を行うものとなります。そして、functions.php から myphpcode.php を include します。

    今回のテクニックの何がまずいかというと、include するファイルのパスをまったく検査していない点です。ディレクトリトラバーサルが可能となっているので、サーバ内の任意の PHP ファイルを呼び出せます。したがって、「記事内に直接PHPプログラムを書く訳ではないため、『Exec-PHP』などよりは危険度は低いですが」という記述は正しくありません。場合によっては Exec PHP 等よりも危険になります。
    閲覧者が phpinclude のショートコードを書けるわけではないので、ただちに危険というわけではありません。しかし、もし他の脆弱性によって投稿本文をいじられる攻撃が成功した場合、本テクニックとの合わせ技で強力な攻撃が可能となります。

    ディレクトリトラバーサル対策はなかなか難しいです。PHP ファイルを格納したディレクトリを glob してファイル一覧を作っておき、それに一致しないものが指定されたら include しない、とすれば少し安全になります。ただし、他ディレクトリへのシンボリックリンクを入れられたら守りを破られます。(よって、シンボリックリンクを除外したファイル一覧を作る)

    また、phpinclude のショートコードを実行できる条件として、投稿の作成者が編集者権限以上であるなどの制約をつけるべきでしょう。1人で運営しているサイトであっても、こういう制約を入れておけば、勝手にユーザーを作られる脆弱性が見つかったときに防げます。

    • fxadmin より:

      >ゆりこさま

      とても丁寧なコメントありがとうございます。
      私の不勉強だったところをしっかりと突いていただき、感謝しております。

      ゆりこさまのご意見を元に、自分でも租借して理解を深めてから、記事内の「セキュリティ上の注意点」を修正・追記します。

      P.S.
      ゆりこさまは、WordPressプラグイン「Ktai Style」の開発者さまなんですね。
      依然ガラケー人口は少なくないらしいので、当サイトでも採用してみました。

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

スポンサードリンク

kitanomakoto140514
【FX】北野誠さんが荻野金男さんと語る「主要通貨の行方を握る、世界の”裏”の動き」をPodcastで学ぶ

お笑い芸人でFXトレーダーの北野誠さんが、元インターバンクディーラーの

【FX】誰も教えてくれなかったRSI!陳満咲杜の「FXトレンドの真実」eyecatch
ラジオNIKKEI陳満咲杜さんの『FXトレンドの真実「RSIにポリンジャーバンドを掛けようその5~ポリンジャーバンド×ポリンジャーバンド2.0」』をPodcastで学ぶ

ラジオNIKKEIの番組『陳満咲杜の「FXトレンドの真実」誰も教えてく

【FX】誰も教えてくれなかったRSI!陳満咲杜の「FXトレンドの真実」eyecatch
ラジオNIKKEI陳満咲杜さんの『FXトレンドの真実「RSIにポリンジャーバンドを掛けようその4~ポリンジャーバンド×ポリンジャーバンド」』をPodcastで学ぶ

ラジオNIKKEIの番組『陳満咲杜の「FXトレンドの真実」誰も教えてく

EURJPY_20140519115218_140515
FX自動売買結果 ST2ユーロ円 2014/5/13-15 負け-26.6pips

ネオシオン氏のST(スナイパートレード)シグナルを用いた自動売買ソフト

USDJPY_20140519115129_140515
FX自動売買結果 ST1ドル円 2014/5/12-15 勝ち+9.5pips

ネオシオン氏のST(スナイパートレード)シグナルを用いた自動売買ソフト

→もっと見る

  • FX自動売買マネジメントサービス
    XEMarkets 口座開設
    海外FXランキング
    アフィリス パートナー募集
PAGE TOP ↑