WordPressを初めて丸一年が経つわけですが、これまで2回ほどちょっとヤバい不具合を抱えたことがあります。

1回目は、ブログ始めて2週間で下記のような画面がいきなり出てきて詰んだ話です。

詳細はこちらの記事を参照。

むやみやたらにプラグインを乱用すると、Wordpressのバージョンによっては修復不能、もしくはそれに準ずる不具合が自サイトを襲うことをブログ始めたてに知ることができたので、無駄ではなかったかなと思っています。

そして2回目の不具合はまさに今。前回のように管理画面に行き着くことができないわけではなく、編集画面にバグが食い込んでしまっているだけだったのが不幸中の幸いです。

具体的な症状

主に編集画面に不具合が掛かっているようで識別できた分で大きく4点、それまでとは異なる挙動が発生。

編集画面の「表示オプション」「ヘルプ」がクリックできない

デフォルト設定ならば編集画面の右上にこのようなボタンがあるはずです。これらが押せなくなりました。

表示オプションをクリックしたら、ボックス内のオプションON/OFFを一気に切り替えることができますし、最大行表示エディターと集中執筆モードを有効化させるのもここでできます。

ヘルプは使わないので特に問題ありませんが、表示オプションと横並びになっているためか同じようにクリックすることができません。

集中執筆モードの消失

通常集中執筆モードは上記の表示オプションで有効/無効を調整でき、編集画面上部のこのマークをクリックすれば集中執筆モードに切り替わります。

それが不具合発生以降、このボタンが消滅し、集中執筆モードにならないばかりか、記事内のエフェクトを設定できる固定フィードが固定されずスクロールしたら上に流れていってしまいます。

テキスト表示、ビジュアル表示の切り替えができない

集中執筆モード切り替えボタンの上部にある「ビジュアルモード」「テキストモード」をクリックできません。

管理オプション/ヘルプと同じく、押しても「なにもおこらなかった状態」です。

メディアの追加ができず、写真のアップロードができない

「メディアを追加」から写真及び動画をダウンロードできますが、これもクリックできません。

すでにダウンロードされているメディアに関しては記事内に投下できるのですが、新規で追加することができなくなりました。

記事全体の空白が圧縮される

ここまでは編集画面上の各ボタンが押せない、メディアを追加できないなどのハード面の話でしたが、記事自体にも悪さをしていることを確認。行間、余白が圧縮されて、改行なしの文章になってしまいます。

その状態で更新しない限り、表示画面には反映されませんが、間違って更新してしまったら3000文字改行なしの超絶読みにくい記事の完成です笑 また文字数がカウントされるのにどれだけ更新してもゼロのままです。

本来このように改行されているはずなのに、

編集画面上は下記のように改行が削除され、圧縮されてしまっています。

新規投稿だとこれらの不具合は見当たらない

ここまで不具合が確認されたのは既存記事の編集に限定されていました。

新規投稿から編集画面を開いた場合、表示オプション・ヘルプは開きますし、集中執筆モードも切り替え可能。テキスト表示・ビジュアル表示も切り替えが働きますし、写真のアップロードも問題なし。文字数もしっかりカウントされます。

新規作成で一旦下書きに格納した記事を編集しようとすると、再び不具合が発生する流れで、リライトにべらぼうな時間を要求される状態に陥っています。

また編集する時でも、文字数が1000文字以下であれば問題ない場合があることを何度か確認できました。1000文字以下でも不具合状態であることもあり、条件が全く分かりません。

原因

WordPressは度々バージョンアップしているので、その時々の環境によって不具合が発生するというのはよく聞く話です。私自身も一度ブログ全体を修復不能レベルで吹き飛ばした経験があるのでよく分かるのですが、何もないところに不具合は起きませんし、必ず原因が必ずあるはず。何が要因かを突き止めるために、不具合発生前後で思い当たる節を考えてみます。

サイトテーマの変更

WordPress運営における大工事。サイト全体のデザイン変更です。

不具合発生前にテーマをMAGからDIVERに変更しており、DIVERに施されている設定が既に登録されているプラグインと相性が悪い可能性があります。

しかし、DIVERに変更した直後はそれまでと変わらず特に不具合は見られず、DIVERに変えてから5日間後に上記の不具合がまとめて出てきたので直接の関連性は薄いハズ。

