[wp]パラメータとcookieの取得・登録で振り分け

前の記事で作り込もうとしたら躓いたので別手法を取る。

前の記事の何が問題だったか

header.phpでパラメータを取得、page.phpとかarchive.phpとかの表示・非表示はうまくいった。でも切り替える内容は定形的なもんで、だったらfooter.phpに仕込みたいなってなった。で、header.php→footer.phpはグローバル化しても変数を持っていけない。footer.php側で取得して料理しないとダメだった。

ついでに、流入元によりその後のページ遷移でも切り替えを維持したいってなって、だったらcookieに登録しなきゃねっていう。

cookieの登録は最上部でやれっていうルールがあるから従おうにも、get_headerしてる方が優先されるのか、される方が優先されるのか、諸々考えてるとめんどくなったので、全部functions.phpで済ませてやる

という感じ。

functions.php

「?utm_source=line」の有無をトリガーにする。
指定したパラメータ通りだったらcookieを「”fromLine”:”true”」で仕込む。

// urlパラメータ取得
function add_query_vars_filter($vars){
	$vars[] = 'utm_source';
	return $vars;
}
add_filter('query_vars','add_query_vars_filter');
//cookie Line流入セット
add_action( 'get_header', 'my_setcookie');
function my_setcookie() {
	if(get_query_var('utm_source') == 'line'){
		setcookie( 'fromLine', 'true', time() + 60*60*24*7,'/');
	}
}

setcookieについてはさっき知ったばっかだから下手なことは言わない。

これを活用すると、以下のif文になる。

<?php if(!(get_query_var('utm_source') == 'line' || $_COOKIE["fromLine"] == true)): ?>
<p>LINE登録しろよ</p>
<?php endif; ?>

パラメータとcookie両を指定する必要がある。cookieが発火するのは遷移または再読み込み時。

footer.phpに仕込んで動作するんで、全ページで対応するってことだわね。

以上。

余談

functions.php上で作成した変数はグローバル変数として使用できる。
やってみたら確かに使えたんだけど、上のやつとどう絡めていいかがよくわかんないので課題とする。

番外:LINEブラウザで判別

LINE上でページを開く際に使用されるブラウザはLINEのものらしく、独自のuseragentが振られている。

主要SNSアプリ内ブラウザのuserAgent比較 – Qiita

これを活用して、WPだとfunctions.phpでいい感じに設定できる。

WordPress、Lineアプリ内ブラウザの時の条件分岐 | KOSAERU

かゆいところは残る

useragentで割り振ったら勝ちかといえばそうでもない。
LINEの機能でユーザー側の任意でブラウザを指定できるようになっちゃった。

【LINE】リンクをSafariで開くようにする設定方法 | LINEの仕組み

これをやられるとまずいのが、登録募集のバナー表示切り替えをブラウザの判別でやっちゃうと無駄な煽りを表示させることになるし、非登録者でもLINEで見ちゃえばバナーは表示されない。大変宜しくない。

コメント

タイトルとURLをコピーしました