2017-07-31 16 views
0

我使用Wordpress與Woocommerce結合爲我的公司。當新客戶想要訂購某物時,他們必須在訂單期間創建一個賬戶。在我的Wordpress網上商店客戶的Cutsom用戶ID

我想我的新客戶有一個自定義的用戶ID。我希望客戶的ID不是數字,而是客戶的ID:他們姓氏的前兩個字母,他們已經註冊的最後兩個數字,他們已經註冊的月份,然後是他的ID號碼。

例如: 鮑勃克拉克今天在我的網站註冊爲客戶。 Bob會自動獲取用戶ID 300.但是,我希望bob的ID變爲:

他的姓氏的前兩個字母 - 最後兩個數字 - 年 - 月 - Bob他的ID。因此,這將是:

CL1707300

有人能幫助我嗎?

當前代碼:

/* Add user "my_unique_id" meta when user register through checkout page woocommerce */ 
add_action('woocommerce_created_customer', 'admin_email_on_registration', 10 , 1); 
function admin_email_on_registration($user_id) { 
    $user = wp_get_current_user(); 
    $last_name = $user->last_name; 
    if (isset($last_name)){ 
     //do your stuff 
     $unique_id = mb_substr($last_name, 0, 2, 'utf-8') . date("y") . date("m") . $user_id; 
     add_user_meta($user_id, 'my_unique_id', $unique_id); 
    } 
} 

更新:

<tr class="Klantnummer"> 
    <th><?php _e('Klantnummer:'); ?></th> 
    <td><?php echo $user->ID; ?></td> 
</tr> 
+1

,你能提供什麼原因導致飛機墜毀的一些詳細信息的代碼? –

+0

有了這段代碼,網站沒有崩潰,但它似乎沒有做任何事情。但是當我嘗試修改代碼時,由於語法錯誤,我經常會讓網站崩潰。我對Php沒有太多的經驗,這就是爲什麼。感謝您的答覆。 – Robin

+0

如果$ user_id作爲INT存儲在數據庫中,那麼可能存在各種問題,那麼您不能在其中存儲字符串值,並且您的連接可能在此行錯誤$ unique_id = mb_substr($ last_name,0, 2)+ date(「Y」)+ date(「m」)+ $ user_id;'嘗試用'mb_substr($ last_name,0,2)替換它。日期(「Y」)。日期(「m」)。 $ user_id;'' –

回答

0

你應該像這樣替換代碼:

100%測試和工作代碼..

/* Add user "my_unique_id" meta when user register through registration form */ 
add_action('user_register','my_on_user_register'); 
function my_on_user_register($user_id){ 
    $last_name = $_POST['last_name']; 
    if (isset($last_name)){ 
     //do your stuff 
     $unique_id = mb_substr($last_name, 0, 2, 'utf-8') . date("Y") . date("m") . $user_id; 
     add_user_meta($user_id, 'my_unique_id', $unique_id); 
    } 
} 

/* Add user "my_unique_id" meta when user register through checkout page woocommerce */ 
add_action('woocommerce_created_customer', 'admin_email_on_registration', 10 , 1); 
function admin_email_on_registration($user_id) { 
    $user = wp_get_current_user(); 
    $last_name = $user->last_name; 
    if (isset($last_name)){ 
     //do your stuff 
     $unique_id = mb_substr($last_name, 0, 2, 'utf-8') . date("Y") . date("m") . $user_id; 
     add_user_meta($user_id, 'my_unique_id', $unique_id); 
    } 
} 

enter image description here

+0

謝謝你的評論。我已經替換了代碼,但是,它仍然無法正常工作。目前,發票上顯示的客戶ID是「11」。 – Robin

+0

分享您的帳單截圖.. –

+0

對不起,我只是做了錯誤的事情,我無法再輸入我的DirectAdmin。我將不得不等到我的主機解決了問題。謝謝你的迴應,我會回到你的回答! – Robin

0

無論使用preg_match()還是一點點正則表達式,您都可以得到該名稱的最後一個字母。我沒有對它進行基準測試,但它可能比帶有一些編碼的mb_substr()更快。另外點.用於字符串在PHP中的連接而不是「+」。加爲清楚起見

// Add action hook for our. Note the last number, this indicates we 
// intend to use the provided parameter. 
add_action('user_register', 'so_add_custom_meta_on_registration', 10, 1); 

function so_add_custom_meta_on_registration($user_id) { 

    if (isset($_POST['last_name'])) { 
     $last_name = $_POST['last_name']; 
     // $matches[0] will contain the last two letters of the users last name 
     preg_match('/\p{L}{2}$', $last_name, $matches); 
     $lastname_letters = $matches[0]; 
     $year_numbers = date('y'); 
     $month_number = date('m'); 
     $unique_id = $lastname_letters . $year_numbers . $month_number . (string) $user_id; 

     update_user_meta($user_id, 'my_unique_id', $unique_id); 
    } 
} 

所有不同的變量,我們可以縮短,爲:

add_action('user_register', 'so_add_custom_meta_on_registration', 10, 1); 

function so_add_custom_meta_on_registration($user_id) { 
    if (isset($_POST['last_name'])) { 
     preg_match('/\p{L}{2}$', $_POST['last_name'], $matches); 
     $unique_id = $matches[0] . date('y') . date('m') . (string) $user_id; 

    update_user_meta($user_id, 'my_unique_id', $unique_id); 
    } 
} 

那麼它是怎樣工作的?

首先我們要確保用戶通過他們的姓氏在$_POST['last_name']

下使用,我們使用preg_match()有位正則表達式的從用戶的姓氏拍攝的最後兩個字母,並將其存儲在變量$matches。這個變量是一個數組,所以我們通過獲得數組中的第一個(也是唯一)元素來訪問這些字母,其中$matches[0]

我們傳遞的第一個參數的正則表達式是/\p{L}{2}$其中\p{L}任何字母匹配來自任何語言,{2}指定我們希望這些字母的2 $指定我們希望他們結束。你可以使用this online tool來測試你的正則表達式匹配。

接下來我們使用date()函數來給出我們所需的日期數字。 More info on the different formats here

最後,我們使用.或連接運算符將它們全部加在一起。

將其另存爲用戶元,我們準備好了!

+0

親愛的DaveLak, 感謝您的解釋,我在我的child-theme的functions.php中添加了縮短的代碼,但是在下訂單時創建一個新賬戶後,發票仍顯示ID# 12而不是我想要的。在我的數據庫的「wp_usermeta」中,我找不到「my_unique_id」。 你有什麼線索嗎?也許這是一個帳戶由Woocommerce註冊的方式? 預先感謝您。 – Robin

+0

老實說,我沒有得到充分測試這段代碼的機會,但我認爲它應該可以工作。我正在爲自己的woocommerce項目工作一段時間,所以我會測試它,然後在需要時進行修復。另外,要清楚的是,您不會更改WP用戶標識本身;這將是一個壞主意,因爲太多的東西使用它,並期望它是一個沒有字母的數字。相反,您正在做的是將您的自定義ID作爲元數據(關於數據的數據)添加到用戶。這樣你有你的自定義ID和WP是它的常規ID。 – DaveLak

0

嘗試到位代碼

​​