2

wordpressでCookieを設定する方法を一日中探していました。私のやり方で、(開発者ツールバーを使用して) Cookie が設定されているが、まだ機能していないことがわかりました。私は2つのファイルを持っています。最初のファイルには、別のページにリダイレクトしてCookieを設定し、別のページに戻って動作しているかどうかを確認するログインフォームが含まれています。テストされているドメインは、blog.mydomain.com のようなものです。ここにsetcookieファイルがあります:

<?php
setcookie("user_name","test",time()+3600);
?>

そして、このようにクッキーをチェックします:

if(isset($_COOKIE["user_name"])){
echo "cookie exists";
}
else{
echo "cookie doesn't exist";
}

この問題に関する多くのトピックを読みましたが、明確な答えはありませんでした。前もって感謝します

4

3 に答える 3

4

これは通常、ブラウザに出力を送信した後に Cookie を設定しようとしたときに発生します。WP で Cookie を設定するには、「init」フックを使用して init で Cookie を設定する必要があります。

function set_username_cookie() {
    if (!isset($_COOKIE['user_name'])) {
        setcookie("user_name","test",time()+3600);
    }
}
add_action( 'init', 'set_username_cookie');
于 2012-10-02T21:36:27.273 に答える
1

もう 1 つのオプションは、PHP のob_start();とを使用することob_end_flush();です。

ここで 2 つの関数に関するドキュメントを見つけることができます。

私が問題を解決した方法は、次のように html タグの開始と終了の前後に 2 つの関数を呼び出すことでした。

<?php ob_start(); ?>
<!DOCTYPE html>
<html>
  <head>
  </head>
<body>
  <?php /* Wordpress loop and other tempate code here */ ?>
</body>
</html>
<?php ob_end_flush(); ?>

私が遭遇した問題は、PHP を使用するグローバル関数を呼び出すことでしsetcookie();た。WordPress はページを段階的に処理するため、ページのヘッダーが既に送信されているため、Cookie を作成できませんでした。

PHP の出力バッファリング機能は、WordPress がページを処理する前にヘッダーを強制的に送信します。

お役に立てれば。

于 2015-10-29T21:42:52.837 に答える