- 2010-02-09 (火) 12:47
- 技術メモ
こんにちは。販促格さんこと堺です。
最近、仕事でwordpressを使っているのでwordpressネタが多くなってきましたね。
気が付いたことしか書いていませんが、そのうちまとめた記事でも書こうと思います。
wordpress の秀逸な国産プラグインに Contact Form 7 があります。
簡単にフォームを設置できるし、簡単なわりにけっこう柔軟なところがいいですよね。
ただ、日本特有の確認ページがなかったり、フォームのログ記録がなかったりするので、
必要に応じて自身で拡張する必要があります。
商用で利用する場合などは、
アフィリエイト広告を出稿してトラッキングコードをサンキューページに貼る場合があると思います。
その際、ユニークデータをASP側に送らなくてはならないでしょう。
個人利用の場合でも「○○さん、ありがとうございました。」などと
サンキューページに名前を表示させたいかもしれません。
そんなときに役立つ方法をご紹介します。
まずはサンキューページへ飛ばす
サンキューページへ飛ばす方法は簡単です。
Contact Form 7 のフォーム設定画面で、
最下部にある「その他の設定」に以下のようなコードを書くだけです。
on_sent_ok: "location.replace('サンキューページのuri');"
ちなみに、これはJavaScriptのコードで、
フォームの入力が正しかった時に付け加えたい処理を、改行を入れて複数設定することも可能です。
//例
// Google Analytics のトラッキング
on_sent_ok: "pageTracker._trackPageview('/mysite/thank-you.html');"
// アラートの表示
on_sent_ok: "alert('thanx!');"
// サンキューページへのリダイレクト
on_sent_ok: "location.replace('/mysite/thank-you.html');"
空行やコメント行は無視されます。
セッションを有効にする
別のページに値を渡すなら、セッションが手っ取り早いと考えました。
他にも方法はあると思いますが。
適当にプラグインファイルを用意し、
(すでにある自作プラグインに追加してもいいし、新たに作ってもかまいません。)
セッションを有効にする関数を用意します。
// プラグイン有効と同時にセッションを有効に
add_action( 'init', 'my_session_start' );
function my_session_start()
{
if(!session_id()){
session_start();
}
}
セッションに値を渡す
用意したプラグインにさらに以下を追記します。
※自分の欲しいデータにあわせて適時変更してください。
// Contact Form 7 のメール送信直前にフック
add_action( 'wpcf7_before_send_mail', 'my_conversion' );
function my_conversion( $cf7 )
{
// フォームID
$_SESSION["form_id"] = $cf7->id;
// 入力されたデータ
$_SESSION["posted_data"] = $cf7->posted_data;
// IDが1のフォームの時だけ処理したい場合
if( $cf7->id == 1 )
{
// トラッキングコード
$tracking_code = '<img src="https://my.affiliate.com/tracking.php?mail=%1$s&ID=xxxx" border="0" alt="" width="1" height="1" />';
$mail = $cf7->posted_data["your-email"];
$_SESSION["tracking_code"] = sprintf( $tracking_code, $mail );
}
}
サンキューページに挿入させるショートコードを登録する
サンキューページ専用のテーマを作って、テーマに直接書くという方法もありますが、
ショートコードを作って管理画面で好きなように設定できたほうがいいですよね。
// 入力データ
add_shortcode( 'posted-data', 'get_posted_data' );
// アフィリエイト用 トラッキングコード出力
add_shortcode( 'tracking-code', 'my_tracking_code' );
function get_posted_data( $atts )
{
extract( shortcode_atts(array( 'get' => 'name' ), $atts ));
if( $get == "name" )
{
return ( $_SESSION["your-name"] ) ? $_SESSION["your-name"] : "匿名";
}
else if( $get == "mail" )
{
return $_SESSION["your-email"];
}
}
function my_tracking_code( $atts )
{
if( $_SESSION["tracking_code"] )
{
$tracking_code = $_SESSION["tracking_code"];
// コードをクリアする
unset( $_SESSION["tracking_code"] );
// コード出力
return $tracking_code;
}
}
サンキューページにショートコードを書く
あとはサンキューページ(投稿やページ)にショートコードを書くだけです。
[posted-data get="name"]様、ありがとうございます。 [tracking-code]タグ: php, wordpress, カスタマイズ