web-dev-qa-db-fra.com

Comment utiliser hyperdb pour séparer et partager un ensemble de données utilisateur entre les installations de wordpress?

Je cherche un moyen de séparer mes utilisateurs de la table usermeta afin de les placer dans une base de données différente de celle de mon installation principale WP. L'objectif final est de partager ces tables sur un certain nombre d'installations WP.

D'après ce que j'ai lu, HyperDB devrait le permettre, mais leur documentation est un peu clairsemée lorsqu'il s'agit de créer et de lier des ensembles de données - c'est là que je pense que je devrais chercher.

J'ai essayé quelque chose dans ce sens sans succès:

$wpdb->add_database(array(
    'Host'     => DB_Host,
    'user'     => DB_USER,
    'password' => DB_PASSWORD,
    'name'     => 'my_user_db_name',
    'write'    => 0,
    'read'     => 1,
    'dataset'  => 'user',
    'timeout'  => 0.2,
));

$wpdb->add_table( $user, $wpdb->base_prefix . 'users' );
$wpdb->add_table( $user, $wpdb->base_prefix . 'usermeta' );

Mais cela n'a pas réussi. Toute aide serait appréciée. Merci d'avance. ~ Cam

2
Crazycoolcam

Je crois que Crazycoolcam a mal orthographié le tableau, user_meta et usermeta. Vous pouvez également vouloir définir le cas else, que se passe-t-il si la table n'est pas utilisateur?.

Essaye ça:

<?php 
        $wpdb->add_database(array( //Connect to Users Database
        'Host'     => DB_Host, // I am using the same Host for my two DBs
        'user'     => DB_USER, // I am using the same username for my two DBs
        'password' => DB_PASSWORD, // I am using the same p/w for my two DBs
        'name'     => 'my_user_db_name', 
        'write'    => 0, // Change to 1 if you want your slave site's the power to update user data.
        'read'     => 1,
        'dataset'  => 'user'
    ));

    $wpdb->add_database(array( // Main Database
        'Host'     => DB_Host,
        'user'     => DB_USER,
        'password' => DB_PASSWORD,
        'name'     => DB_NAME,
        'write'    => 1, // Change to 1 if you want your slave site's the power to update user data.
        'read'     => 1,
        'dataset' => 'global'
    ));

    $wpdb->add_callback('user_callback');

    function user_callback($query, $wpdb) {
        if ( $wpdb->base_prefix . 'users' == $wpdb->table || $wpdb->base_prefix . 'usermeta' == $wpdb->table) {
            return 'user'; 
        } else {
            return 'global';
        }
    }
3
Adrian

Problème résolu. Voici ce que j'ai fait:

$wpdb->add_database(array( //Connect to Users Database
    'Host'     => DB_Host, // I am using the same Host for my two DBs
    'user'     => DB_USER, // I am using the same username for my two DBs
    'password' => DB_PASSWORD, // I am using the same p/w for my two DBs
    'name'     => 'my_user_db_name', 
    'write'    => 0, // Change to 1 if you want your slave site's the power to update user data.
    'read'     => 1,
    'dataset'  => 'user',
    'timeout'  => 0.2,
));

$wpdb->add_database(array( // Main Database
    'Host'     => DB_Host,
    'user'     => DB_USER,
    'password' => DB_PASSWORD,
    'name'     => DB_NAME,
));

$wpdb->add_callback('user_callback');
function user_callback($query, $wpdb) {
    if ( $wpdb->base_prefix . 'users' == $wpdb->table || $wpdb->base_prefix . 'user_meta' == $wpdb->table) {
        return 'user'; 
    }
}

Soyez averti que si les plugins ont été modifiés avec vos permissions d'administrateur (j'en ai un) , les sites que vous connectez devront également avoir été modifiés.

J'ai vu plusieurs personnes avec cette question: Comment partager des utilisateurs entre des installations Wordpress sans utiliser le même DB? Avec HyperDB, j'ai pu résoudre ce problème!

2
Crazycoolcam