web-dev-qa-db-ja.com

変数クエリ文字列をキャップして、それをWordpressサイトのすべてのURLに追加する方法

私はさまざまなプロモーションコードのクエリ文字列を含む人々がそこに送られるサイトを持っています(それは常に変化します)、すなわちwww.example.com/?source=emailad

クエリ文字列をどのように取得してから、サイト内のすべてのURLに追加するのですか。

1時間検索したところ、クエリ文字列を取得する方法と、既知の値をhrefに追加する方法がわかったが、未知の文字列を取得して追加する方法は見つからなかった。私はただからすべてをキャプチャする必要がありますか?文字列が何であるかに関係なく、onにしてURLに追加します。

助けてくれてありがとう!

2
adrian collins

$_GETグローバルはすべてのクエリ文字列エントリを格納します、あなたはそれを使うことができるはずです。それらをURLに追加することに関しては、投稿/ページコンテンツ内のリンクを更新するためのpost_contentフィルタへのフック、およびさまざまなパーマリンクフィルタ上のフック(例えばpage_linkpost_linkなど)を追加することができます。

個人的には、フィルタのアプローチでは、サイト上のすべてのリンクを確実に網羅するために多くの作業が必要になります。代わりにjavascriptを使用してページロード時にそれらすべてを更新することをお勧めします。これがjQueryでできることです

$('a[href]').each(function(){
    var href = $(this).attr('href');

    if(href.indexOf('?') !== -1){
        // Query string exists, append current query string
        href += '&' + location.search.replace(/^\?/, '');
    }else{
        // No query string yet, add it
        href += location.search;
    }

    $(this).attr('href', href);
});

location.searchには、ページのクエリ文字列が含まれています。この関数は見つけたリンクをすべて更新するので、あなたのサイトに関連するリンクのみをカバーするようにそれを改良したいかもしれません(this.hrefがあなたのサイトのホームURLで始まっているかどうかテストしてください)。

ページの読み込み後に作成される可能性のあるリンクがある場合は、それを起動する前にhref属性を置き換えるclickイベントに修正する必要があります。

なぜこれが必要なのかよくわかりませんが、目的によっては、データを$_SESSIONに格納するカスタムコードを用意して、電子メールでサイトにアクセスしたことを覚えておく方が簡単な場合があります。クエリ文字列がどこにでも保存されている。

if(isset($_SESSION['source'])){
    $_SESSION['was_referred'] = true;
}
if(isset($_SESSION['was_referred'])){
    // do stuff
}
1
Doug Wollison