読者です 読者をやめる 読者になる 読者になる

まちいろエンジニアブログ

南池袋のWebサービス開発会社、株式会社まちいろのエンジニアブログです。

WordPressでsetcookieを使う方法

こんにちは! まちいろの日高です。
WordPressを扱うようになって早3年が経ちました…
いろいろありました。未だにGoogle先生に聞きながらコーディングをする毎日です。

今回はWordPressでsetcookieを使う方法についてまとめてみます。
PHPテンプレートの中でsetcookie書くだけでしょ…? いえいえ… 大変なんです。

 setcookie()の掟

PHPのsetcookie関数は

html や head タグはもちろん 空白も含め、あらゆる出力よりも前にこの関数をコールするようにしなければなりません。
PHP: setcookie - Manual

というルールがあります。何よりも先にsetcookie()を書きなさいね!ということです。
WordPressテンプレートPHP内にsetcookie()を記載した際も、こんなエラーが表示されました。

Warning: Cannot modify header information - headers already sent by …


header.phpの一番上に記載しても同じエラーが消えず
エラー箇所がWordPressのコアPHPだったので、とても困りました…

 WordPressでsetcookie()を使うには…?

WordPressでsetcookieを使いたい場合は、htmlタグより前にsetcookieを差し込んでしまえばよいということです。

function.phpでadd_actionを使います。

/*-----------------------------------------------
WordPressでsetcookieを使う
------------------------------------------------*/
add_action( 'wp_headers', 'my_setcookie');
 
function my_setcookie() {
    if (!isset($_COOKIE["sample"])):
        setcookie("sample","sample_value",0,"/");
    endif;
}


wp_headersにフックすることでエラーも発生せず、無事Cookieを仕込むことができました。

 まとめ

テンプレートPHP中でsetcookie()を呼び出し、
エラーが出る場合はfunction.php中でadd_actionすることで解決できました。
wp_headではなく、wp_headersにフックすることをお勧めします。