Когда вся страница WordPress обновляется, код не читает cookie как установленный больше

Что не так с этим кодом?

Код обнаруживает, что пользователь приходит с ожидаемого сайта реферала и добавляет файл cookie, но при обновлении страницы код не видит файл cookie и запускает код! Isset и снова создает cookie. не знаю почему. есть идеи?

Просто пытаясь обеспечить, чтобы, если он был правильным сайтом реферала, затем создайте файл cookie, чтобы этот пользователь мог использовать весь сайт, так как у него есть файл cookie, и доступ теперь находится в файле cookie, а не http_referrer.

ниже код находится в functions.php в дочерней теме и выполняется под init hook, поэтому он запускается на каждой странице. Это то, что мне сказали, было лучше всего.

add_action('init', 'bbb_referral_check' ); function bbb_referral_check() { if (!is_admin()){ $allowed_host = 'bbb.com'; $theurl = $_SERVER['HTTP_REFERER']; //$theurl = wp_get_referrer(); $host = parse_url($theurl, PHP_URL_HOST); $ishost = false; if (strpos($host, $allowed_host) !== false) { $ishost = true; } $javascript_ouput = "<script>console.log('Debug Info: " .$ishost. "'); </script>"; echo $javascript_ouput; //echo "The allowed host: ".$allowed_host; exit; if ( !isset($_COOKIE["bbb-referral"])) { $javascript_ouput = "<script>console.log('Debug Info cookie not set: ');</script>"; echo $javascript_ouput; if ($ishost) { $javascript_ouput = "<script>console.log('Debug Info is host match: " .$host. "');</script>"; echo $javascript_ouput; setcookie( "bbb-referral", "bbb-referral", time() + 1800, COOKIEPATH, COOKIE_DOMAIN); } else { $javascript_ouput = "<script>console.log('Debug Info not host match: " .$host. "');</script>"; echo $javascript_ouput; //Redirect wp_redirect('http://bbb.com' ); exit; } }//isset $javascript_ouput = "<script>console.log('Debug Info cookie is set: ');</script>"; echo $javascript_ouput; }//admin }//function 

Solutions Collecting From Web of "Когда вся страница WordPress обновляется, код не читает cookie как установленный больше"

Вы не можете использовать setcookie() после того, как вы уже начали выводить материал в тело (в этом случае ваша отладка javascript, но, возможно, что-то еще вне этой функции).

Вы подавляете предупреждения PHP? Он должен жаловаться на «Не удается отправить заголовки, уже отправленные заголовки» и сообщить, где был запущен выход.

Чтобы избавиться от проблемы, связанной с javascript в этой функции, вы можете добавить теги скриптов к переменной и повторить их за один раз после того, как вы установили файл cookie (или перенаправили). Что-то вроде этого (не проверено, может содержать опечатки).

 function bbb_referral_check() { $javascript_ouput = ""; if (!is_admin()){ $allowed_host = 'bbb.com'; $theurl = $_SERVER['HTTP_REFERER']; //$theurl = wp_get_referrer(); $host = parse_url($theurl, PHP_URL_HOST); $ishost = false; if (strpos($host, $allowed_host) !== false) { $ishost = true; } $javascript_ouput .= "<script>console.log('Debug Info: " .$ishost. "');</script>"; //echo "The allowed host: ".$allowed_host; exit; if ( !isset($_COOKIE["bbb-referral"])) { $javascript_ouput .= "<script>console.log('Debug Info cookie not set: ');</script>"; if ($ishost) { $javascript_ouput .= "<script>console.log('Debug Info is host match: " . $host . "');</script>"; setcookie( "bbb-referral", "bbb-referral", time() + 1800, COOKIEPATH, COOKIE_DOMAIN); } else { $javascript_ouput .= "<script>console.log('Debug Info not host match: " .$host. "');</script>"; //Redirect wp_redirect('http://bbb.com' ); exit; } }//isset $javascript_ouput .= "<script>console.log('Debug Info cookie is set: ');</script>"; }//admin echo $javascript_ouput; }