WordPress の子テーマを作成したときの注意点

この記事は公開されてから時間が経っています

今日、自分の管理している、さくらインターネットのレンタルサーバーの WordPress の子テーマを SSL 化していたんですが、単純なところで引っかかってしまい、心労を重ねてしまいました

心が折れそうになりましたので、忘れない様に書き残しておきます

で、なにが問題だったか?と言うと…

いつも通り、さくらさんのコントロールパネルで、Let’s Encrypt を申し込んで http -> https 化を行いました

そこで、WordPress の 一般設定で
WordPress アドレス (URL) と、サイトアドレス (URL) を http から https へ変更しました

そのサイトは、Twenty Seventeen の子テーマを自作してレスポンシブ化しました
それまでも、記事を 更新したりするとページが空白化したりなど、妙な挙動をしましたが、
ブラウザーの「戻る」などを利用すると問題なく継続できていましたので、面倒だな⁉と思いつつも、そのまま利用していました

で、今回、https 化した後、どうしてもログインできなくなり、半べそで原因を探りました

後で判ったのですが、最近は、面倒なので WinSCP の内蔵エディターで functions.php などを用意していたのですが、ココに落とし穴がありました!

エラーはこんな感じです
※ 赤いボーダーが、メッセージの左側に表示されます

エラー: 予期しない出力により Cookies がブロックされました。ヘルプが必要な場合はこちらのドキュメンテーションを読むか、サポートフォーラムをご利用ください。

と言う表示があり、ログインできませんでした
http へ戻しても (ログインできないので MySQL で直接修正するしか有りません)  ログインできませんので、ニッチもサッチモいきません ^^;

そこで、原因を調べるために、define(‘WP_DEBUG’, true); でデバッグモードにしたのですが、そこでやっとエラーの内容がわかりました ^^/

Warning: Cannot modify header information - headers already sent by (output started at ………… 201803/functions.php:1) in /home/XXXXXX/www/XXXXXX/wp-login.php on line 421

と言うエラーが確認出来ました
では、このエラーは?というと、header を処理する前に何か出力されるとエラーの様です
Cookie の処理前に文字が出力され、Cookie が動作しませんので先のログインできないメッセージが表示される訳です

ですが、どこで表示されているのかが判りません f^^

で、思いついたのが functions.php です
ワーニングのメッセージを最後まで確認すると、functions.php の 一行目がおかしいと表示されていますね ^^;
一行目は大概 <?php だと思いますので、エラーする余地がないですよね ^^

そこで、よく確認してみるとエンコードが、ASCII で書いておけば良いのに、なぜか UTF-8 BOM 有り になっています
(WinSCP のエディターの設定は “UTF-8” の指定で BOM の有無は設定できない様です)

この BOM 有りの UTF-8 は、文字の前にバイトオーダーマークを出力しますが、制御文字なので表示されません ^^;

これが判れば簡単で、
一端、ローカルに functions.php を持ってきて、テキストエディタで BOM 無し へ変換してあげれば問題は解決です ^^/

いやぁ~、半べそ書きながら半日過ごしてしまいました ^^b

さくらさんのレンサバは、余り関係ないかもしれませんが、
以前の記事にある様に wp_head() と wp_footer() を書き換えないと上手く行かないと言う問題も発端の一つですので、書いておきました …

教訓:UTF-8 は BOM 無しが良いみたい

はぁ、胃が痛い….

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です


The reCAPTCHA verification period has expired. Please reload the page.