具有相同用户的两个wordpress数据库

时间:2018-07-10 20:13:45

标签: wordpress

我想在两个不同的数据库中拥有相同的WordPress用户

例如,如果用户在SiteA上注册,则可以登录到SiteB。反过来。

我还要在登录后为两者创建相同的cookie。

mywebsite.com/(SiteA_DB)

mywebsite.com/blog/(SiteB_DB)

1 个答案:

答案 0 :(得分:2)

我以前从未做过,也许Wordpress有钩子将其存档,但是我更喜欢使用mysql这样的技巧。

您可以尝试..

  1. ..使用'联合存储'(https://stackoverflow.com/a/24532395/10362812
    这是我的最爱,因为您甚至不必共享数据库或mysql服务器< br />缺点是它不适用于db缓存,而使用其他连接。
  2. ..创建一个'视图'(https://stackoverflow.com/a/1890165/10362812
    在查询本身中使用数据库名称时,这应该是可能的,这将是最简单的解决方案(如果可行)。
    缺点:2个表必须共享同一台mysql服务器,并且据我所知必须分配给同一用户。

    -- **Backup your database before trying!** --
    DROP TABLE `second_database`.`wp_users`;
    DROP TABLE `second_database`.`wp_usermeta`;
    CREATE VIEW `second_database`.`wp_users` AS SELECT * FROM `first_database`.`wp_users`;
    CREATE VIEW `second_database`.`wp_usermeta` AS SELECT * FROM `first_database`.`wp_usermeta`;
    

    根据Creating view across different databases

  3. ,这应该有效
  4. ..创建一个“ 阴影副本”(https://stackoverflow.com/a/1890166/10362812
    可缓存,并且是一个独立的表。
    缺点如下。2. +进行一些设置,我认为这可能是性能上最差的选择

这是对此问题的解答:How do I create a table alias in MySQL
我为您合并了它们,并使它们适合您的用例。

还请注意,解决方案1和2将替换您当前的用户表auf“ second_database”,因为在查询联盟时您直接写入“ first_database”。存储或视图。这可能会导致用户角色插件出现问题。如果您应该使用其中之一,并且如果它使用不同的表或'wp_options'值,则也应该同步插件选项。

让我知道这是否有效,下周我必须做类似的任务。在研究时,我找到了链接的答案。

编辑:我的答案中缺少“ cookie共享”的意思。您的示例显示了同一域中的博客-您应该能够将wordpress设置其Cookie的方式更改为整个域。我曾经对2个不同的域执行过一次操作,就是我挂接到后端(is_admin)并添加了一个JavaScript,该JavaScript对siteB进行了后请求,接收到一个已存储但在siteB上标记为“无效”的令牌。然后将此令牌传递回我在siteA上的插件,该插件检查用户是否已登录并(在我的情况下)具有管理员权限(current_user_can()),如果是,则将该令牌发送回sideB,后者将该令牌标记为有效登录。 (确保只有sideA可以告诉sideB使此令牌有效!)一旦看到用户在siteB的cookie中使用此令牌,该用户便会在后台自动登录。我也做了双向的。很抱歉,我无法为您共享代码。我再也无法访问它了。

问候,埃里克!

相关问题