国产成人精品无码青草_亚洲国产美女精品久久久久∴_欧美人与鲁交大毛片免费_国产果冻豆传媒麻婆精东

18143453325 在線咨詢 在線咨詢
18143453325 在線咨詢
所在位置: 首頁 > 營銷資訊 > 建站知識 > wordpress二次開發(fā)教程手記:多站點的用戶數(shù)據(jù)共享

wordpress二次開發(fā)教程手記:多站點的用戶數(shù)據(jù)共享

時間:2022-07-09 12:06:01 | 來源:建站知識

時間:2022-07-09 12:06:01 來源:建站知識

最近一個客戶要求小V幫他們公司站點做一個英文版本,并且要求中文版和英文版兩個站點的用戶數(shù)據(jù)可以互通而且不影響站點的正常運行。好吧,開始蛋疼的折騰,首先看了下wordpress的官方文檔:《wordpress數(shù)據(jù)結構圖》發(fā)現(xiàn)wordpress的用戶數(shù)據(jù)表(wp_users和wp_usermeta)是相對獨立的,那么我們就可以直接將兩個站點的用戶數(shù)據(jù)庫共享即可,不用用戶數(shù)據(jù)考慮會對兩個站點中其他數(shù)據(jù)所造成的影響了。下面小V來說說解決方法:

假設我們有兩個wordpress站點,一個為cn.v7v3.com(數(shù)據(jù)表前綴為v7v3cn_)另一個為en.v7v3.com(數(shù)據(jù)表前綴為v7v3en_),我們將cn.v7v3.com作為主站點,將en.v7v3.com作為主站的一個英文版的副站點。

首先打開en.v7v3.com的wp_config.php文件,并加入以下代碼:

define('CUSTOM_USER_TABLE', 'v7v3cn_users'); //v7v3cn_為主站點的數(shù)據(jù)庫前綴

define('CUSTOM_USER_META_TABLE', 'v7v3cn_usermeta');

加入以上代碼后兩個站點之間的用戶數(shù)據(jù)就實現(xiàn)了初步的互通,但是如果用主站的用戶去登錄副站點會提示沒有足夠的權限。原因是因為主站儲存的用戶權限值是以v7v3cn來開頭的,以主站的管理員為例,管理員用戶ID為1,角色是administrator,則表中就有這樣一條記錄:

user_id->1, meta_key->v7v3cn_capabilities, meta_value->a:1:{s:13:"administrator";s:1:"1";}

而英文副站點的數(shù)據(jù)庫中卻沒有以v7v3en_開頭的權限值記錄,所以造成權限不夠的提示。解決方法是運行一下SQL語句:

//向數(shù)據(jù)庫中添加v7v3en_開頭的權限記錄值

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

這樣做僅僅使用戶id為1的管理員可以正常登陸這兩個網(wǎng)站,如果創(chuàng)建了新的用戶,無論是管理員還是普通用戶,都會被提示權限不足,解決方法是在用戶的注冊鉤子添加一個SQL數(shù)據(jù)庫操作:

//設置主站的前綴,其它網(wǎng)站都共享該網(wǎng)站的用戶數(shù)據(jù)表

$main_prefix = 'v7v3cn_';

//設置子站的前綴,前綴為v7v3en

$addi_prefixs = array('v7v3en_');

//添加功能到用戶注冊的鉤子里

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 );
}
}
}
}

將以上代碼做成一個小插件或者添加到主題的functions.php文件,這樣就一勞永逸了。小V在本地測試時用的是wordpress3.4版本,未出現(xiàn)任何問題,但是在客戶的站點中運用卻報錯了,查了下原因,原來客戶那邊的站點用的是wordpress3.5版的,3.5中代碼與3.4不太一樣,所以3.5或更高版本請使用以下代碼:

add_action( 'user_register', 'dup_capabilities' );

add_action('profile_update', 'dup_capabilities');

function dup_capabilities( $user_id ){

//在這里設置數(shù)據(jù)表前綴,不分主站子站,全部寫上即可。

 

    $prefixs = array('v7v3cn_','v7v3en_');
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 );
}
}
}

本文來源: 轉載請注明出處!謝謝合作

最后提下最后一段代碼用法和上面的代碼一樣,現(xiàn)在兩個站點的用戶數(shù)據(jù)就可以完全互通了。(PS:以上方法只適用于兩個wordpress站點裝在一個服務器上且共用一個數(shù)據(jù)的情況下。)

關鍵詞:用戶,數(shù)據(jù),教程,手記

74
73
25
news

版權所有? 億企邦 1997-2022 保留一切法律許可權利。

為了最佳展示效果,本站不支持IE9及以下版本的瀏覽器,建議您使用谷歌Chrome瀏覽器。 點擊下載Chrome瀏覽器
關閉