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

アイデアの甕

アイデアを放り込んでおくと甕は腐臭を発しない

Custom Post Type Permalinks(バージョン 1.5.1)の更新でエラー「Warning: Cannot modify header information - headers already sent by…」

WordPress

(※2016年4月6日現在、即日アップデートのバージョン 1.5.2で解消された模様)

 

Wordpressで運用中のウェブサイト。パーマリンクを調整するプラグイン「Custom Post Type Permalinks」更新のお知らせがあったので、特に気にも留めず(つまりはバックアップなんか気に掛けず)更新。

 

更新完了。

 

ダッシュボードに戻ってみたらば、他のプラグイン(「Google Analytics Dashboard for WP」というアクセス解析用のプラグインで、フロントエンドとしてダッシュボードにアクセス数などの情報を表示してくれる)がエラーを吐く。

 

な、なんだんねん?

 

 

とりあえず、エラー内容としてはjavascriptがエラーになってるから応答がないたら何たら。

 

プラグイン更新直後だったので、「Custom Post Type Permalinks」を一旦停止してみると正常動作。主犯確定。

 

ワードプレスのプラグイン更新で何かあったら、まずは空更新(からこうしん)して様子見というのが定石になっております。

 

bukki.hatenablog.com

 

 

というわけで、再度有効化しつつ、「設定」の「パーマリンク設定」から「Custom Post Type Permalinks」を空更新。

 

Warning: Cannot modify header information - headers already sent by (output started at (中略)/wp-content/plugins/custom-post-type-permalinks/CPTP/Module.php:1) in (中略)/wp-includes/pluggable.php on line 1228

 

どうやら「Fatal error(致死的な、重大なエラー)」ではなく、「Warning(警告)」で済んでいる模様。

 

解決策

取り敢えず、解消法を載せておきます。

 

①ダッシュボードから「プラグイン編集」画面へ

②編集するするプラグイン「Custom Post Type Permalinks」を選択

③「custom-post-type-permalinks/CPTP/Module.php」を選択

 

f:id:bukki:20160406105553p:plain

 

画面が変わります。

 

④編集画面に表示される <?php の前にスペースが入ってますので、これを削除

⑤「ファイルを更新」で編集を保存

 

f:id:bukki:20160406105555p:plain

 

以上!

 

エラーの原因

エラーの原因については、エラー文言通りなようです。詳しいことは分かりませんが。

 

Warning: Cannot modify header information - headers already sent by (output started at (中略)/wp-content/plugins/custom-post-type-permalinks/CPTP/Module.php:1) in (中略)/wp-includes/pluggable.php on line 1228

 

文言の一部を切り出してGoogle検索してみると、解決策のヒントが見えてきます。

 

kotori-blog.com

 

あちなみに、「Module.php:1」は「Module.phpファイルの1行目」って意味らしいです。答えがここに。

 

寄り道すると、迷い込む

エラー文言の読み取りを誤るとドツボにはまる可能性も。例えば「pluggable.php on line 1228」に注目しちゃうと、

 

確かに1228行目にあるんですね。

 

header("Location: $location", true, $status);

 

ただ、こっちをいじっても解決しません。上記のように、プラグイン側のファイルをいじりましょう。

 

あと、今回の更新で「Module.php」にどんな変更があったのかな?と気になって差分を調べてみると

 

final public function init() {
$this->register();
}

 

こういうPHPで書かれたコードが追加されていることが分かります。ここでも読み違えて「え、これが原因?」とか思い、「final」も「public」も良くわからんからとググってみたらば

 

PHP: finalキーワード - Manual

 

(やべぇ、既に一切が全くわからん…)

 

オブジェクト指向プログラミング初心者は深い森の中へ迷い込むことになります。

 

ただ、これをいじってみても解決しないんですよね。

 

だって、行頭のスペースが原因なのだから。

 

それがプログラミング。それがPHP。それがWordPressなのでしょう。し、しびれるぅ!

 

ワードプレスのカスタマイズに関しては、「基礎からの…」という謳い文句に沿わずPHPをいじる「脱・初心者向け」教本で勉強しといてよかったなぁ、と何度も思ったのでオススメしておきます。

 

 

 

追記(再掲)

2016年4月6日現在、即日アップデートのバージョン 1.5.2で解消された模様