¿Cómo usar hyperdb para separar y compartir un conjunto de datos de usuario entre instalaciones de wordpress?

2

Estoy buscando una manera de separar a mis usuarios y la tabla de usuarios para que estén en una base de datos diferente a la de mi instalación principal de WP. El objetivo final es compartir estas tablas en varias instalaciones de WP.

Por lo que leí, HyperDB debería permitir esto, sin embargo, su documentación es un poco escasa cuando se trata de crear y vincular conjuntos de datos, que es donde creo que debería estar buscando.

He intentado algo como esto sin éxito:

$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' );

Pero esto no tuvo éxito. Cualquier ayuda sería apreciada. Gracias por adelantado. ~ Cam

    
pregunta Crazycoolcam 27.02.2013 - 22:56

2 respuestas

3

Creo que Crazycoolcam deletreó la tabla de forma incorrecta, user_meta vs usermeta . También es posible que desee definir el caso else, qué sucede si la tabla no es un usuario.

Prueba esto:

<?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';
        }
    }
    
respondido por el Adrian 25.08.2014 - 20:57
2

Problema resuelto. Esto es lo que hice:

$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'; 
    }
}

Tenga en cuenta que si los complementos se han modificado con sus permisos de administrador (tengo uno que sí lo tiene) , los sitios a los que se conecte también deberán haberse modificado.

He visto a varias personas con esta pregunta: ¿Cómo compartir usuarios entre instalaciones de Wordpress sin usar la misma base de datos? Con HyperDB, pude resolver esto!

    
respondido por el Crazycoolcam 01.03.2013 - 21:24

Lea otras preguntas en las etiquetas