WordPress 如何在多个网站之间共享用户和登录

技术介绍

你是否希望在两个或更多WordPress网站之间共享用户信息和登录会话?如果是这样,你可以按照本指南逐步学习如何操作。

最近,我就遇到了这种需求。我需要在一个网站上同步主网站的用户信息,并实现类似单点登录的功能(我们将这个网站称为站点B),虽然主网站(站点A)和站点B是两个独立的WordPress网站。幸运的是,这两个网站都托管在同一台服务器上,这使得实现这个操作变得容易。

在我解决这个难题之后,决定写一篇文章来协助你在做这个需求时处理遇到的一些麻烦。此外,该过程可以扩展到任意数量有需求的网站。就我而言,只需要在两个WordPress网站之间同步登录详细信息和cookie。

要求场景

  • 站点A和站点B必须位于同一顶级域(子文件夹或子域)
  • 站点A和站点B将使用相同的数据库

你还需要FTP访问这两个网站,我们将需要编辑两个网站的wp-config.php文件。当然,如果你使用的是宝塔,那就更方便了。如果您符合要求,我们可以继续前进。

获取完整的网站备份(可选)

由于我们将编辑wp-config.php和数据库,因此最好是安全并完整的备份网站,或者至少是数据库和wp-config.php文件。为此,我建议使用All-in-One WP Migration、Updraft Plus、WP Time Capsule,选择一个你顺手的插件进行备份。

共享用户和用户元信息

为了在两个网站上拥有相同的用户登录名和密码,我们将使用相同的数据库表。如果您使用的是默认前缀,则这些名称为wp_userswp_usermeta。

1.检查站点A的表前缀

如果你不确定站点的表前缀,请打开站点A的wp-config.php并查找以下行:

$table_prefix = 'wp_';

默认情况下,它是wp_,但如果你的不同,请记住它,因为我们需要将它用于站点B的wp-config.php。保持wp-config.php打开,稍后我们将需要更多信息,以及编辑它。

2.为站点B安装WordPress(如果已经存在,请忽略这一步)

请记住,我们将使用与站点A相同的数据库,因此您必须为站点B使用不同的表前缀(如果你的站点B已经存在,并且已经有了一些用户信息,那你需要做取舍,或者这是关乎用户信息导出合并的问题,这里没有相关解决方案)。在我的示例中,我使用  com_,简称社区。你可以使用你想到的任何字母,都没关系。

如果您使用的工具用于自动WordPress安装,不允许您选择数据库和前缀,不要担心,因为稍后可以从wp-config更改。只需确保在子文件夹子域中安装了WordPress  

打开站点B的wp-config.php,并将数据库名称,用户和密码替换为站点A的。

define('DB_NAME', 'siteAdatabase');
define('DB_USER', 'siteAuser');
define('DB_PASSWORD', 'siteApassword');

现在两个站点都使用了相同的数据库。确保站点B使用不同的表前缀,以下是我的实例:

$table_prefix = 'com_';

3.在网站之间共享WordPress用户

要做到这一点,我们需要做的是确保站点B使用和站点A相同的表的用户和用户元信息,即wp_users和wp_usermeta(再次确认你的主站数据库表前缀)。打开站点B的WP-config.php文件,在“ /* That’s all, stop editing! Happy blogging. */”上方添加以下行:

define( 'CUSTOM_USER_TABLE', 'wp_users' );
define( 'CUSTOM_USER_META_TABLE', 'wp_usermeta' );
/* That's all, stop editing! Happy blogging. */

请注意,wp_是站点A的表前缀。如果你的不同,则需要更新这些行。

干得好,截至现在这两个网站已经共享相同的用户(如果你做的一切都正确)。

共享登录Cookie

既然两个网站都使用相同的登录信息,但你会注意到,当切换网站时,则必须再次登录。这可以通过共享登录cookie来解决,我们继续:

1.编辑站点A的wp-config.php

就在  /* That’s all, stop editing! Happy blogging. */之上添加以下行:

define( 'COOKIE_DOMAIN', 'yourwebsite.com' ); 
define( 'COOKIEHASH', md5( 'https://yourwebsite.com' ) ); 
/* That's all, stop editing! Happy blogging. */

在第一行中,必须将yourwebsite.com替换为你的实际域。在第二行,必须放置你的WordPress站点地址(URL),可以从仪表板 – >设置 – >常规查看到。

不要关闭站点A的wp-config.php,我们仍然需要处理站点B的一些信息  。

2.编辑站点B的wp-config.php

与我们对数据库名称,用户和密码的处理方式类似,我们现在将从站点A复制以下行 并替换站点B中存在的行

define('AUTH_KEY',         'stringof40characters');
define('SECURE_AUTH_KEY',  'stringof40characters');
define('LOGGED_IN_KEY',    'stringof40characters');
define('NONCE_KEY',        'stringof40characters');
define('AUTH_SALT',        'stringof40characters');
define('SECURE_AUTH_SALT', 'stringof40characters');
define('LOGGED_IN_SALT',   'stringof40characters');
define('NONCE_SALT',       'stringof40characters');

其中,“stringof40characters”是已存在的40个字符的随机字符串,这里是示意。
接下来,我们需要确保站点B站点A共享登录cookie  。

与上一步类似,我们现在编辑站点B的wp-config.php,在  /* That’s all, stop editing! Happy blogging. */之上添加以下行,记得替换地址: 

define( 'COOKIE_DOMAIN', 'yourwebsite.com' ); 
define( 'COOKIEHASH', md5( 'https://yourwebsite.com' ) ); 
/* That's all, stop editing! Happy blogging. */

获取站点B的管理员权限

完成上述步骤后,你的两个网站就实现了用户信息同步和登录了。但你会发现站点B的后台进不去了,不能访问管理仪表盘,因为站点A的wp_usermeta数据表中,并没有记录用户对站点B的访问权限,为了使站点A的管理员用户能拥有站点B的管理权限,我们需要在a_usermeta数据表中插入如下权限记录:

INSERT INTO `test`.`a_usermeta` (`umeta_id`, `user_id`, `meta_key`, `meta_value`) VALUES (NULL, '1', 'com_capabilities', 'a:1:{s:13:"administrator";s:1:"1";}');

通过上面的mysql命令,插入用户对B站点的权限后,我们就可以正常访问B站的后台了。注意:记得清理cookies!

如果不会MySQL,你也可以使用phpmyadmin使用鼠标点击wp_usermeta数据表中meta_key值为wp_capabilities记录项前面的复制链接,phpmyadmin会自动跳转到插入功能并填入相应值,你只需要修改前缀(站点B的)再点击执行即可。

如果你也使用宝塔,则通过主站点A的数据库管理按钮进行登录。进入数据库后,找到站点A的数据表wp_usermeta进行复制修改,并执行。

  • umeta_id  (留空,会自动递增)
  • user_id:1(站点A上管理员的user_id)
  • meta_key:com_capabilities(com_ 是我的示例站点B的前缀,将其替换为你的前缀)
  • meta_value:复制从wp_capabilities中为user_id = 1粘贴相同的meta_value

现在你已经完成了两个网站的用户信息共享,并同时登录功能,你也可以以站点A的管理员角色来管理站点B的后台。祝你使用愉快!

© 版权声明
THE END
喜欢就支持一下吧
点赞16赞赏 分享
评论 抢沙发
头像
欢迎留言
提交
头像

昵称

取消
昵称表情图片

    暂无评论内容