WordPressの記事内でPHPを実行するショートコード(プラグインではなく)


Deprecated: get_the_author_ID の使用はバージョン 2.8.0 から非推奨になっています ! 代わりに get_the_author_meta('ID') を使ってください。 in /home/ohaya/wave-sight.net/public_html/haya.wave-sight.net/cms-wp/wp-includes/functions.php on line 5213

Notice: Undefined index: _shortcode_php_user_level in /home/ohaya/wave-sight.net/public_html/haya.wave-sight.net/cms-wp/wp-content/plugins/haya_x-system/haya_x-system.php(105) : eval()'d code on line 1

Notice: Undefined variable: post in /home/ohaya/wave-sight.net/public_html/haya.wave-sight.net/cms-wp/wp-content/plugins/haya_x-system/haya_x-system.php on line 2826

Deprecated: gmmktime(): You should be using the time() function instead in /home/ohaya/wave-sight.net/public_html/haya.wave-sight.net/cms-wp/wp-content/plugins/haya_x-system/haya_x-system.php(2829) : eval()'d code on line 2

WordPressでこのサイトを作りながら、ショートコードについてあれこれ試行錯誤をしつつ、時代錯誤も繰り返している今日この頃…。

そんな中「記事中で任意のPHPコードを動かすのって、ショートコードでも出来るんじゃない?(既存のプラグインを使わずとも)」と思って、やってみたら動いたのでご報告。ちょっと裏技的。
(執筆時2010.07.WordPress3.0、公開時2011.01.WordPress3.0.4で確認)

ソースコードと使い方

ソースコード。ショートコードphp_evalの定義。

// 初期設定などに
define( 'SC_PHPEVAL_USERLEVEL', 5 ); // 実行を許可する、記事を書いた人の権限レベル

// [php_eval] のコード
function shortcode_php_eval( $atts, $content ="" ){
	$r = '';
	$user = get_userdata( get_the_author_meta('ID') );
	$user_level = (int) $user->user_level;
	$level = SC_PHPEVAL_USERLEVEL;
	$level = is_null( $level ) ? 5 : (int) $level; // 未設定はとりあえずレベル5
	if( $user_level >= $level ){
		$r = $content;
		$r = preg_replace( '/^.*
/is'  , '', $r );
		$r = preg_replace( '/<\/pre>.*$/is', '', $r );
		$r = eval( html_entity_decode( $r ) );
	}
	return $r;
}
add_shortcode( 'php_eval', 'shortcode_php_eval' );

とりあえず定番な感じでテンプレートの「function.php」へ書き込めば動くはずです。
人に親切(?)なソースです。色々わかる人なら無駄なく短くできますね。(短いソースも下方に置いてみたよ!)

記事中でのショートコードの書き方は、次の通り。

[php_eval]
 ......php code...... 
[/php_eval]

※上記の</pre >は、必ず半角スペースを取って</pre>にして下さい。(このページの表示の都合)

ちょっとした思いつきですが、たったこれだけで動くのなら使いたくなる人もいるのでは??

特徴と注意点・・・

  • ショートコード内は、必ず<pre>タグで囲み、その中にPHPコードを書くこと。
  • 記事の編集は「ビジュアル」でなく「HTML」で書くこと。また投稿設定「不正にネスト化したXHTMLを自動的に修正する」のチェックを外すこと。プラグインPS Disable Auto Formattingも必要かも。
  • 記事の作成者の権限レベルで、実行するか実行しないか判別している。
  • returnで返した値は、ショートコードのあった場所に出力される。
  • ちゃんと動くかテストしてちょ。

テスト

今日の日付を表示する下記のコードを実行してみます。(※</pre >は、</pre>に)

[php_eval]
return "

今日は「".date("Y年m月j日")."」です。動いてるね!

";
[/php_eval]

ここで実行↓↓↓↓↓↓↓↓

今日は「2024年11月22日」です。動いてるね!

ここで実行↑↑↑↑↑↑↑↑

もちろん実行するPHPコードに注意して下さいね。うっかり$postを書き換えたりして、その後のページの表示がおかしくなるとかありがちです。

読み飛ばしてもいいかもな解説

<pre>タグで囲うのが気持ち悪いですが、これがないとPHPコード内の例えば「"」が「&quot;」になるらしくエラーが出て動きません。あとWordPressが勝手に追加する<p>や<br>タグなどを防ぐためにHTMLで編集。管理画面→設定→「投稿設定の不正にネスト化したXHTMLを自動的に修正する」のチェックも外すこと。同じ目的でプラグインPS Disable Auto Formattingも必要かも。

一応セキュリティ対策で、記事を書いた人の権限レベルによってPHPを実行出来るか決めています。権限レベルとその注意は「WordPressで記事作成者の権限レベルによって動作を変えるには?)」を参考にどうぞ。
しかし不特定多数が編集する環境でPHP実行出来ちゃうのはちょっと恐いですよね。充分に管理が行き届く範囲で使って下さいね。

