PHPを使って訪問者の国を知り、それをWordPressのページに表示させたいのですが、WordPressのページや投稿にPHPコードを追加するとエラーが出てしまいます。 どのようにしてWordPressのページや投稿にPHPコードを追加することができるのでしょうか。
<?PHP
try{
function visitor_country()
{
$client = @$_SERVER['HTTP_CLIENT_IP'];
$forward = @$_SERVER['HTTP_X_FORWARDED_FOR'];
$remote = $_SERVER['REMOTE_ADDR'];
$result = "Unknown";
if(filter_var($client, FILTER_VALIDATE_IP))
{
$ip = $client;
}
elseif(filter_var($forward, FILTER_VALIDATE_IP))
{
$ip = $forward;
}
else
{
$ip = $remote;
}
$ip_data = @json_decode(file_get_contents("http://www.geoplugin.net/json.gp?ip=".$ip));
if($ip_data && $ip_data->geoplugin_countryName != null)
{
$result = array('ip'=>$ip,
'continentCode'=>$ip_data->geoplugin_continentCode,
'countryCode'=>$ip_data->geoplugin_countryCode,
'countryName'=>$ip_data->geoplugin_countryName,
);
}
return $result;
}
$visitor_details= visitor_country(); // Output Country name [Ex: United States]
$country=$visitor_details['countryName'];
WordPressはデフォルトでは、ショートコードがない限り、ポスト/ページのコンテンツでPHPを実行しません。
一番手っ取り早くて簡単な方法は、投稿コンテンツに埋め込まれたPHPを実行できるプラグインを使うことです。
プラグインを使わずにこれを実現するには、他にも2つの方法があります。
Make it a shortcode (functions.php
に記述して、国名をエコーするようにする) これはとても簡単です - こちらをご覧ください。Shortcode API at WP Codex.
Put it in a template file - デフォルトのページテンプレートをベースに、そのページ用のカスタムテンプレートを作成し、投稿内容ではなくテンプレートファイルにPHPを追加します。カスタムページテンプレートを参照してください。
WordPressのバックエンドのページエディタでは、PHPを使うことができません。プラグインを使えば可能かもしれませんが、そのままでは使えません。
最も簡単な方法は、ショートコードを作成することです。この場合、次のように使用できます。
function input_func( $atts ) {
extract( shortcode_atts( array(
'type' => 'text',
'name' => '',
), $atts ) );
return '<input name="' . $name . '" id="' . $name . '" value="' . (isset($_GET\['from'\]) && $_GET\['from'\] ? $_GET\['from'\] : '') . '" type="' . $type . '" />';
}
add_shortcode( 'input', 'input_func' );
Shortcode_API]1を参照してください。
このために別のページテンプレートを作成するか、このプラグインを使用することができます。http://wordpress.org/plugins/exec-php/
ページテンプレートの作成は良いオプションです。