如何使用Hyperdb在WordPress安装之间分离和共享用户数据集?

时间:2013-02-27 作者:Crazycoolcam

我正在寻找一种方法,将我的users和usermeta表分离到一个与我的主WP安装不同的数据库中。最终目标是在多个WP安装上共享这些表。

据我所知,HyperDB应该考虑到这一点,但在创建和链接数据集时,他们的文档有点稀疏,我认为这是我应该寻找的地方。

我尝试过类似的方法,但没有成功:

$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\' );
但这并不成功。任何帮助都将不胜感激。提前谢谢~凸轮

2 个回复
SO网友:Adrian

我相信Crazycoolcam 表格拼写错误,user_meta vs公司usermeta. 您可能还需要定义else情况,即如果表不是用户,会发生什么情况。

尝试以下操作:

<?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\';
        }
    }

SO网友:Crazycoolcam

问题已解决。以下是我所做的:

$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\'; 
    }
}
请注意,如果插件对您的管理权限进行了调整(我有一个这样做的),那么您连接的站点也必须进行调整。

我见过几个人有这样的问题:如何在不使用相同DB的情况下在Wordpress安装之间共享用户?有了HyperDB,我就能解决这个问题!

结束

相关推荐

Users Role and Access

我是一个新手,所以请耐心等待。我正试图创建一个网站与程序员使用wordpress,但不使用它的博客或帖子<我自己不是程序员。我希望人们注册该网站,默认情况下,他们的角色将是修改后的订阅者。这意味着他们将无法访问管理员,也无法在网站上进行任何编辑。他们所能做的就是查看页面。此外,我想限制他们只查看一个或多个特定页面。管理员可以稍后更改其状态,并将其角色设置为常规订阅者。我真正想做的是创建一个有完全限制的网站用户将注册,但在管理员审核其注册并授予其访问权限之前,用户仍无法获得访问权限。这可能吗?