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そのあとは、どのメニューを押しても、データベースの復元要求のページに遷移してしまいます
水野さんが言ってるように、デフォルトサイトは 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_」が強制的に付けられちゃう。
コメントを残す