ご利用は自己責任にて、充分にテストをして問題がないことを確認して使って下さい。<pre>タグで囲むなどその辺りの文字化け(?)対策が完全なのか若干心配です。問題点や解決策がわかっちゃうエキスパートでステキな人がいましたらぜひ教えて下さい!

おまけの短いソース

色々省いて、短くしたソース。

// [php_eval] のコード
function shortcode_php_eval( $atts, $content ="" ){
	$user = get_userdata( get_the_author_meta('ID') );
	if( (int) $user->user_level >= 5 ){ // 権限レベルの判定
		$r = eval( html_entity_decode( preg_replace( array('/^.*
/is','/<\/pre>.*$/is'), '', $content ) ) );
	}
	return $r;
}
add_shortcode( 'php_eval', 'shortcode_php_eval' );

もっと短くしたソース(笑)。権限判定も省略したので誰の記事でも実行されます。自分だけで使うブログならこれもありじゃない??

// [php_eval] のコード
function shortcode_php_eval($atts,$content=''){return eval(html_entity_decode(preg_replace(array('/^.*
/is','/<\/pre>.*$/is'),'',$content)))}
add_shortcode('php_eval','shortcode_php_eval');

ショートコード名はphp_evalじゃなくてもいいけどphpとかありがちのにすると、プラグインなど他のプログラムとぶつかるかも。


さてさて、最後までお付き合いありがとうございます。
皆様の幸せを心より願いまして、あばよっ! またねっ!


2013.2.4. 非推奨のget_the_author_IDをget_the_author_meta('ID')に変えました。

過去の記事を一部追加しました。主に友だちのネタ

もうお正月も5日が過ぎようとしています。皆さんの今年の抱負は何でしょう?
私の抱負は「オヤジギャグを言わないようにしよう…かな」とか(笑)細かいものが沢山あり過ぎるので書きません。・・・抱負が豊富。

さて、過去の記事を追加したのでリストアップします。

過去だけど新ネタ

更新し忘れた記事を追加。時系列にしたいので、新ネタだけど過去の日付になってます。


過去のネタを移動

私の「はぐれびとのブログ」で既に公開した記事を一部こちらに移動させました。今回は主に友だちのネタを中心にピックアップしました。

これから時々このように記事を移動してくる予定です。昔のコメントも移動しているのでビックリしないでね。

新年おめでた〜ございます。産〜ま〜れ〜たぁ〜!

本日2011年1月3日、妹が出産いたしました。
妹を知っている皆さん、あの妹が出産したのです!!(あのって何?!笑)

僕は赤ちゃんの顔はチラッとしか見られませんでした。でもちっこくて可愛い。女の子です。
出産後に撮った短いムービーを見せてもらったら、ちっこい生命が手足をパタパタしていて、正直とても不思議な感じがしました。そして何ともいえない感動が胸まで…。僕にもそんな心がまだ残っていたのか(笑)
顔を見たときは「幸せでありますように…」と何度も思いました。

少しこのお正月のことを綴ります。
もともと出産予定日は今月13日でした。なのでお正月は、妹と旦那が遊びにきて我が家でまったり過ごす予定でした。大晦日は皆で賑やかに過ごしたのです。
そして翌日元旦。朝から妹が病院に飛んで行くこととなり、皆ビックリです。そして即入院。いつ産まれても…という感じで「元旦か?!」「2日か?!」と、このお正月の我が家はめでたいながらも、ソワソワやらバタバタ落ち着きませんでした。そして、本日無事出産したという訳です。(^_^)

よく頑張った、妹よ! そして夫の哲っちゃん、お疲れさま!



褒めたところで終わればいいのですが、もちろんまだ続きます。
妹は「バランスが大切」だといいます。だからこの文章もバランスが大切なのです。

さて、どんな子に育つんでしょうね?? 親に似るのかな??
妹は普段からギャーギャー叫んでいるような明るい性格で、悪くいうと「うるさい」、良くいうと「やかましい」お方です(笑)。え?!全然良くいってないって?!(ごめんよ。僕はボキャブラリーが少なくて、いくら考えても「良い意味でうるさい(?)」という単語が出てこないんだ…。悪くいうつもりはないんだ。わざとじゃないんだ。許しておくれ、妹よ…)
旦那の性格も明るくて、とても「賑やか」です!

だもんですから「どんな子供になるんだろう?!?!」と想像すると、知らず知らずに目が大きくなってる自分がいます。とにかく凄そう(笑)
親から想像すると間違いないのですが、本当に元気に健やかに育って欲しいです。わんぱくでもいい、たくましく育って欲しい(ネタ古っ!しかも女の子向けじゃないし!笑)

麻〜ちゃん、哲っちゃん、頑張って頑張って、家族みんなで幸せになって下さいね。

ウェブサイトをhaya.wave-sight.netに移動中です

私のウェブサイトは、ここ(haya.wave-sight.net)に移動することにしました。
現在はコンテンツが色々な場所に分散していてわかりづらいので、ここに統合していこうと思います。よろしくお願いします。

HAYAの過去のサイトのイメージ図

調べてみると、私のサイトは1999年8月から始まったのでした。正直もっと長く感じたのですが、さば読んでまだ10年だったのね。でもその間に色々弄ってサイトが分散し、世の中のネット環境も変わったので、一度整理したいと思っていました。そう思いつつも数年が経ち、実はこのzasae.comも取得して1年放置状態(汗)
相変わらずスローですが、これからこちらのサイトに新ネタ(あれば…)や過去のコンテンツの移動をしていきたいと思います。デザインもこれからです。気長にお付き合い下さい。

いや〜、でもこの10年間にネットの使われ方も変わってきましたね。ブログ、SNS、ツイッターなど色々と…。上手く言えないけど、割とハッキリした提供色の強いものから、日記的・時事的なものに変わってきたというか。良い面も悪い面もあると思いますが、使い方から考えれば幅が広がったんですね。妄想リソースが世界に膨れ上がっていくのは気になりますが(笑)
サイトを公開してて思うことは、何か見せたいものがあるならとりあえず続けるってことかな〜。レスポンスなくて寂しくなってすぐ止めるのは勿体ないです。だけど、自分も相手も何も得ない独り言で、誰も聞いてないしレスポンスもないものを続けるのは、痛いほど勿体ない(涙)。そのときは止めるか、やり方を変えるかだよね。人の役に立つのが一番いいけど、見ておもしろいとか、ちょびっとでも何かしら楽しくなるように、とか頭に入れておくと良いんだと思います。ちょっとした文章にでもいいからね。

…私の経験で言わせてもらうとそんなところだ! フォッフォッフォ!
え? 具体的にどういうことかって??
わ・・・わかりません・・・(意味ね〜!ダメじゃん!)
そもそも、そんなこと自分で考えろよ!(逃げた!)

それでは、我がサイトに10年以上付き合って下さった方々も、途中から見て下さった方も、今日初めての方も、ありがとうございます。
これからは、haya.wave-sight.netをよろしくお願い致します。m(__)m


ちなみに移動するまでは、今までのサイトもご覧になれます。移動後の扱いは未定です。以下リスト。

haya.wave-sight.netを作ったことで、新たに分散しただけな気が…?!(^_^;)

新年おめでとうございます。&ウサギの絵

あけましておめでとうございます。
今年ももう残すところ365日となりました。早いものです。(その話題が早いよ!)
しかしまだ365日あると、ポジティブに考えることも出来ます。(ネガティブ前提かよ?!)
なので元旦ぐらいは落ち着きたいものです。さぁ、光陰矢の如し!時は金なり!果報は寝て待て!(どっちだよ!落ち着かないよ!)
おめでたい元旦に、頭までおめでたくなっているHAYAでございます。
皆さまも今日は、とってもおめでたいですよね!(どっちの意味だよ?!失礼だよ!)

今日はウサギの絵を公開します。年賀状用に描いたものです。

ウサギの絵

(クリックで拡大します)

妙な色ですが、黄疸の出ているかなり心配なウサギさんではありません。
白は寒そうに感じたので、幸せを感じさせるような、明るくて暖かそうな色にしてみました。ウサギも元気いっぱいで、幸せに向かって『ウサギまっしぐら』な感じを出したつもりです。そして「皆さまへ幸あれ!」という思いをこめて、年賀状に使用し、ここでも公開しました。
年賀状がまだ届いてない方にはネタばれだったね。あと印刷は色ずれしてます…。

わざわざ解説するのは、この絵だけではうまく伝わらないと思ったから(爆)(^_^;)>
久々に水彩絵の具(チューブの中でミイラ化してた…)と色鉛筆でザザッと描きました。でも結局ズルしてPCでタッチを変えちゃった。絵っぽいCGになるのかな。
ちょっと犬みたいですね(汗)。特に顎がいけないんだな。ラフに顎はないんだけど、夢中になってて描いちゃったらしい。顎大好きだから!(嘘)

このラビットにビビット来て(?!)今からでも私の年賀状が欲しいという方はご連絡ください。いないか(笑)。昨年は、引っ越しして微妙に住所も変わりましたので、新住所のお知らせにもなるかと。

サイトも引っ越ししてるっぽいって???
そうなのです。haya.wave-sight.netです。それについては、また次回!

では最後にご挨拶…
皆さまが幸せで充実した年となりますように。今年もどうぞよろしくお願い致します。
m(__)m

2011.01.01. HAYA