wp-load.php や wp-blog-header.php でWordPressの関数を読み込もうとした時に、マルチサイト化していると「データベース接続エラー」になってしまい WordPress が動きませんでした。
原因
データベーステーブル wp_blogs のパスと、現在アクセスしているページの$_SERVER['REQUEST_URI']
が違うことで発生していました。
現在アクセスしているブログ(current blog)が判定できなくなりデータベ ースに接続できなくなるようです。
解決策
例として、ウェブルートの index.php でWordPress関数を使いたい、しかしWordPress が/wp
ディレクトリにインストールされている時を想定して解説していきます。
まず確認
WordPress マルチサイトの設定が書かれているコアファイル、/wp_include/ms_settings.php
を見てみると下記のような記述がありました。
if ( defined( 'SUNRISE' ) ) {
include_once( WP_CONTENT_DIR . '/sunrise.php' );
}
どうやら、定数SUNRISE
を設定して、/wp-content 内に sunrise.php を置いておくと sunrise.php で設定を上書きできるようです。こちらのファイルは通常存在しないファイルなので、自分で作成しましょう。
ファイルの作成とコードの追記
(1)/wp_content/sunrise.php
sunrise.php に下記コードを追記します。
<?php
$current_site = new stdClass;
$current_site->id = SUNRISE_SITE_ID;
$current_site->domain = SUNRISE_SITE_DOMAIN;
$current_site->path = SUNRISE_SITE_PATH;
$current_blog = get_site_by_path( $current_site->domain, $current_site->path );
(2)/index.php (関数を読み込みたいファイル)
<?php
define('WP_USE_THEMES', false);
//sunrise.php用の定義
define('SUNRISE_SITE_DOMAIN', $_SERVER['HTTP_HOST']); //ドメイン
define('SUNRISE_SITE_ID', 1); //読み込みたいブログID
define('SUNRISE_SITE_PATH', '/wp/'); //wordpressフォルダのパス
//sunrise.phpの読み込みを有効化
define('SUNRISE', true);
/** Loads the WordPress Environment and Template */
require( dirname( __FILE__ ) . '/wp/wp-blog-header.php' );
?>
こちらで index.php の方で WordPress 関数を呼び出すことができました。読み込みたいブログID、WordPressフォルダパスは環境にあわせて変更してください。