WordPressマルチサイト化でサブディレクトリが選択できない時

2022年6月5日

前回、WordPressのマルチサイト化(サブディレクトリ型)の手順を一から記事を書いたんですが、

サブディレクトリ型が選択できない時の対処法と、失敗談にフォーカスして書いてみたいと思います。

色々試してみて結果的に、

WordPressを「サブディレクトリ型」のマルチサイトにしたいけど、

「サブドメイン型」しか選択できずに、「サブディレクトリ型が選択できない」時の一番簡単な対処法は、

「funcitons.php」の編集でした。

関連記事
WordPressをサブディレクトリ型で多言語マルチサイト化する
WordPressマルチサイト化でサブディレクトリが選択できない時
WordPress マルチサイトの削除
WordPress マルチサイト zip形式のファイルがアップロードできない
WordPress マルチサイト メディア アップロードサイズが 最大1MBになってしまう
WordPress マルチサイト化 パーマリンクにblogが入ってしまう

サブディレクトリ型が選択できない時の一番簡単な対処法

WordPressマルチサイト化で、サブディレクトリ型が選択できない時は、

functions.phpに、これだけ追記する

functions.phpに下記を記述する

add_filter( 'allow_subdirectory_install',
	create_function( '', 'return true;' )
	);

これだけで解決できました。

試したことと、失敗談

WordPressをサブディレクトリ型のマルチサイト化するにあたって、なかなかうまくいかずに、

いろいろ調べて試してみたことについて

ネットでよく見かける日付更新の対処法は面倒だった

ネット検索上位のサイトのほとんどには、「データベースの日付を更新する対処法」について書かれていました。

「1か月以上前の投稿(下書き含む)データがあるとサブディレクトリ型は選択できない」ので、

「その投稿全ての日付を新しくしてしまえば良い」と説明されています。

自分自身よくわかっていなかったので、

実際その通りに試してみたんですが、

過去の投稿の日付が全部同じ日付になってしまうことはわかっていたものの、

日付をまた元に戻すのが面倒。。

具体的な方法は、SQLで公開している一ヶ月以上前の投稿の日付を新しくする、という方法でした。

このようなSQL文で、

UPDATE wp_posts SET post_date = DATE(NOW()), post_date_gmt = DATE(NOW()) WHERE post_date < DATE_SUB(NOW(), INTERVAL 1 MONTH) AND post_status = 'publish';

試してみた結果、

公開済みの投稿は日付が更新されたけど、

全部同じ日付になることはわかっていたものの、、、戻すのが大変で、

昔の下書きや、それ以前のよくわからない投稿データの日付が更新されず、うまくいきませんでした。

失敗談

それから日付の更新を何度試してみても、

「警告 : 既存の WordPress サイトネットワークを検出しました」というエラーが消えないままでした。

もしかしたら、一度「サブドメイン型」でマルチサイト化してしまったことが原因かもと思い、

マルチサイト化したときに、一度できてしまったデータベース内のテーブルを消去すれば解決できそうということが、調べながらわかってきました。

エラーメッセージの下にも、「設定手順を完了してください。新しいサイトネットワークを作成するには、サイトネットワークのデータベーステーブルを空にするか削除する必要があります。」と書いてありますし。

消去するテーブルは

  • wp_blogs
  • wp_blog_versions(WordPress 5.8.3では作られていませんでした)
  • wp_registration_log
  • wp_signups
  • wp_site
  • wp_sitemeta
  • wp_users(このテーブルは削除しなくても大丈夫でした)
  • wp2から始まるテーブル全部(記事を投稿していなければ作られていないようです)

https://wpdocs.osdn.jp/データベース構造#.E3.83.86.E3.83.BC.E3.83.96.E3.83.AB:_wp_blogs

このリンク先の「マルチサイトテーブル詳細」を参考に消すべきと思ったものを削除しました。

不要なテーブルをすべて削除したあとに、日付更新パターンで「サブディレクトリ型」のインストールができるか試したかったんですが、投稿した元の日付に戻していたのと、別の解決策を調べていたので、

一番上の方でも書いていますが、

add_filter( 'allow_subdirectory_install',
	create_function( '', 'return true;' )
	);

functions.phpにコードを追記して、無事にサブディレクトリ型マルチサイト化ができました。

マルチサイトを削除する時のことも考えておく

マルチサイト化したはいいけど、追加したサイトを削除してメインサイトだけの、

シングルサイトにどうなるのかを考えておいたほうがいいなと思いました。

マルチサイトを削除したときに、メインサイトのカテゴリーリンクや、パーマリンクが変わってしまうと大変なことにそうです。

あとは、削除するべきデータベースのテーブル、フォルダの把握もしておいたほうが良さそうですね。

“/root-path/wp-content/uploads/sites/"

試しに、追加したサイトでカテゴリと記事を新しく作ったあとに、

追加したサイトごと消してみて、残ったメインサイトがどうなるのか、

追加したサイト側で書いた記事やカテゴリはどうなるのかを見てみたほうが良さそう、

ということで、次回、それを実際に試してみようと思います。

参考にしたサイト

Luxeritas開発者の記事が一番参考になってシンプルで良いと思いました。

https://thk.kanzae.net/net/wordpress/t6762/

マルチサイト化

Posted by sei