WordPressの記事のアフィリエイトリンクへの対処

記事作成に生成AIを使っていると、処理が重かったり、データが多い場合に、Amazonの商品リンクのトラフィックタグを削除してしまう場合が度々あったので、解決するためのコードを備忘録として記事にしました。

トラフィックコードを追加するサンプルコード

functions.phpにAmazonへのリンクがある場合にトラフィックタグIDを追加する処理を追加、すでにある場合はそのまま使うようにしており、アドレスのフォーマットは「https://www.amazon.co.jp/dp/ + ASIN」に固定して処理を行う想定にしています。

/**
* Amazon リンクに自動的にトラッキングID(アフィリエイトタグ)を追加する関数
*
* @param string $content 投稿コンテンツ
* @return string 修正されたコンテンツ
*/
function add_amazon_affiliate_tracking_id($content) {
// 自分のAmazonアフィリエイトID
$tracking_id = 'cdbk-22';

// 正規表現パターンでAmazonリンクを検出
$pattern = '/<a[^>]*href=["\']((https?:\/\/(www\.)?amazon\.co\.jp\/[^"\']*dp\/[^"\']*?))["\'][^>]*>/i';

// コンテンツからAmazonリンクを見つけて処理する
$content = preg_replace_callback($pattern, function($matches) use ($tracking_id) {
$url = $matches[1];

// すでにタグが含まれているか確認
if (strpos($url, 'tag=') !== false) {
// 別のタグがすでに存在する場合はそのままのURLを使用
return $matches[0];
}

// URLにクエリパラメータを追加する準備
$separator = (strpos($url, '?') !== false) ? '&' : '?';
$new_url = $url . $separator . 'tag=' . $tracking_id;

// 元のaタグ内のhref属性を新しいURLで置き換え
return str_replace($url, $new_url, $matches[0]);
}, $content);

return $content;
}

// コンテンツが表示される前にフィルターをフック
add_filter('the_content', 'add_amazon_affiliate_tracking_id');

// ウィジェットにも適用する場合（オプション）
add_filter('widget_text', 'add_amazon_affiliate_tracking_id');

// コメントにも適用する場合（オプション、必要に応じて有効化）
// add_filter('comment_text', 'add_amazon_affiliate_tracking_id');

P.S. 早めに気づいてよかった・・・