2017-07-31 6 views
0

私は私の会社のためにWoocommerceと組み合わせたWordpressを使用しています。新規顧客が何かを注文したい場合、注文中にアカウントを作成する必要があります。私のWordpressウェブショップのクライアントのためのCutsomユーザーID

新しいクライアントにカスタムユーザーIDを持たせたいと思います。番号の代わりに、クライアントのIDを姓の最初の2文字、登録した年の最後の2文字、登録した月、ID番号に続けてください。

例: ボブ・クラークは今日私のウェブサイトにクライアントとして登録します。ボブは自動的にユーザーID 300を取得します。ただし、ボブIDは次のようになります。

姓の最初の2文字 - 年月の最後の2文字 - ボブの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、 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); 
    } 
} 

まず我々は、ユーザは、我々はユーザーの姓から最後の2つの文字をキャプチャし、変数に格納するために正規表現のビットでpreg_match()を使用$_POST['last_name']

次に使用するために彼らの最後の名前を渡していることを確認してください$matches。この変数は配列であるため、配列内の最初の(そして唯一の)要素を$matches[0]で取得して文字にアクセスします。我々は最初のパラメータとして渡す正規表現は\p{L}は、任意の言語からの手紙のいずれかの種類に一致する/\p{L}{2}$ある

{2}は、我々はそれらの手紙の2をしたいと$は、我々は最後からそれらを望んで指定指定します。 this online toolを使用して、正規表現が一致するものをテストすることができます。

次に、date()関数を使用して、希望の日付番号を使用します。 More info on the different formats here

最後に、.または連結演算子を使用してそれらをすべて追加します。

ユーザーメタとして保存して、準備が整いました。

+0

Dear Dave、 私の子供テーマの私のfunctions.phpに短縮コードを追加しましたが、注文時に新しいアカウントを作成した後、請求書にはまだID#私のデータベースの "wp_usermeta"では、 "my_unique_id"を見つけることができません。 手掛かりはありますか?たぶんそれは、アカウントがWoocommerceによって登録される方法ですか? ありがとうございます。 – Robin

+0

正直なところ私はこのコードを完全にテストする機会はありませんでしたが、うまくいくはずです。私はちょっと後で私自身のwoocommerceプロジェクトに取り組んでいるので、私はそれをテストし、必要ならば修正します。また、WPユーザーID自体は変更されていません。それはあまりにも多くのものがそれを使用し、それが文字なしの数字になることを期待しているので、悪い考えです。代わりに、カスタムIDをメタデータ(データに関するデータ)としてユーザーに追加します。あなたはカスタムIDを持っていて、WPはそれが正規のIDです。 – DaveLak

0

あなたがクラッシュの原因にいくつかのより多くの情報を提供することができ、あなたのコード

​​
関連する問題