web-dev-qa-db-ja.com

Wordpressの外部でWordpress MultiSiteをブートストラップする - いい$ wpdb

私は認証バックエンドとしてWordpressを使うシステム用のプラグインに取り組んでいるので、私は私の既存のWordpressユーザーを別のアプリケーションで使うことができます。このプラグインは、シングルWebサイトモードで実行しているときにうまく機能します。

include /path/to/wordpress/wp-config.php
global $wpdb;
// SQL and code to select user and compare entered passwords

これはWordpress Multisiteのインストールに対しても動作するために必要です。私がMSサイトのためにwp-config.phpを引っ張るとき、私はこのエラーで終わります:

Fatal error: Call to a member function set_prefix() on a non-object in /path/to/wordpress/wp-includes/ms-settings.php on line 126

126行目で、WPは$ wpdbに対してテーブルプレフィックスを設定しようとしていますが、何らかの理由でここに$ wpdbが存在しません。私はxdebugを実行しました、そして、$ wpdbは作成されますが、ms-settings.phpはそれを見ません。私はこれを加えることによってこれを直すことができます:

global $wpdb;

126行目の直前に実行しても動作しますが、Wordpressのコアコードを変更したくありません。 Wordpressをブートストラップするより良い方法はありますか?

1
dragonmantank

wp-load.phpではなくwp-config.phpを含めることをお勧めします。

あなたのやり方によっては、WordPressがあなたをリダイレクトしようとするのを防ぐために$_SERVER変数が設定されていない場合は設定する必要があるかもしれません。例えば:

$_SERVER = array(
  "HTTP_Host" => "http://example.com",
  "SERVER_NAME" => "http://example.com",
  "REQUEST_URI" => "/",
  "REQUEST_METHOD" => "GET"
);
2
prettyboymp

あなたが経験しているのは、グローバルスコープにアクセスできないメソッド、関数、またはコールバックの中からWordpressをロードしようとしているということです。

Wordpressはこれの外にロードされている場合 - 私の場合はエラーなしで走った。

2
Mackstar

最初に$wpdb globalを宣言してからwp-load.phpをインクルードする必要があります。

global $wpdb;
require_once('/path/to/wordpress/wp-load.php');
0
Dima L.