WordPressで特定の記事の本文が表示されなくなった原因がたった1つの文字列だった件
先日、このブログの特定の投稿の「本文」だけが表示されないという事態になりました。
記事は「WordPressでOGP設定。Facebook, Twitter Cardsもプラグイン無しでOK!」です。
他のページは問題ないのですが、
この記事だけが、本文を表示しない状態でした。
↑「はてなブックマーク」のアイコンが浮いているのは、手動CSSで仕込んでいるから。他のシェアボタンはプラグイン「Simple Share Buttons Adder」を使っていますが表示されていません。
いや〜もう、びっくり仰天です。
このエラーを発見する前にやっていたことといえば、
1:WordPressのバージョンをアップ(4.2.9 → 4.5.3)
2:プラグインを5つほど更新
3:wp_head() で書き出すコードのうち不要なモノを削除(function.phpを編集)
最後の「3」のせいかなぁと思い、すぐ元に戻してみましたが変わりませんでした。
この記事は1年以上前に投稿していますし、つい3週間ほど前にもコメントの返信をしています。その時は当然まともに表示されていました。
この時、確かプラグイン「SyntaxHighlighter Evolved」を 3.2.1 に更新しています。その後<pre>要素がちゃんと表示していることを確認してますし。
それに「いつから」本文が表示されていなかったか不明です。少なくとも3週間前に見た時は普通だったとしか。
原因がサッパリわからず、自分の環境だけかもしれない、時間が経てば表示するかもと、一旦放置することにしました。が、翌日も同じ症状でした。
原因究明にすっかり「ハマった」過程を…メモっておきます↓
(一応解決はしたけど原因はわからず…なんですけどね)
2016年8月15日追記です。
サーバのPHPのバージョンが古すぎた のが原因だったみたい。
記事後部にこの件を追加↓しました。
症状の確認 → <?php the_content();?> のエラー
この記事、トップページやアーカイブページでは、ちゃんと「本文」部分が抜粋として表示されています。ということは、データベース上には記事はあるということ。
ですので、single.php内の <?php the_content();?> だけのエラーだと思われます。
解せないことに、ローカルのサーバ(MAMP)では問題なく本文が表示されるんです。
MAMPでは、本サーバと同じように、WordPressのバージョンを4.5.3にして、プラグインも更新しています。function.phpでの編集もまったく同じようにしています。でも表示される。なんじゃこれ?
とにかく、本サーバ上のWordPressの <?php the_content();?> で何かが衝突しているようです。
WordPressフォーラム検索 → 変数かな?
WordPress.orgのフォーラムで検索してみたところ、これかな?と思う質問がありました。
「本日投稿した本文が表示されなくなった」
ここでは「ループ中に$pageという変数名を使ってしまっていたのが原因」ということでした。
私の該当記事でも、OGPをWordPressに設置するためのコードを掲載しているので、頭に「$(ドルマーク)」が付いた変数をたくさん書いています。
しかし、これがすべて<pre>〜</pre>の中だけなんですよね。
それでもエラーになるのかなぁ?(だったら<pre>要素の意味無いじゃん)
<pre>〜</pre>をトル → 当たり!
ホントに変数が原因なのか知るために <pre>〜</pre>のブロックを削除してみました。
すると大当たり! 本文部分が表示されました。
犯人は <pre>〜</pre>の中にいます。
プラグインを疑う → 関係無さそう
で、<pre>要素の内容を装飾するプラグイン「SyntaxHighlighter Evolved」が原因かと思いました。が、検索しても誰もそんなエラーに会ってないみたい。
そもそも<pre>要素内のコードを装飾するだけのモノなので、HTMLで出力するときにしか使ってないはずです。
一応、プラグインを入れなおしたり、プラグイン設定でバージョンを「2」か「3」か選べるので、「2」にしてみたりしましたが、変化ありませんでした。
そして、<pre>と</pre>戻し、中に適当に文字列を打ってプレビューすると、SyntaxHighlighterが効いた状態でちゃんと本文が表示されます。これでこのプラグインの犯人説は消えました。
変数の表示をトル → ダメだった。変数じゃない!
やっぱり変数を使ってるのがダメなのかな〜と、ちょっと愚策だけど、試しに半角の「$(ドルマーク)」を全角の「$」に変えてみました。
これでイケたら、このまま表示して「$は全角になっていますので半角に変えてください」なんて注釈を入れようかとかセコいことを考えていました。
でもダメだった! 全角の「$」に変えても記事本文全体が表示されないのは変わりません。
他にも「\(バックスラッシュ)」を全角に変えてみるなど、やってみましたがダメ。
てっきり本文中のPHP関連の記述が影響しているんと思っていましたが、どうも違うようです。
そもそもこのブログは、他の記事でもさんざんPHPについてメモっているので、他の記事が変数書いても表示されて、この記事だけがダメなんてあるわけないか。
こうなったら1行ずつ試す! → 犯人を発見
というわけで<pre>〜</pre>の中身を1行ずつ戻してプレビューするという地味な作業を開始w
1行目から順に入れていって、ちゃんと本文が表示されるのを確認し、次を試します。
ついに24行目で
「$ogp_image = get_template_directory_uri().’/images/og-image.jpg’;」という行を入れた瞬間、本文が消えました!
この↑「og-image」部分は半角です。このフレーズを半角で書いたら、この記事もまたエラーで本文が消えたので、全角英数字にしています。
この24行目だけ無しにして、これ以降を入れても、ちゃんと本文はプレビューしました。
で、今度はこの24行目の文字列を1ブロックずつ入れて、犯人探しです。
ってもう犯人言っちゃってますけどねw。
「og-image」という文字列が原因。なにそれ?
結局「og-image.jpg」を「○○○.jpg」に変えると、記事本文が表示されるようになりました。
それにしても、どうして「og-image」という文字列が <?php the_content();?> に引っかかるのかサッパリわからない。
ここまで読んでくださった方は、原因が結局わからずモヤモヤしてるでしょうね。私もです!
とにかく今回の教訓は、
グダグダ検索してないで最初っから1行ずつ試したほうが早かったかも!
でした。
「これが原因なんじゃないの?」と お心当たりがある方は、コメントいただけますと幸いです。今後のためにも是非よろしくお願いいたします。m(_ _)m
スポンサーリンク
サーバのPHPのバージョン だったみたい
本日新しい記事をアップしたら、また本文だけが表示されない事象が起きました。
ローカル環境では大丈夫、本サーバでもプレビューでは表示できて、公開するとダメだった。
これはもう、何か特定のフレースが影響してるんじゃなく、本サーバ側の問題だと、やっと気が付きました。検索しても何もヒットしない(誰も問題にしていない)し。
で、本サーバ(私はミニバードを使っています)の管理画面をよく見てみたら、PHPのバージョンを全然アップしていなくて、5.3.3になっていました。
WordPressをインストールした去年の2月以来、そのままでした!
WordPress 4.5.3 は PHP5.6 以上が推奨になっていますので、さっそく 5.6.22にアップ。
すると、新しい記事もすんなり本文が表示され、この記事でも「og-image」というフレーズを全角にしなくても本文が表示されるように。
とにかく WordPress のバージョンと サーバのPHPのバージョンが合っていなかったためだったようです。(バージョンが合ってないと、なぜダメなのか…はわからず仕舞いだけど)
洗練されたWEBデザインのページですね。^^
私の場合、アドセンス広告のHTMLソースコードに余計な余白が入ったか
タグの記述が間違っていたかで記事の下半分が消えました。
貴殿のサイトの、お陰で修正のヒントが得られました。
有難うございました。