ワイヤード・パンチ

元・大阪人が、岡山の山奥でも生きていけることを証明するためのブログ。

wordpressの投稿プレビューが、2回に1回404になってしまうときの対処法。

仕事上どうしても、辞めた人が残していったサイトの修正をしなければいけないときがあります。そのサイトに発生した問題ですが、wordpressの管理画面から投稿を編集中、プレビューすると404エラーになってしまうというもの。その修正をさせられることになりました。

広告

404エラーになるまでの経緯。

管理画面に入ってみたところ、カスタム投稿タイプが複数登録されており、その全てでプレビューのエラーが発生するとのこと。試しに、複数ある投稿タイプのうちの一つを選び、その中の記事も一つ選んで編集画面に進みます。そしてプレビューを押すと…。

404ページになってしまいました。つまり、ページが見つかりません。いったんプレビューを閉じ、とりあえずもう一度プレビューします。すると…。

今度はなぜかいつもどおりプレビューが表示されます。さらにもう一度プレビューし直すと…。

また404です。以降、これが交互に繰り返されます。プレビューすると2回に1回は404になってしまうという、謎の現象が確認されました。念のため書いておくと、2回に1回というのは確率50%という意味ではありません。

なお、編集画面を開いた直後の状態から、何かしら編集したあとにプレビューすると、その場合は必ず404となりました。ただし、元の状態にすると2回に1回404に戻ります。どちらにしろ、異常な状態ですが。

問題のwordpressの構成。

複数登録されているカスタム投稿タイプですが、これはfunction.phpやプラグインなどから、自力で投稿タイプ追加のコードを書いたわけではないようです。「Custom Post Type UI」という、カスタム投稿タイプを管理画面から追加できるようにするプラグインを使用して、カスタム投稿タイプが追加されていました。

カスタム投稿タイプのみプレビューの問題が発生したものの、標準の投稿タイプではプレビューしても何も問題がなかったため、「Custom Post Type UI」に原因があると思われます。

なお、関係性は不明ですがエラーが発生するサイトの環境は、以下のとおりです。

  • wordpressのバージョン: 4.2.2
  • phpのバージョン: 5.4.27
  • Custom Post Type UIのバージョン: 1.2.4

解決方法。

Custom Post Type UIでカスタム投稿のプレビューが『お探しのページは見つかりませんでした』 | ネクストグロウ

上記サイトに解決法が記載されており、とても参考になりました。こちらでもいちおう、手順を紹介しておきます。2回に1回404という点だけは、どこのサイトを探しても見つからなかったため、なかなか解決に至らなかったのです。

管理画面のサイドバーから「CPT UI」→「Add/Edit Post Types」を選び、画面が切り替わったら上部のタブから「Edit Post Types」を選択。

Post Type Slugから該当する投稿タイプを選び、画面下へと進んだところにあるサポートから「Post Formats」のチェックを外します。再度上へ戻り、「Save Post Type」と書かれた青いボタンを押せば完了です。

これで問題なくプレビューが出せるようになるはず。

また、phpを7.0.3にアップデートし、それ以外はそのままの仮想環境でも同様のエラーに遭遇しましたが、同じ手順で解決できます。phpのバージョンの問題ではないようです。

Post Formatsって何?

標準の投稿タイプの記事編集画面を見ればすぐにわかりますが、「フォーマット」と書かれた一覧のことです。「標準」やら「アサイド」やらいろいろと入ってるところです。でも標準の投稿タイプを使うことはほとんどないので、「フォーマット」もどういうときに使えばいいのか、よくわかりません。また調べなきゃ。

しかし、「Custom Post Type UI」で追加したカスタム投稿タイプの場合、何で「フォーマット」を無効にしなければプレビューできないのか、その理由は不明です。先ほどのリンクは2014年末の記事なのでその頃から、2016年の今になっても発生しているのがわかります。さらに、3週間前には「Custom Post Type UI」がアップデートされているなど、放置されている古いプラグインというわけでも無いのですが、この不具合は直らないままです。

どうしても「フォーマット」をカスタム投稿タイプで使いたい場合、他のプラグインを探すか、自力でコードを書くか、このプラグインが直るまで待つ必要がありそうです。

余談。

修正指示としては単に「プレビューが見れない。」って言われただけなのですが、実際に調べてみると先ほどの不具合に加えて、single.phpすら作られていないという、ずさんな状態でした。(twentyシリーズの子テーマとなっており、そちらを使ってプレビューされたので、404じゃないときもバグってると思われた。)

何てむちゃくちゃなコード残してくれたんや。とは言え、ぼくもいずれ辞める予定だけど、残った人にこう思われないようにはしたい。