概要説明
アフィリエイトの成果用のコンバージョンタグをプラグイン無しで設定するカスタマイズ。特定のパラメーターが設定されている場合のみcookieを使用してWordPress Contact Form 7 にてアフィリエイト対応が可能です
~ 目次 ~
アフィリエイトリンクからの遷移を判定させてcookieに情報を保持させる
functions.php
/*----------------------------------------------------
GETパラメーターにてアフィリエイトリンクからの遷移を判定
----------------------------------------------------*/
if ( ! function_exists( 'set_affiliate_cookie' ) ) {
function set_affiliate_cookie() {
if ( is_admin() || ! isset( $_GET['affiliate'] ) ) {
return;
}
// ランダムなユニークコード(英小文字と数字の 10 文字)
$code = strtolower( wp_generate_password( 10, false, false ) );
// 1 日有効・サイト全体のパス・JavaScript からは読ませない
setcookie( 'affiliate', $code, array(
'expires' => time() + DAY_IN_SECONDS,
'path' => COOKIEPATH,
'domain' => COOKIE_DOMAIN,
'secure' => is_ssl(),
'httponly' => true,
'samesite' => 'Lax',
) );
// パラメーターを外した URL へ戻す
wp_safe_redirect( remove_query_arg( 'affiliate' ) );
exit;
}
// ヘッダーを送る前に動かす
add_action( 'template_redirect', 'set_affiliate_cookie' );
}
メール本文に発行したユニークコードを表示させる
functions.php
/*----------------------------------------------------
Contact Form 7 にてユニークコードをメールに記載できるようにする
----------------------------------------------------*/
if ( ! function_exists( 'get_affiliate_code' ) ) {
// cookie のユニークコードを読む(形が違えば空にする)
function get_affiliate_code() {
$code = isset( $_COOKIE['affiliate'] ) ? (string) wp_unslash( $_COOKIE['affiliate'] ) : '';
return preg_match( '/\A[a-z0-9]{10}\z/', $code ) ? $code : '';
}
}
if ( ! function_exists( 'get_page_code_form_tag_handler' ) ) {
function add_custom_form_tags() {
wpcf7_add_form_tag( 'affiliate_code', 'get_page_code_form_tag_handler' );
}
function get_page_code_form_tag_handler( $tag ) {
return '<input type="hidden" name="affiliate_code" value="' . esc_attr( get_affiliate_code() ) . '" />';
}
add_action( 'wpcf7_init', 'add_custom_form_tags' );
}
[affiliate_code]
Contact Form 7 お問い合わせフォーム設定画面に上記コードを隠し項目として設定することで発行したユニークコードをメール本文に表示させることができるようになります
[affiliate_code]
上記コードを同様にメール本文の設定画面に記載することでメール本文内にユニークコードが表示されます
Contact Form 7 にて正常に送信できた場合にサンクスページを表示させるように設定
成果用の通信コードを表示させるショートコード
functions.php
/*----------------------------------------------------
アフィリエイト成果通信用コード表示ショートコード
----------------------------------------------------*/
if ( ! function_exists( 'echo_affiliate_html' ) ) {
function echo_affiliate_html() {
$code = get_affiliate_code();
if ( '' === $code ) {
return '';
}
// アフィリエイト用の専用コード内にユニーク文字列を入れて表示
return '<script src="' . esc_url( add_query_arg( 'key', $code, 'https://xxxx.com/' ) ) . '"></script>';
}
add_shortcode( 'echo_affiliate_html', 'echo_affiliate_html' );
// cookie を消すのは、ヘッダーを送る前(サンクスページを開いたとき)に行う
function delete_affiliate_cookie() {
if ( is_page( 'thanks' ) && isset( $_COOKIE['affiliate'] ) ) { // thanks はサンクスページのスラッグに合わせる
setcookie( 'affiliate', '', time() - HOUR_IN_SECONDS, COOKIEPATH, COOKIE_DOMAIN );
}
}
add_action( 'template_redirect', 'delete_affiliate_cookie' );
}
以前のコードは、呼んでいる関数の名前が定義と違っていて、?affiliate= 付きで開くとエラーで止まる状態でした。cookie の値をそのまま画面に出していた所(悪いスクリプトを埋め込まれるおそれ)と、ショートコードの中で cookie を消していた所(効かない)もあわせて直しました(2026/10/18・作業環境で、リンクから来たときに cookie を付けて元の URL へ戻ること・形の違う値は出さないことを確かめています)。
サンクスページに成果用の通信コードをショートコードで表示させる
[echo_affiliate_html]
にて記事編集ページからショートコードを設定するかPHPからショートコードを使用する場合は下記のように記述して使用します
<?php echo do_shortcode('[echo_affiliate_html]'); ?>


