黄聪:多个wordpress网站(不同域名)共享用户数据的方法
WordPress可以自定义用户数据表,这样多个wordpress网站就可以共享用户数据了,有时候这是非常方便的,这些Wordpress站点应该安装在同一个数据库下,数据表前缀各不相同。由于Wordpress的用户数据表(wp_users和wp_usermeta)相对独立(点击这里查看Wordpress数据表关系),我们不用担心共享用户数据后会打乱其它的应用。
共享用户数据
更改用户表的方法是编辑站点的wp_config.php,加入如下代码,假设需要更改的站点前缀是wpen_,需要共享的用户表前缀是wp_
|
1
2
|
define('CUSTOM_USER_TABLE', 'wp_users');define('CUSTOM_USER_META_TABLE', 'wp_usermeta'); |
例如我要做多语言站点,每个语言都是一个独立的wordpress安装,中文版本作为主站,在主站下安装一个新的wp站点作为英文版本,只共享用户数据,其它的都是独立的,类似multisite但有multisite不具备的优势,毕竟很多插件对multisite的支持不是很好。
这样更改存在一定问题,wp_usermeta表中存储了用户权限,这个权限的值是以wp前缀开头的,以管理员为例,管理员用户id为1,角色是administrator,则表中就有这样一条记录
user_id->1, meta_key->wp_capabilities, meta_value->a:1:{s:13:"administrator";s:1:"1";}
如果该用户去登陆共享数据并且以wpen_为前缀的网站(http://youdomain.com/wp-admin),就会被提示
You do not have sufficient permissions to access this page. (你没有足够的权限访问该页面)
解决的方法是向数据库插入包含wpen_前缀的数据,即
user_id->1, meta_key->wpen_capabilities, meta_value->a:1:{s:13:"administrator";s:1:"1";}
SQL语句为
|
1
|
INSERT INTO `dbname`.`wp_usermeta` (`umeta_id`, `user_id`, `meta_key`, `meta_value`) VALUES (NULL, '1', 'wpen_capabilities', 'a:1:{s:13:"administrator";s:1:"1";}'); |
这样做仅仅使用户id为1的管理员可以正常登陆这两个网站,如果创建了新的用户,无论是管理员还是普通用户,都会被提示权限不足,除非你一条一条的向数据库里插入数据,并且要注意改变角色。一劳永逸的做法是写一段小代码让这个过程自动完成,代码如下
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
//设置主站的前缀,其它网站都共享该网站的用户数据表$main_prefix = 'wp_';//设置子站的前缀,例如有两个子站,前缀分别为wpen_和wpcn_$addi_prefixs = array('wpen_','wpcn_');//添加功能到用户注册的钩子里add_action( 'user_register', 'dup_capabilities' );function dup_capabilities( $user_id ) { global $main_prefix, $addi_prefixs; //获取该用户权限的值,因为不同角色的值是不同的 if( $cap_val = get_user_meta( $user_id, $main_prefix.'capabilities', true ) ) { if( count( $addi_prefixs ) > 0 ) { foreach( $addi_prefixs as $prefix ) { add_user_meta( $user_id, $prefix.'capabilities', $cap_val, true ); } } }} |
WordPress 3.5上用这段代码
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
add_action( 'user_register', 'dup_capabilities' );add_action('profile_update', 'dup_capabilities');function dup_capabilities( $user_id ){ //在这里设置数据表前缀,不分主站子站,全部写上即可。 $prefixs = array('wp11_','wp12_','wp13_'); global $table_prefix; $cap_val = get_user_meta( $user_id, $table_prefix.'capabilities',true); if( !empty( $cap_val ) ) { foreach( $prefixs as $prefix ){ if( $prefix != $table_prefix ) update_user_meta( $user_id, $prefix.'capabilities', $cap_val ); } }} |
这段代码放到主题的functions.php中或者做成一个小插件都可以。
如果注册的用户权限很低,例如是订阅者之类的角色,就没必要这样做了,管理员可以到每个网站单独创建一个,各自管理各自的,也是一种解决方法。
黄聪:多个wordpress网站(不同域名)共享用户数据的方法的更多相关文章
- 如何完美更换WordPress网站的域名
前几天,一位WordPress王牌主机的用户问我,他的WordPress网站已经建立一年多了,现在想要修改网站使用的域名,该如何操作?这是WordPress用户经常遇到的问题.今天我们来给大家介绍一下 ...
- 黄聪:Wordpress二级域名共享用户cookie出现错误解决方案及WP的Cookie机制
在若干年以前,我刚开始折腾Wordpress没多久的时候,就自己摸索过 多个Wordpress网站共享一份数据表的实现方法 .这种看起来好像很高大上的类SSO功能,能够给用户在多个网站之间提供快速.无 ...
- 黄聪:实用WordPress SQL查询方法
为所有文章和页面添加自定义字段 这段代码可以为WordPress数据库内所有文章和页面添加一个自定义字段. 你需要做的就是把代码中的‘UniversalCutomField‘替换成你需要的文字,然后把 ...
- wordpress网站后台打开速度很慢解决方法?
今天就和朋友们分享下,wordpress网站后台最近打开速度很慢的原因及解决方法.推荐第三种方法 方法/步骤 1.安装插件:在插件中搜索 Disable Google Fonts,选择安装,然后启 ...
- 黄聪:自定义WordPress前台、后台顶部菜单栏管理工具条的技巧
使用WordPress开发网站项目,很多时候都需要对进行后台定制,今天倡萌主要分享下自定义顶部管理工具条的使用技巧. 注:如无特殊说明,请将下面的代码添加到主题的 functions.php 或者插 ...
- 黄聪:自定义WordPress顶部管理工具条的技巧(转)
使用WordPress开发网站项目,很多时候都需要对进行后台定制,今天倡萌主要分享下自定义顶部管理工具条的使用技巧. 注:如无特殊说明,请将下面的代码添加到主题的 functions.php 或者插 ...
- 黄聪:使用WORDPRESS自带AJAX方法
例如给网站每页logo后面的一句名言,点击“换一条”就会ajax动态加载一条,使用了wordpress的自带ajax方法.下面介绍如何使用wordpress自带ajax方法: 1.在header.ph ...
- 黄聪:让WordPress主题支持语言本地化(使用poedit软件实现中文翻译功能)
如果你的WordPress主题要提交到WordPress官方主题库,使用者来自世界各地的多种语言,那么,你就要让你的WordPress主题支持语言本地化,方便使用者进行语言翻译和制作语言包. 让Wor ...
- 黄聪:走进wordpress 详细说说template-loader.php
再看template-laoder.php,这个文件总共只有45行.它的作用是基于访问的URL装载正确的模板. 文件第六行,也是第一条语句,如下: if ( defined('WP_USE_THEME ...
随机推荐
- jsp-servlet(2)响应HTML文档-书籍管理系统
基础知识预备: 目标: 构建一个书籍管理系统,实现以下功能. 功能: 1 图书信息查询,(查) 2 书籍管理:添加书籍 3 书籍管理:修改书籍信息 4 书籍管理:删除书籍 一.预备工作 Book{ ...
- ORA-15025 搭建DG环境,restore controlfile报错,提示oracle无法使用ASM存储
环境说明: #主库RAC环境 #备库RAC环境,操作系统AIX 6.1 数据库版本11.2.0.3 报错说明: #主库备份控制文件,传输至备库,备库restore 报错 本篇文档,分为两大阶段:第一阶 ...
- Android动态添加Device Admin权限
/********************************************************************** * Android动态添加Device Admin权限 ...
- angular-translate
angular.module('app.core', ['pascalprecht.translate']).config(['$translateProvider', '$translatePart ...
- maven 构建 war文件&&Glassfish运行+部署war文件+访问(命令行模式)
Glassfish常用命令 asadmin start-domain --verbose #启动Glassfish服务器(默认domain1) ,并在终端显示相关信 ...
- java-方法重写和方法重载的区别
1.方法重载: - 英文:Overload - 可以改变返回值类型,只看参数列表. - 本类中出现的方法名一样,参数列表不同的方法,与返回值类型无关. 2.方法重写: - 英文:Override - ...
- Codeforces Div3 #501 A-E(2) F以后补
感觉自己有点强迫症 不都写出来就找理由不写题解 http://codeforces.com/contest/1015 题目链接 A. Points in Segments 题目意思 n个线段 ...
- 求约束------------------------ do while循环 算法思想
前段代码: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default2.a ...
- redmine添加自定义问题状态
使用管理员登录 首先添加一个问题状态:挂起 创建之后,会出现不显示这个先状态的情况,所以我们还需要进行其他的配置.注意,先取消只显示被次跟踪标签使用的状态,然后点击编辑,才会看到新创建的挂起状态 然后 ...
- MySQL 5.7--复制延迟监控
========================================== SHOW PROCESSLIST方式 为保证二进制日志在从库的执行时间和顺序的正确性,二进制日志中的每个语句都设置 ...