■ やろうとしていること
ここ数日、「次回以降は非表示にできる警告」を外部サイトに飛ぶ際に表示させられるようにコードを組んでいます(こちらは以前に投稿した質問です)。
試行錯誤の末、「cookieの値がなければクッションページを挟む」コードを組むことにしました。
厳密には、cookieが保存されているかどうかによって引数として渡した外部URLを書き換えて表示するテンプレート(ショートコード)を作りました。
機能は以下の通りです:
0. cookieを取得。PHP関数、isset($_COOKIE[cookieの名前])で情報を取得しています。
0. もしcookieが無効・保存されていなければ、渡した外部URLを"(クッションページのURL)/?(外部URL)"と書き換えて表示。リンクをクリックすると一旦クッションページに飛ぶ様になります。
0. もしcookieが保存されていれば、渡した外部URLをそのまま表示。クリックすると直で指定したサイトに飛ぶ様になります。
また、クッションページにはcookieを保存するためのボタンを設置しました。cookieを保存するJavaScriptのコードをボタンで実行する使用です。ボタンを押すと、自サイトを更新した際に直リンクだけが表示されるようにしようと試みています。
やろうとしていることの図解です(見にくくてごめんなさい・・・):
重視しているポイントは、**「ユーザーが任意でCOOKIEを保存できる」**というところです。
■ 困っていること
0. 「初アクセス時、外部URLをクリックしたらクッションページへ飛ぶ」
0. 「クッションページでボタンを押してcookieを保存(JavaScript)」
0. 「次回アクセス時、cookieを取得(PHP)して値があれば直で外部サイトへ飛ぶ」
という流れが動作することは確認済みです。
しかし、ショートコードにして引数を渡せる様に編集を加えたらたらうまく動かなくなってしまいました・・・。cookieを保存しても、外部URLをクリックするとクッションページに移動する様になってしまいました。
以下、テンプレートのショートコードです(開発環境のfunction.phpに貼り付けてあります):
PHP
1<?php 2function rewrite_url($atts){ 3 4$ext_url = $atts[0]; //(外部URL) 5$cushion_url ="https://example-site/cushion/?$atts[0]"; 6 7if(isset($_COOKIE["external"])){ 8?> 9 10<a href=<?php print $ext_url; ?> rel="nofollow noopener" target="_blank">外部サイト直リンク</a> 11 12<?php 13} //if終わり 14 15else{ 16?> 17 18<a href="<?php print $cushion_url; ?>" rel="nofollow noopener" target="_blank">クッションページ経由</a> 19 20<?php 21} //else終わり 22} //function終わり 23 24add_shortcode('template','rewrite_url'); 25?>
以下、クッションページ側のコードです。
HTML
1 2 <p> 3 これより先は、外部サイトです。<br> 4 移動を希望しない場合は、下の「もどる」をクリックしてください。<br> 5 </p> 6 7 <button NAME="dont-show" VALUE="cookieに保存" ONCLICK="SetId('dontshow')">今後このページを表示しない</button> 8 9 <script type="text/javascript"> 10 function SetId(strNum) { 11 var name = "external"; // クッキーの名前 12 var value = strNum; // クッキーの値 13 document.cookie = name + "=" + escape(value); 14 window.alert('cookieを保存しました'); 15 } 16 </script> 17 18 <a href="<?php echo $_SERVER['QUERY_STRING']; ?>">このまま移動する</a> 19 20 <a href="javascript:history.back()">もどる</a>
どこか間違っているのでしょうか・・・?
まとまりのない質問ですみません。
なにかベターなやり方などをご存知でしたらぜひお教えください m(_ _)m
■ 補足
動作環境:Mac
Wordpressのテーマ: Luxeritas
サーバ: Mixhost
ブラウザ: Chrome(Incognito モード)
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/01/11 12:31
2022/01/11 13:11