WordPressのページ内でPHPスクリプトを実行出来るようにするプラグインとして、以前にrunPHPというプラグインを使用していたのですが、Wordpress3では、「このプラグインには有効なヘッダーがありません。」と表示されてプラグインを有効にすることが出来ませんでした。
他のプラグインを探したところ、「Exec-PHP」と「PHP Execution」というプラグインが見つかり、どちらも問題無くWordPress3のページ内でPHPスクリプトを実行出来きました。どちらを使おうか悩んでいたのですが、なんと!ソースコードを表示するために使用している「Syntax Highlighter for WordPress」と相性が悪く、ソースコードとして表示したい部分を「Exec-PHP」と「PHP Execution」が実行してしまうではないですか(汗)。私は、「Syntax Highlighter for WordPress」を多用するので、残念ですが「Exec-PHP」と「PHP Execution」の使用は、見送らざるを得ませんでした。(残念)
「Syntax Highlighter for WordPress」のように特殊タグで挟まれた部分のみ処理するようなプラグインは無いかと探したところ、「WP exec PHP」というプラグインが見つかりました。「WP exec PHP」プラグインは、特殊タグに挟まれた部分のPHPコードを実行するので、「Syntax Highlighter for WordPress」と干渉して不具合を起こすことがありませんでした。
以下のように投稿ページでも「Syntax Highlighter for WordPress」と干渉せずにPHPスクリプトの実行が出来ます。
以下に「Syntax Highlighter for WordPress」を使用して上記PHPスクリプトのソースコードを表示しています。
<?php
//------------------------------------------------------//
// インクルードファイル
//------------------------------------------------------//
require_once('Services/Amazon.php');
//------------------------------------------------------//
// 定数
//------------------------------------------------------//
// アクセスキーID
define('ACCESSKEY_ID', 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx');
// シークレットアクセスキー
define('SECRET_ACCESSKEY', 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx);
// アソシエイトID
define('ASSOCIATE_ID', 'xxxxxxxx-22');
// ItemSearch:ECSのバージョン
define('ECS_VERSION','2010-09-01');
// レスポンスグループ
define('RESPONSE_GROUP','Small,Images,ItemAttributes,OfferSummary,Reviews');
// 商品タイトル文字数MAX
define('TITLE_MAX','60');
// サーチインデックス
define('SEARCH_INDEX','Books');
// サーチブラウズノード
define('BROWSE_NODE','492332');
// サーチブラウズノード名
define('BROWSE_NODE_NAME','インターネット・Web開発');
//------------------------------------------------------//
// メインプログラム
//------------------------------------------------------//
$amazon = new Services_Amazon(ACCESSKEY_ID,SECRET_ACCESSKEY,ASSOCIATE_ID);
$amazon->setLocale('JP');
$options = array();
$options['BrowseNode'] = BROWSE_NODE;
$options['Sort'] = 'salesrank';
$options['ResponseGroup'] = RESPONSE_GROUP;
$options['ItemPage'] = '1';
$search_index= SEARCH_INDEX;
// 検索結果を配列に格納して返す
$ret = $amazon->ItemSearch($search_index,$options);
if (PEAR::isError($ret)) { // ItemSearchでエラーが発生した場合
echo '商品が存在しない等の理由により検索出来ませんでした。<br>';
echo '<hr size="1" color="#cccccc" style="border-style:dashed">';
die($ret->getMessage());
}
// 商品の配列を取得する
$item_array = get_item_array($ret);
// 結果の表示
show_item($item_array);
//------------------------------------------------------//
// アイテム用の配列を得る関数 (タイトルと商品URLを抽出)
//------------------------------------------------------//
function get_item_array($ret){
if (isset($ret[Item])) {
$i=0;
foreach ($ret[Item] as $item) {
// ASIN
$item_array[$i][asin]=$item[ASIN];
// 商品イメージ
if(isset($item[SmallImage][URL])){
$item_array[$i][image]=$item[SmallImage][URL];
}else{
$item_array[$i][image]="";
}
// タイトル
$item_array[$i][title]
= mb_strimwidth($item[ItemAttributes][Title], 0, TITLE_MAX, "...");
// 商品URL
$item_array[$i][url]=$item[DetailPageURL];
// メーカー
$item_array[$i][manufacturer]=$item[ItemAttributes][Manufacturer];
// 価格
if(isset($item[ItemAttributes][ListPrice][FormattedPrice])
&& $item[ItemAttributes][ListPrice][Amount]>10){
$item_array[$i][price_name]='標準価格';
$item_array[$i][price]=$item[ItemAttributes][ListPrice][FormattedPrice];
}else if(isset($item[OfferSummary][LowestNewPrice][FormattedPrice])){
$item_array[$i][price_name]='新品価格';
$item_array[$i][price]=$item[OfferSummary][LowestNewPrice][FormattedPrice];
}else if(isset($item[OfferSummary][LowestUsedPrice][FormattedPrice])){
$item_array[$i][price_name]='中古価格';
$item_array[$i][price]=$item[OfferSummary][LowestUsedPrice][FormattedPrice];
}else{ // 価格が無い
$item_array[$i][price_name]='価格不明';
$item_array[$i][price]='---';
}
$i++;
}
}
return $item_array;
}
//------------------------------------------------------//
// ItemSearchの結果を表示する関数
//------------------------------------------------------//
function show_item($item_array){
echo '<div style="width:560px;">';
echo '<h3>お薦め商品:';
echo BROWSE_NODE_NAME;
echo '</h3>';
echo '<hr size="1" color="#cccccc" style="border-style:dashed">';
foreach ($item_array as $item) {
echo '<div style="width:560px;">';
echo '<div style="float:left; width:100px;">';
echo '<a href="'.$item[url].'" target="_blank">';
echo '<img src="' .$item[image].'" border="0"></a>';
echo '</div>';
echo '<div style="float:left; width:460px;">';
echo '<a href="'.$item[url].'" target="_blank">';
echo $item[title].'</a><br>';
echo 'メーカー:'.$item[manufacturer].'<br>';
echo $item[price_name].':'.$item[price].'<br>';
echo '</div>';
echo '<div style="clear: both;">';
echo '<hr size="1" color="#cccccc" style="border-style:dashed">';
echo '</div>';
echo '</div>';
}
echo '</div>';
}
?>