web-dev-qa-db-ja.com

ユーザー作成時にユーザーデータをテーブルに追加しますか?

私はPHPを通してユーザー情報と特定のメタデータを別のテーブルに追加する方法を見つけようとしています。ユーザーがwp_usersおよびwp_usermetaテーブルに投稿したときにこれを行うことを好みます。 WooCommerce AuctionプラグインとSalientテーマを使用しています。

また、データを取得して挿入するためのクエリを実行するPHPファイルを作成した場合、テーブルが最新であることを確認するためにその関数を呼び出すことができます。

これが私が作成した関数です。

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

function save_to_donors( $user_id ) {

    $single = true;

    $user_email = get_userdata($user_id);

    $fn= get_user_meta($user_id, 'first_ name', $single );
    $ln= get_user_meta($user_id, 'last_name', $single );
    $em= $user_email->user_email;
    $ph= get_user_meta($user_id, 'billing_phone', $single );
    $ad= get_user_meta($user_id, 'billing_address_1', $single );
    $ci= get_user_meta($user_id, 'billing_city', $single );
    $st= get_user_meta($user_id, 'billing_state', $single );
    $zi= get_user_meta($user_id, 'billing_postcode',$single );
    $do= get_user_meta($user_id, '_money_spent', $single );

    $sql = "INSERT INTO donors (user_id,first_name,last_name,email," .
    "phone,address,city,state,Zip,amount_donated)".
    "VALUES('$user_id','$fn','$ln','$em','$ph','$ad','$ci','$st','$zi','$do')";

    $result = mysqli_query($wpdb, $sql) or die('Write Error!');

 }
1
dozer

私には、あなたはwoocommerce購入完了フックを求めているはずです。これは、寄付が行われたこととその金額を追加できる場合です。その後、ユーザー情報、寄付金額、その他必要な情報を取得し、寄付者テーブルに保存できます。

これを使って:

add_action('woocommerce_order_status_completed', 'save_to_donors',10,1);

これの代わりに:

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

また、関数に渡すパラメータとして$user_id$order_idに変更します。

$order_idの代わりに$user_idがあなたの関数に渡されるので、あなたはあなたの関数にいくつかの変更を加える必要があるでしょう。 $orderオブジェクトと$user_idを取得するために、以下のコードのいくつかを使用することができます。私は、注文vsユーザーメタから情報を取得する他のコードも見つかりました。

$order = new WC_Order( $order_id );
$user_id = $order->user_id;
$billing_address = $order->get_billing_address();
$billing_address_html = $order->get_formatted_billing_address(); // for printing or displaying on web page
$shipping_address = $order->get_shipping_address();
$shipping_address_html = $order->get_formatted_shipping_address(); // for printing or displaying on web page

このフックの使い方に関する情報 woocommerce_order_status_completed
注文IDからユーザーIDを取得する方法に関する情報

1
stoi2m1

このアクションフックを使用すると、データベースに追加された直後に新しいユーザーのデータにアクセスできます。ユーザーIDは引数としてhookに渡されます。

このアクションがトリガーされたときに、すべてのユーザーメタデータがデータベースに格納されているわけではありません。たとえば、ニックネームはデータベースにありますが、first_nameとlast_nameです。このアクションが起動されたとき、パスワードはすでに暗号化されています。

通常、このフックはカスタム登録フォームによって渡された追加のユーザーメタを保存するために使用されます。

この例では、カスタム登録フィールドによって渡されたfirst_nameフィールドを保存します。

また、登録フィールドの検証はこのフック内では実行しないでください。代わりにregistration_errorsフックを使用して検証してください(registration_errors検証が失敗した場合、user_registerフックは呼び出されません)。

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

function myplugin_registration_save( $user_id ) {

    if ( isset( $_POST['first_name'] ) )
        update_user_meta($user_id, 'first_name', $_POST['first_name']);

}
1
Owais Alam

注:質問の追加/更新された機能をさらに分析した後、この回答はOPの質問とは無関係です。質問の一部が該当すると思われるので、この答えをそのままにして、歴史的な使用のための新しい答えを作成します。

ユーザーがユーザーテーブルに追加されたときに、次のようなものを使用してユーザーメタを作成できます。これをあなたのテーマのfunctions.phpファイルに入れてください。

function myplugin_registration_save( $user_id ) {

    if ( isset( $_POST['first_name'] ) )
        update_user_meta(
            $user_id, 
            'your_key', // name of key 
            $your_value // value of your key
        );

}
add_action( 'user_register', 'myplugin_registration_save', 10, 1 );

このデータを後で使用するために取得するには、次の関数を使用します。

get_user_meta($user_id, 'your_key', $single);

user_register hook に関する追加情報 update_user_meta() に関する追加情報 get_user_meta() に関する追加情報

0
stoi2m1