web-dev-qa-db-fra.com

Comment utiliser la table des utilisateurs d'une autre base de données pour les utilisateurs de WordPress?

J'ai un site Web en cours d'exécution dans CI et il a une table d'utilisateurs. Je suis en train de créer un site Web WordPress et j'en ai besoin pour utiliser la table des utilisateurs de la base de données CI afin que les utilisateurs puissent se connecter à WordPress. Comment puis-je utiliser uniquement cette table de base de données différente? Les deux bases de données sont sur le même serveur. De plus, je dois différencier les utilisateurs administrateurs des utilisateurs normaux, car les administrateurs peuvent accéder au tableau de bord. J'ai essayé ce plugin mais dès que j'active ce plugin, ma page de connexion cesse de fonctionner et affiche une erreur de 500 serveur.

1
Umair Malik

Cela pourrait fonctionner d'utiliser une vue essentiellement comme un alias de table, en procédant comme suit avec la base de données mysql instance WordPress

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

Toutefois

  • aura probablement besoin de Tweak la création de vue pour mapper les colonnes
  • le codage du mot de passe peut être différent, vous pouvez donc avoir bidouiller WP core pour le gérer de toute façon
  • vous devrez probablement modifier manuellement la table wp_usermeta pour indiquer correctement les administrateurs.
1
Loren Rosen

Il n'est pas possible dans Wordpress d'avoir des utilisateurs partagés entre 2 installations distinctes sur 2 bases de données séparées.

Cela pourrait être possible simplement en codant en dur:

  1. la classe WP_User de hardcode se connecte à une autre base de données et en récupère les utilisateurs
  2. fonction hardcode get_metadata () qui, pour la table wp_usermeta, se connecte à une autre base de données et récupère les utilisateurs à partir de celle-ci

mais la solution mentionnée n’est bien sûr pas recommandée, car elle n’est pas updateproof.

0
PayteR

Vous n'avez pas besoin d'un plugin pour établir plusieurs connexions à la base de données dans CI. Faites juste ceci:

Connexion 1 - /application/config/database.php

Ceci est votre configuration par défaut de la base de données 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;

Connexion 2 - /application/config/database.php

Dupliquez ce morceau de code, en renommant le $db['default'] avec quelque chose comme $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;

Lancer et utiliser la connexion 2

function getWordpressUsers() {

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

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

}

Pour plus d'informations à ce sujet, consultez ceci: https://codeigniter.com/user_guide/database/connecting.html