一部の古い記事でAMPを有効化

DIVERでは記事ごとにAMP設定を施すことが可能で、公開設定ボックスでチェックを入れると自動でAMP化してくれる優れものです。

AMPを有効にするとモバイルページでの表示速度が爆速になり、ユーザーへの利便性が高めることが期待できるため、当サイトの中でも特にアクセスの多い記事の一部を実験的にAMP化してみました。

プラグインの更新

以前ブログを吹き飛ばした時の原因が「相性の悪いプラグインを何も考えず追加したことだった」ので、それ以降プラグインの追加・更新は最新の注意を払うようにしています。

プラグインを更新するとしても、「その時点のWordpressと互換性がある時」に限定し、更新しても致命的なバグが発生しないことが確認できなければ更新せず放置が基本です。

更新できるプラグインが溜まってきたので、サイトテーマをDIVERに変更したタイミングで問題なさそうな下記のプラグインをまとめて更新しました。

・Category Posts Widget
・Table of Contents Plus
・TinyMCE Advanced
・WP-PostViews

使っていないプラグインをまとめて停止

上記更新に合わせて、使っていないプラグインをまとめて停止しました。

相性の良し悪しもありますし、使っていないプラグインは停止しておいた方が良いと思ってのことです。

DIVERにはSEO関連、吹き出しなどの編集などの機能は標準的に搭載されており不要と判断。

・Yoast SEO
・WPtouch Mobile Plugin
・TinyMCE Advanced
・Imsanity

原因特定

何が不具合を引き起こしているのかしらみ潰しに試していくしかありません。

サイトテーマを戻すのは最後の手段

サイトテーマ変更

これに関しては、サイトテーマを変えたからと言って編集画面にピンポイントで不具合を引き起こすものとも考えられず、もし不具合が起きるならば管理画面ではなく実際の表示ページのレイアウトが崩れるだとか、ウィジェットが一部機能しないとか、そのような話になると思います。

DIVERに変更する際、それまでのレイアウトを一新するためにかなりの時間を要したため、一度MAGに戻して再設定は極力避けたいところ。MAGに戻したところで編集画面が変わらなければ意味がありませんし、あくまで最後の手段としてサイトテーマを戻すことを検討。

AMP有効のメリットは正直実感なし

AMPを有効化
DIVERではAMP有効をワンクリックで行えるので、実験的にいくつかの記事をAMP対応してみましたが、正直のところAMPを設定したからと言ってサイト全体のアクセスが上がるわけでもありませんし、表示位置が上位に来るわけでもありません。期間が短すぎるので一概に判断することができませんが、古い記事をAMP化するとアドレスが変わってしまうことで記事に対する評価が分散してしまい、結果的にGoogleからの評価が下がってしまうことも懸念されます。
実験的に試してみましたが、新規投稿の記事に切り替えて、古い記事のAMP設定は一旦解除してみます。

プラグインは互換性ありなら問題なし

プラグインの更新
本来プラグイン更新は機能追加の側面もあれど、Wordpressのバージョンに合わせてデバッグすることが目的です。そのままのプラグイン状態では新しいWordpressに適応できないから更新するものなので、「バージョンさえ合っている」=「互換性がある」ならば問題にはならないと思われます。
実際プラグインを古いバージョンに戻したら問題が解決した、という例もありますが、それは更新したプラグインが「そのWordpressバージョンと互換性がなかっただけ」なのではないでしょうか。
今回の事例だと確実に互換性があることを確認しているので、プラグインの更新に起因した不具合ではないと判断します。

重要プラグインはマークしておくべき

使っていないプラグイン停止
利用していないプラグインでも重要なプラグインがいくつかあります。自分で追加ダウンロードしたプラグインは互換性とサイトテーマとの相性次第で良い方にも悪い方にも働きますが、止めちゃいけないプラグインも中には存在するはず。
プラグインの相性で様々なバグが発生するのは周知の事実ですから、今回の編集画面上の不具合もプラグイン絡みが非常にくさい。
とりあえず現在ダウンロードしているプラグインの中で特に重要なプラグインを洗い出してみます。

使用プラグイン

