Wordpress ページの非表示のフォーム フィールドに 3 つのものを入れようとしています。
誰かが私のサイトのいずれかのページにアクセスする前に最後にアクセスした「オフサイト」ページ (たとえば、Google ページの可能性が高い)
彼らが私のサイトで最初に訪れたページ
フォーム ページに移動する前のサイトの最後のページ
3 つ目は簡単ですが ( を使用するだけです)、最初の 2 つでは問題が発生します。
セッション変数を使用して #1 と #2 を保存しようとしているので、すべてのページのヘッダーに次のコードがあります。
<?php
session_start();
if (! isset($_SESSION['offsite_referer'])) {
$_SESSION['offsite_referer'] = $_SERVER['HTTP_REFERER'];
}
if (! isset($_SESSION['first_page'])) {
$_SESSION['first_page'] = $_SERVER['REQUEST_URI'];
}
?>
それからさらに下に、テストコードとして(後で input type=hidden などに変更されます):
<p>offsite_referer: <?= $_SESSION['offsite_referer'] ?></p>
<p>first_page: <?= $_SESSION['first_page'] ?></p>
(FWIW、wp-config.php の上部にも session_start() があります。はい、私のサイトでは register_globals がオフになっています。)
何らかの理由で、別のサイトからのリンクを介して直接フォーム ページ (/free-reports) にアクセスしても、$_SESSION['offsite_referer']が常に私のホームページになってしまいます。同様に、first_pageは常に/ として表示されます
はい、試行の間にすべての Cookie などをクリアして、新しいセッションを強制的に作成しています。
このコードは、Wordpress 以前のサイトで正常に動作していたので、WP と関係があるとしか思えません。具体的には WP のリダイレクト (.htaccess の WP の mod_rewrite のもの) と関係があるとしか思えません。
$_SESSION['offsite_referer'] = $_SERVER['HTTP_REFERER'] を wp_get_original_referer() に変更してみましたが、効果がないようでした。
ちなみに、フォーム ページ (/free-reports/) に自分のサイトの最初のページとしてアクセスし (Cookie などをクリアした後)、$_SERVER['HTTP_REFERER'] を印刷すると、最後のオフサイト ページが正しく表示されます。 $_SESSION['offsite_referer'] はしません。
私はかなり困惑しており、自分でそれを理解しようとかなりの時間を費やしてきたので、これを解決するための助けをいただければ幸いです.