WordPress のマルチサイト化

WordPress をマルチサイト化しようとしてハマったのでメモ。
以下の状態と同じになってしまった。

マルチサイトの設定を行った後に、データベースのチェックと復元を要求され、
実行すると、以下のテーブルがないと言われてしまう。

wp_1_posts: Table ‘wordpress_db.wp_1_posts’ doesn’t exist
wp_1_comments: Table ‘wordpress_db.wp_1_comments’ doesn’t exist
wp_1_links: Table ‘wordpress_db.wp_1_links’ doesn’t exist
wp_1_options: Table ‘wordpress_db.wp_1_options’ doesn’t exist
wp_1_postmeta: Table ‘wordpress_db.wp_1_postmeta’ doesn’t exist
wp_1_terms: Table ‘wordpress_db.wp_1_terms’ doesn’t exist
wp_1_term_taxonomy: Table ‘wordpress_db.wp_1_term_taxonomy’ doesn’t exist
wp_1_term_relationships: Table ‘wordpress_db.wp_1_term_relationships’ doesn’t exist
wp_1_commentmeta: Table ‘wordpress_db.wp_1_commentmeta’ doesn’t exist

そのあとは、どのメニューを押しても、データベースの復元要求のページに遷移してしまいます

via. マルチサイトの設定時に、データベースの復元エラーとなる。

水野さんが言ってるように、デフォルトサイトは wp_~ テーブルを見にいくはずなのに、なぜか wp_1_~ テーブルを見にいってしまって、データベース接続エラーになる。

WordPress MU だと、「wp_1」が作成される仕様だったのですが、
現状の WordPress3.0 インストール -> マルチブログ化だと、
「wp_1」は作成されないようです。

原因は wp-config.php に define( 'MULTISITE', true ); を追記し忘れてたからでした。

wp-includes.php/wp-db.php を見ると、wpdb::get_blog_prefix() でテーブルプリフィックスを取得するコードが、こんな感じになってます。

	function get_blog_prefix( $blog_id = null ) {
		if ( is_multisite() ) {
			if ( null === $blog_id )
				$blog_id = $this->blogid;
			if ( defined( 'MULTISITE' ) && ( 0 == $blog_id || 1 == $blog_id ) )
				return $this->base_prefix;
			else
				return $this->base_prefix . $blog_id . '_';
		} else {
			return $this->base_prefix;
		}
	}

define( 'MULTISITE', true ); されてないと、テーブルプリフィックスに「1_」が強制的に付けられちゃう。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中