現在私が有効化しているプラグインは下記の通り。少し見づらいかもしれませんが8種類だけです。

一つ一つ概要を説明すると

Akismet Anti-Spam (アンチスパム)

Akismet Anti-Spam
・自動的にすべてのコメントをチェックし、スパムのように見えるものをフィルターします。
・各コメントにはステータス履歴があるため、どのコメントが Akismet に捕獲または承認されたのかのかを簡単に見ることができます。また、モデレーターによってスパム・非スパム判定されたものも分かります。
・非表示または誤解を招くリンクを明らかにするため、コメントの本文にURLを表示
・モデレーターは各ユーザーの承認コメント数を表示できます。
・最悪のスパムをしっかりブロックすることで、ディスクスペースを節約してサイトをスピードアップできる破棄機能。

Google XML Sitemaps

Google XML Sitemaps
最新のサイトマップを自動作成と出力。

Jetpack by WordPress.com

Jetpack by WordPress.com
直感的で強力なカスタマイズツール
容量無制限かつ高速の画像および動画コンテンツ配信ネットワーク
モバイルエクスペリエンスを高速化する画像の遅延読み込み
公式 WordPress モバイルアプリとの統合
などなど超多機能。とりあえず押さえておいて間違いないプラグイン

Table of Contents Plus

Table of Contents Plus
目次を自動で生成するプラグインです。
全てのページとカテゴリーリストを表示するサイトマップも出力することも可能。

WebSub/PubSubHubbub

WebSub/PubSubHubbub
記事を投稿したタイミングで検索エンジンに素早くインデックスさせることができるプラグインです。
記事を投稿と同時に検索エンジンインデックスさせることで、記事のコピー、丸パクリを牽制させる効果があります。

WP Multibyte Patch

WP Multibyte Patch
ダッシュボードの「コメント」、「下書き」でマルチバイト文字列が正しく抜粋されるようにします。
投稿エディタのリンク挿入機能で、既存コンテンツの内部リンクを検索する際のインクリメンタルサーチを2文字から動作させます。
日本語フォントの表示にあわせ、管理パネルのイタリック体を標準に変えます。
日本語を含む多くのエンコーディングのデータが破壊される問題を修正します。
検索の際に全角スペースを区切り文字として認識させます。また、検索文字列内の重複するスペースを取り除きます。
言語設定が ja の場合、デフォルトで文字列カウント方式の設定を「文字数ベース」に固定します。
「文字数ベース」抜粋の補助機能を提供します。抜粋の最大文字数と more 文字列を設定ファイルより変更できます。

WP User Avatar

WP User Avatar
登録ページにアバターをアップロードできるようにします。
メディアに格納された写真を使用することが可能になります。

WP-PostViews

WP-PostViews
記事の閲覧回数のカウントが可能になります。
閲覧回数を元に人気のある記事のランキングをサイドバーに設置できるプラグイン。

WP Multibyte Patchが機能していないのでは…?

それぞれのプラグインの役割を確認すると、最初から設定されている"WP Multibyte Patch"が上手く機能していないのではないかという疑惑が湧いてきました。

このプラグインは元々海外製のWordpressを日本語版にした時に発生する様々な不具合を強制的に修正して出力してくれる必須プラグインなのですが、これが機能していないと編集画面上で様々なバグを引き起こします。

このプラグインは常時ONにしており一度も解除したことがないのですが、もしかしたらサイトテーマをDIVERに変更した際に機能不全に陥った可能性が高そうな感じ。テーマ変更直後は問題ありませんでしたが、AMP化やらウィジェットをいじったり、Google AnalyticsやSearch Consoleの再設定など、テーマをいじっていく中で日本語版Wordpressの核となるWP Multibyte Patchが有効化状態でも特定条件においては「オレ働きたくねぇから」と仕事をサボるようになったのでは…?

試しに一旦解除して再度ONしても状況は変わらなかったものの、アンインストールしてダウンロードし直したら問題となっている不具合が綺麗さっぱりなくなりました。

しばらく様子を見てみますが、編集・表示に関わる不具合はWP Multibyte Patchが担当しているので、私のように記事更新する際にいつもと違う挙動をするようになったならば、真っ先に確認するとよいでしょう。