質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

パラメータ

関数やプログラム実行時に与える設定値をパラメータと呼びます。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

376閲覧

wordpressで構築しているサイト中でパラメーターを保持したまま遷移したい

100nen

総合スコア1

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

パラメータ

関数やプログラム実行時に与える設定値をパラメータと呼びます。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2023/02/24 07:42

実現したいこと

web広告(googleおよびyahoo)からきたユーザの動向をgoogle analyticsなどで正しく計測するため、wordpressで構築しているサイト中でパラメーターを保持したまま遷移したい。たとえば、掲載している広告がクリックされると、

https://example.com/?yclid=111111

のようなURLがブラウザに表示されるが、たとえばお問合せページに移動しても、

https://example.com/contact/?yclid=111111

のように、?の後ろのパラメーターを保持したままにしたいです。

前提

wordpressで作成されたサイトで、URLのパラメーターを画面遷移時に保持するためにはどのような方法がありますでしょうか?

検索してもjavascript、php、googleタグマネージャーでやるやり方など色々な方法がありどれがベストか判断しねています。

試したこと

googleタグマネージャー

https://dev.classmethod.jp/articles/keep-utm-parameters-when-going-around-in-a-website/

を参照に行いましたがうまく動いておりません。

補足情報

サイト内にメールフォームがあるため、それとバッティングしないかどうかが不安なのと、セキュリティ的に大丈夫な方法を知りたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

PHP などのサーバサイドスクリプトでクエリ文字列を操作するのは面倒なので、JavaScript で処理するのがよいでしょう。

それにしても参照された classmethod の記事にある JavaScript は2022年に書かれたとは思えないコードですね。

js

1(function() { 2 'use strict'; 3 4 class CascadingQueries { 5 // ['example.com'] or null, if null then any domains are targeted. 6 static targetDomains = null; 7 // ['foo', 'bar'] or null, if null then any queries are accepted. 8 static targetQueries = null; 9 10 static main() { 11 delegateEvent('a[href]', 'click', (evt, anchor) => { 12 const url = anchor.href; 13 if (url === '') return; 14 15 if (this.isTargetUrl(url)) { 16 anchor.href = this.mergeUrlQueries(url, document.URL); 17 } 18 }); 19 } 20 21 static isTargetUrl(url) { 22 if (!Array.isArray(this.targetDomains)) return true; 23 const urlObject = new URL(url); 24 const hostname = urlObject.hostname; 25 return this.targetDomains.includes(hostname); 26 } 27 28 static isTargetQuery(key) { 29 if (!Array.isArray(this.targetQueries)) return true; 30 if (this.targetQueries.includes(key)) return true; 31 // if targetQuery is `foo` and key is `foo[...]` 32 if (this.targetQueries.includes(key.replace(/\[[^\]]*\]$/, ''))) return true; 33 return false; 34 } 35 36 static getQueryParams(queriesUrl) { 37 let params = null; 38 try { 39 params = new URL(queriesUrl).searchParams; 40 } 41 catch (e) { 42 params = new URLSearchParams(queriesUrl.replace(/^\?/, '')); 43 } 44 return params; 45 } 46 47 static mergeUrlQueries(url, ...queries) { 48 const urlObject = new URL(url); 49 const params = urlObject.searchParams; 50 for (const query of queries) { 51 for (const [key, value] of this.getQueryParams(query)) { 52 if (!this.isTargetQuery(key)) continue; 53 // if key is `foo[]` or `foo[...]` 54 if (/\[[^\]]*\]$/.test(key)) { 55 if (!params.getAll(key).includes(value)) { 56 params.append(key, value); 57 } 58 } 59 // if key is `simpleKey` 60 else { 61 if (!params.has(key)) { 62 params.set(key, value); 63 } 64 } 65 } 66 } 67 return urlObject.href; 68 } 69 } 70 71 function delegateEvent(selector, type, listener, options) { 72 if (options == null) options = false; 73 document.addEventListener(type, evt => { 74 for (let elem = evt.target; elem && elem !== document; elem = elem.parentNode) { 75 if (elem.matches(selector)) return listener.call(elem, evt, elem); 76 } 77 }, options); 78 } 79 80 CascadingQueries.main(); 81}());

投稿2023/02/24 13:19

arcxor

総合スコア2859

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

100nen

2023/02/26 03:33

プログラミングは不勉強のため、とても助かりました。chatGPTの力も借りながらやってみます。ご丁寧にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問