原因がはっきりしないのですが、何かの拍子にWordpressでの画像編集が出来なくなってしまったので、確認した内容と対応方法を備忘録として残しておきます。
画像編集ができない
WordPress 4.5がリリースされる直前だったのですが、気が付いたらWordpress上で画像編集が出来なくなっていました。トップの画像のようにトリミングや画像回転を行う部分のプレビューが表示されず何もできない状態です。もちろん画像自体は存在し、ブログで表示するのには問題はありません。そもそもこの編集画面でも左側にはプレビュー表示出てるし。
できなくなったタイミングがわからない
画像編集が行えなくなったタイミングがはっきりないのですが、気が付く少し前に使用しているMySQLを5.0系から5.5系に変更しています。ひょっとしたらそれが影響したのかもしれません。
ネットで解決策を探すもヒットせず
とりあえずネットで解決策を探してみましたが、これはというものが見つかりませんでした。ひとまず見つかったものとしては下記のようなのも。
functions.phpの記述ミス
<?php ~ ?>
<?php ~ ?>
このように空白があるとダメで、
<?php ~ ?>
<?php ~ ?>
これなら大丈夫というもの。Wordpressの有名なバグのようです。ただ今回は問題なく、テーマを変えても改善しませんでした。
プラグインが悪さをしている
プラグインを1つずつ外したり、すべてのプラグインを外したりしても変わりませんでした。
GDライブラリが入っていない。
画像編集の表示はGDを利用しているそうで、これが利用できないと表示されないとのこと。しかし、phpinfo()で確認したらちゃんと入ってました。
テストサイトで環境を再現したら表示できる
このサイト、同じサーバ上に別ドメインで同じ環境を再現しているテスト用のサイトがあるのですが(その割に本番環境で直接修正することが多いですが……)、そちらでデータベースとテーマファイルなどを復元したところ、問題なく編集が可能でした。
こうなってしまうと、テーマやデータベースの問題ではないのかなぁっという気もしますが、手を出せない部分なのでお手上げです。
WordPressのコアファイルを修正して回復
サイトのバックアップをとって一度既存環境を削除しようかとも思っていたのですが、WordPressのフォーラムにあった情報を試したところ、編集ができるようになりました。
wordpressのwp-includes/class-wp-image-editor-gd.phpに下記の一文を追加するというものです。
public function stream( $mime_type = null ) {
list( $filename, $extension, $mime_type ) = $this->get_output_format( null, $mime_type );
while (@ob_end_clean()); /* この行を追加 */
switch ( $mime_type ) {
case 'image/png':
header( 'Content-Type: image/png' );
return imagepng( $this->image );
case 'image/gif':
header( 'Content-Type: image/gif' );
return imagegif( $this->image );
default:
header( 'Content-Type: image/jpeg' );
return imagejpeg( $this->image, null, $this->get_quality() );
}
}
ob_end_clean()
は出力バッファをクリアするという関数のようです。
これを追加したところ、画像編集が可能になりました。
コアファイルを修正しているので、バージョンアップでもとに戻ってしまいますが、暫定処置ということで。