情報科学屋さんを目指す人のメモ

方法・手順・解説を書き残すブログ。私と同じことを繰り返さずに済むように。

WordPressアップデート後の不具合(カテゴリ関連)に効果抜群だった対策

WordPress (76)

WordPressのアップデート後に、カテゴリ周辺の機能がおかしくなってしまいました。かなり不思議なバグり方で、調べても同様の症状や効果的な解決方法が見つからなかったので、私が試してうまくいった復旧方法をシェアしておきます。

症状:カテゴリの「何か」がおかしい

WordPressをWordPress 3.8.1にアップデートした直後から、WordPressのカテゴリに関する機能について、いろいろな不具合が同時多発的に発生しました。

カテゴリ一覧ページにサブカテゴリが表示されない

管理画面のカテゴリ一覧ページ(wp-admin/edit-tags.php?taxonomy=category)にて、サブカテゴリが表示されず、親カテゴリ(最上位カテゴリ)しか表示されない状態になってしまいました。

カテゴリに関する関数が正しいデータを返さない

カテゴリ表示に独自関数を利用しているのですが、それがうまく動作していませんでした。その誤動作の原因を苦労してたどると、今まで思っていたとおりに動作していた以下の関数の動作がおかしいということがわかりました。

  • get_term_children ( $parent, 'category');
  • get_categories ( 'child_of=999' );
  • wp_list_categories ( 'echo=0&show_count=1&hide_empty=1&use_desc_for_title=0&depth=4&title_li=&include=999' );

大ざっぱに言えば、サブカテゴリの取得周りがおかしくなっていました。get_term_childrenは、正しいサブカテゴリを返してくれず(正しかったり、1つしか返さなかったり)、wp_list_categoriesは、includeに設定したカテゴリIDのうちの1つしか反映されない状態になってしまいました。

最初におかしいと気が付いたget_term_childrenは、自分でSQL文を書いて乗り切ったのですが(つまり、データベースからparent情報が消えたり取得不能になっていたわけではない)、その他のいろいろまでおかしいとわかったので、自力再実装は諦めることにしました。

試した対策(失敗)

試してダメだった対策がコチラ。

プラグインを停止する

最初に、カテゴリに大きな影響のあるCategory Orderプラグインを停止しましたが、効果が無く、続いてカテゴリに少しでも関連しそうなプラグインをすべて停止しました。それでも解決できないため、ページの表示時に大問題(500など)が発生しない範囲でプラグインを全停止しましたが、それでもさっぱり解決しませんでした。

設定をチェック

WordPressのバージョンアップに伴って設定項目が増えたのかも知れない、と設定を探してみましたが、とくに新しい設定項目や、この症状と関連しそうな設定はありませんでした。

taxonomy.phpだけ古いバージョンに戻す

WordPress全体を3.8.1から古いバージョンにダウングレードするのは最後の手段でかつ危険だったので、状態の変化を見るためにtaxonomy.phpを古いバージョンに戻してみました。

しかしこれが大変なことを引き起こし、個別記事の編集(edit-post.php)や新規投稿画面(post-new.php)にて、カテゴリの設定・編集ができない(設定項目が表示されない)、タグの設定・編集ができないという恐ろしい副作用をもたらしました。そして、結局問題があったところも一切直りませんでした。ひどくなっただけです。

成功した対策

もしかして、と試した対策が、

カテゴリーを一度新規作成する

です。適当なカテゴリの新規作成後、すぐそのカテゴリを削除するというものです

これが効果抜群で、すべての不具合が一気に直り、問題が解決しました。

内部状態がおかしいかもしれないときに、一度編集を掛ける、というのは定番の解決策パターンなので、もしかして、と思い、カテゴリの追加・削除を試してみましたわけです。このパターンはぜひ覚えておいてください。かなり役に立ちます。

ただし、原因が不明の状態でこの解決法に挑戦することは、同時にデータベースを破壊されるリスクを抱えていることになります。そのリスクを理解した上で挑戦することが大切です。WordPressの場合は、バックアップを予め取ってから作業することをおすすめします。

コメント(0)

新しいコメントを投稿