WordPressのマルチサイトで各サイトの外観 -> メニューで追加、編集できなくなりました。
原因はCategory Order and Taxonomy Terms Orderプラグイン。マルチサイトでのプラグイン有効化にありました。
プラグインがマルチサイトに対応しているかがポイント。
原因の詳細とその対処方法です。
サブサイトのメニュー編集がおかしい ???
サブサイトのテーマでメニューを編集しようと、いつも通りにメニューを追加していきました。
ここでおかしなことが起きます。
まず、『外観 -> カスタマイズ -> メニュー』でメニューを作成しました。そして、別の画面に切り替えて再びメニュー設定画面に戻ると、さっき作成したメニューが表示されません。
設定前の状態に戻っていました。そして、『外観 -> メニュー』でメニューを新規追加してもその内容が画面に反映されません。さらに、メニューの編集ができなくなってしまいました。
よく見ると『位置の管理』タブもありません。
phpのログを見ると、データベースエラーが発生していました。
発生したデータベースエラー
WordPress database error Unknown column 't.term_order' in 'order clause' for query SELECT t.*, tt. * FROM wp_2_terms AS t INNER JOIN wp_2_term_taxonomy AS tt ON t.term_id = tt.term_id WHERE tt.taxonomy IN ('nav_menu') AND t.name IN ('●●●') ORDER BY t.term_order ASC LIMIT 1 made by include('wp-blog-header.php'), include( 'wp-load.php'), include('/●●●/wp-config.php'), include('wp-settings.php'), do_action('wp_loaded'), WP_Hoo k->do_action, WP_Hook->apply_filters, WP_Customize_Manager->wp_loaded, do_action('customize_register'), WP_Hook->do_acti on, WP_Hook->apply_filters, WP_Customize_Nav_Menus->customize_register, wp_get_nav_menu_items, wp_get_nav_menu_object, g et_term_by, get_terms, WP_Term_Query->query, WP_Term_Query->get_terms
エラーの内容は、『wp_2_terms テーブルに term_order カラムがないから処理ができないよ?』でした。
原因はサブサイトのプラグインの有効化方法にある
ぼくはサブサイトを作成するときに、次の作業をしました。
- すべてのプラグインを停止。
- サイトネットワーク管理のプラグイン設定画面からすべてのサイトのすべてのプラグインを一括でまとめて有効化。
ここに落とし穴がありました。
Category Order and Taxonomy Terms Order プラグインは、データベースの wp_terms テーブルに term_order カラムを追加します。
しかし、さっきの方法ではサブサイトの wp_terms テーブル(wp_2_terms) にカラムが追加されませんでした。
対処方法
疑ったのは、
マルチサイトの有効化がおかしんじゃね?
データベーステーブルにカラムが追加されないということは、最初のプラグインの有効化では、DBテーブルにカラムが追加されないのでは?ということ。
そこでプラグインの有効化のやり方を変えました。
サブサイト作成時の最初のプラグインの有効化はサブサイト内で実行する
今度は、サブサイトそれぞれでプラグインを有効化しました。
- ネットワーク管理の画面から Category Order and Taxonomy Terms Order プラグインを停止。
- サブサイトのプラグイン設定画面からプラグインを有効化。
すると、wp_2_terms テーブルに term_order カラムが追加されました。
まとめ
マルチサイトで作成したサブサイトの最初のプラグイン有効化は、それぞれのサイトで行わなければならないことがあります。
その後は、ネットワーク管理のプラグインでまとめて管理して問題ありません。
今回は、ひとつのプラグインで起きましたが、データベースを変更するプラグインは、同じバグが発生することがありえます。
おそらくプラグインの有効化の処理で、サイトネットワークからの有効化処理が不十分だったのでしょう。
マルチサイトでプラグインでバグが発生するのは『WordPressあるある』なので、そんなに驚くこともないです。
プラグインによっては、マルチサイト対応あり・なしを書いているので、『お前が気をつけろ!』と言われればそれまでですが...