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のバージョンが合っていなかったためだったようです。(バージョンが合ってないと、なぜダメなのか…はわからず仕舞いだけど)

Share on FacebookTweet about this on TwitterShare on Google+

関連記事

WordPressの Embedカードのリンクを別ウィンドウで開く(PCのみ。スマホ・タブレットはそのまま)

WordPressの Embedカード(ブログカード)のリンクは、デフォルトでは同ウィンドウで開くようになっていますが、これを別ウィンドウ(別タブ)で開くように [記事を読む]

WordPressの Embedカードのスタイルを編集する方法2つ

前回の記事で、WordPress 4.5 の Embedカード(ブログカード)の「テンプレートの構成」や「HTML要素のクラス名」などを調べました。これを元に、 [記事を読む]

WordPress4.5で Embedカードの PHPファイルの構造がだいぶ変わったみたい

前回から WordPressの Embedカード(ブログカード)について調べたことをメモっています。 今回は Embedカードの PHPファイルの構造について [記事を読む]

Leave a Comment

入力エリアすべてが必須項目です。メールアドレスが公開されることはありません。

内容をご確認の上、送信してください。

^