黄聪:多个wordpress网站(不同域名)共享用户数据的方法

时间:2021-11-09 00:59:48

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 ) ) {
 
        ifcount$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网站(不同域名)共享用户数据的方法的更多相关文章

  1. 如何完美更换WordPress网站的域名

    前几天,一位WordPress王牌主机的用户问我,他的WordPress网站已经建立一年多了,现在想要修改网站使用的域名,该如何操作?这是WordPress用户经常遇到的问题.今天我们来给大家介绍一下 ...

  2. 黄聪:Wordpress二级域名共享用户cookie出现错误解决方案及WP的Cookie机制

    在若干年以前,我刚开始折腾Wordpress没多久的时候,就自己摸索过 多个Wordpress网站共享一份数据表的实现方法 .这种看起来好像很高大上的类SSO功能,能够给用户在多个网站之间提供快速.无 ...

  3. 黄聪:实用WordPress SQL查询方法

    为所有文章和页面添加自定义字段 这段代码可以为WordPress数据库内所有文章和页面添加一个自定义字段. 你需要做的就是把代码中的‘UniversalCutomField‘替换成你需要的文字,然后把 ...

  4. wordpress网站后台打开速度很慢解决方法?

    今天就和朋友们分享下,wordpress网站后台最近打开速度很慢的原因及解决方法.推荐第三种方法 方法/步骤   1.安装插件:在插件中搜索 Disable Google Fonts,选择安装,然后启 ...

  5. 黄聪:自定义WordPress前台、后台顶部菜单栏管理工具条的技巧

    使用WordPress开发网站项目,很多时候都需要对进行后台定制,今天倡萌主要分享下自定义顶部管理工具条的使用技巧. 注:如无特殊说明,请将下面的代码添加到主题的 functions.php  或者插 ...

  6. 黄聪:自定义WordPress顶部管理工具条的技巧(转)

    使用WordPress开发网站项目,很多时候都需要对进行后台定制,今天倡萌主要分享下自定义顶部管理工具条的使用技巧. 注:如无特殊说明,请将下面的代码添加到主题的 functions.php  或者插 ...

  7. 黄聪:使用WORDPRESS自带AJAX方法

    例如给网站每页logo后面的一句名言,点击“换一条”就会ajax动态加载一条,使用了wordpress的自带ajax方法.下面介绍如何使用wordpress自带ajax方法: 1.在header.ph ...

  8. 黄聪:让WordPress主题支持语言本地化(使用poedit软件实现中文翻译功能)

    如果你的WordPress主题要提交到WordPress官方主题库,使用者来自世界各地的多种语言,那么,你就要让你的WordPress主题支持语言本地化,方便使用者进行语言翻译和制作语言包. 让Wor ...

  9. 黄聪:走进wordpress 详细说说template-loader.php

    再看template-laoder.php,这个文件总共只有45行.它的作用是基于访问的URL装载正确的模板. 文件第六行,也是第一条语句,如下: if ( defined('WP_USE_THEME ...

随机推荐

  1. WindowsAPI调用和OCR图片识别

    傻了吧唧的装双系统.成功的干崩了原本的系统.现在重装VS.闲的没事胡扯几句. WindowsAPI在每一台Windows系统上开放标准API供开发人员调用.功能齐全.在这里只介绍三个部分. 1.利用A ...

  2. WPF DEV控件-ChartControl用法

    WPF常用的第三方控件集,DevExpress 下面介绍如何生成Chart界面: <dxc:ChartControl AnimationMode="OnDataChanged&quot ...

  3. 【转】mysql如何跟踪执行的sql语句

    转自http://blog.csdn.net/testcs_dn/article/details/18791815 在SQL SERVER下跟踪sql采用事件探查器,而在mysql下如何跟踪sql呢? ...

  4. Cheatsheet&colon; 2015 04&period;01 ~ 04&period;30

    Other CentOS 7.1 Released: Installation Guide with Screenshots A Git Style Guide Recommender System ...

  5. nginx基于域名的虚拟主机 反向代理配置实例

    vi /etc/nginx/conf.d/safeadmin.xxx.com.conf: server { listen 80; server_name safeadmin.xxxx.com; loc ...

  6. Doing Homework 状态压缩DP

    Doing Homework 题目抽象:给出n个task的name,deadline,need.  每个任务的罚时penalty=finish-deadline;   task不可以同时做.问按怎样的 ...

  7. C&num;&period;Net 如何动态加载与卸载程序集(&period;dll或者&period;exe)2----通过应用程序域AppDomain加载和卸载程序集之后,如何再返回原来的主程序域

    实现目的:动态加载dll,执行完毕之后可以随时卸载掉,并可以替换这些dll,以在运行中更新dll中的类. 其实就是通过应用程序域AppDomain加载和卸载程序集. 在这方面微软有篇文章http:// ...

  8. 实现excel导入导出功能,excel导入数据到页面中,页面数据导出生成excel文件

    今天接到项目中的一个功能,要实现excel的导入,导出功能.这个看起来思路比较清楚,但是做起了就遇到了不少问题. 不过核心的问题,大家也不会遇到了.每个项目前台页面,以及数据填充方式都不一样,不过大多 ...

  9. 【HTML】canvas学习小结

    1. 绘制基本图形 -----上下文---------------------------------------------------------- canvas.getContext('2d') ...

  10. rest&lowbar;famework 增删改查初第二阶段&lpar;中级&comma;此阶段是优化初级阶段的代码&rpar;的使用

    url: re_path('authors/$', views.AuthorView.as_view()),re_path('authors/(\d+)/$', views.AuthorDetailV ...