是否在创建用户时将用户数据添加到表中?

时间:2016-07-20 作者:dozer

我试图弄清楚如何通过PHP将用户信息和特定元数据添加到单独的表中。当用户发布到wp_userswp_usermeta 桌子我正在使用WooCommerce拍卖插件和突出主题。

另外,如果我创建了一个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!\');

 }

3 个回复
最合适的回答,由SO网友:stoi2m1 整理而成

在我看来,你应该寻求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 我还发现了一些其他代码,可以从order和users元中获取信息,但不确定它们是否会有所不同。

$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
有关如何get user id from order id

SO网友:Owais Alam

此操作挂钩允许您在新用户添加到数据库后立即访问其数据。用户id作为参数传递给hook。

触发此操作时,并非所有用户元数据都存储在数据库中。例如,昵称在数据库中,但名为first\\u name和last\\u name。触发此操作时,密码已加密。

通常,此挂钩用于保存自定义注册表传递的其他用户元。

此示例将保存自定义注册字段传递的first\\u name字段。

此外,请记住,注册字段的验证不应在此挂钩内执行!改为使用registration\\u errors钩子进行验证(如果registration\\u errors验证失败,则不会调用user\\u 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\']);

}

SO网友:stoi2m1

NOTE: 在进一步分析问题中添加/更新的函数后,此答案与OP的问题无关。我保留这个答案,并创建一个新的答案供历史使用,因为部分问题似乎是适用的。

当用户被添加到用户表中时,您可以使用如下内容来创建用户元。将其放入函数中。主题的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()