web-dev-qa-db-ja.com

WordPressユーザーのために異なるデータベースのユーザーテーブルを使用するにはどうすればいいですか?

私は現在CIで運営されているウェブサイトを持っています、そしてそれはユーザーテーブルを持っています。私はWordPressのWebサイトを作成しています。ユーザーがWordPressにログインするには、CIデータベースのユーザーテーブルを使用する必要があります。どのように私は異なるデータベースのそのテーブルだけを使うことができますか?両方のDBが同じサーバー上にあります。また、管理者はダッシュボードに入ることができるので、管理者と一般ユーザーを区別する必要があります。このプラグインを試したが、このプラグインをアクティブにするとすぐにログインページが機能しなくなり、500サーバーエラーが表示されます。

1
Umair Malik

WordPressインスタンスのmysqlデータベースで次のようなことを行うことで、ビューを本質的にテーブルエイリアスとして使用することでうまくいくかもしれません。

 DROP TABLE wp_users
 CREATE VIEW wp_users AS SELECT * FROM CI.users;

しかしながら

  • 列をマッピングするためにビューの作成を微調整する必要があるでしょう。
  • パスワードのエンコーディングは違うかもしれないので、これを処理するためにとにかくWP coreをハックしているかもしれません
  • 管理者を正しく表すためにwp_usermetaテーブルを手動で修正する必要があるかもしれません。
1
Loren Rosen

Wordpressでは、2つの別々のデータベースで2つの別々のインストール間でユーザーを共有することはできません。

それはハードコーディングによって可能であるかもしれません:

  1. wP_Userクラスをハードコードして他のデータベースに接続し、そこからユーザーを取得する
  2. get_metadata()関数をハードコードし、wp_usermetaテーブルに対して他のデータベースに接続し、そこからユーザーを取得します。

しかし、言及されている解決策はもちろんアップデート推奨ではないので、お勧めできません。

0
PayteR

CIで複数のDB接続を確立するためのプラグインは必要ありません。これをしてください。

コネクション1 - /application/config/database.php

これがデフォルトのCIデータベース構成です。

$db['default']['hostname'] = 'DB_Host';
$db['default']['username'] = 'DB_USER';
$db['default']['password'] = 'DB_PASSWORD';
$db['default']['database'] = 'DB_NAME';

$db['default']['dbdriver'] = 'mysql';
$db['default']['dbprefix'] = '';
$db['default']['pconnect'] = TRUE;
$db['default']['db_debug'] = TRUE;
$db['default']['cache_on'] = FALSE;
$db['default']['cachedir'] = '';
$db['default']['char_set'] = 'utf8';
$db['default']['dbcollat'] = 'utf8_general_ci';
$db['default']['swap_pre'] = '';
$db['default']['autoinit'] = TRUE;
$db['default']['stricton'] = FALSE;

コネクション2 - /application/config/database.php

$db['default']$db['secondary']のような名前に変更して、そのコードの塊を複製します

$db['secondary']['hostname'] = 'SECONDARY_DB_Host';
$db['secondary']['username'] = 'SECONDARY_DB_USER';
$db['secondary']['password'] = 'SECONDARY_DB_PASSWORD';
$db['secondary']['database'] = 'SECONDARY_DB_NAME';

$db['secondary']['dbdriver'] = 'mysql';
$db['secondary']['dbprefix'] = '';
$db['secondary']['pconnect'] = TRUE;
$db['secondary']['db_debug'] = TRUE;
$db['secondary']['cache_on'] = FALSE;
$db['secondary']['cachedir'] = '';
$db['secondary']['char_set'] = 'utf8';
$db['secondary']['dbcollat'] = 'utf8_general_ci';
$db['secondary']['swap_pre'] = '';
$db['secondary']['autoinit'] = TRUE;
$db['secondary']['stricton'] = FALSE;

接続2を開始して使用する

function getWordpressUsers() {

    $secondaryDb = $this->load->database('secondary', TRUE);

    $query = $secondaryDb->select('user_email, display_name')->get('wp_users');
    var_dump($query);

}

詳細については、こちらをご覧ください。 https://codeigniter.com/user_guide/database/connecting.html