将订单总数和客户电子邮件存储在mysql数据库的自定义表中

am46iovg  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(336)

我试图从woocommerce的functions.php文件中完成的 checkout 中提取数据。结帐后,我试图存储自定义生成的代码、生成订单的电子邮件以及订单的总金额。我无法从订单中提取任何数据,并且未能找到任何与此相关的文档。
checkout 成功完成后,必须提取数据。
该表包含“凭证代码”(每笔交易生成的唯一代码)、“用户电子邮件”和“订单总价”列。我找不到一个方法来抓取用户的电子邮件和订单后结帐总额。查询必须插入在函数中生成的凭证id、应从订单明细中获取的电子邮件、设置为0的兑换以及也应从订单明细中获取的值。
在woocommerce checkout 页面上,我有一个内部服务器错误和php致命错误:
调用成员函数 get_data() 在布尔值上。

add_action( 'woocommerce_email_before_order_table', 'generate_code');
function generate_code(){
    $order = wc_get_order( $order_id );    
    $order_data = $order->get_data(); // The Order data
    $order_billing_email = $order_data['billing']['email'];
    $order_total_tax = $order_data['total_tax'];

    $connection = DBLogin();

    $query = "INSERT INTO test_vouchers (voucher_id, email, redeemed, value) VALUES ('$string','$order_billing_email','0','$order_total_tax')";
}

我做错了什么?如何解决此错误?
如何将订单总数和客户电子邮件存储在mysql数据库的自定义表中?

093gszye

093gszye1#

你的问题不是很清楚,也不够详细。我们不知道您是要将此数据添加到wordpress数据库或其他数据库的自定义表中。
如果您试图在wordpress数据库中的自定义表中插入数据,则应使用wpdb类(如我在回答中使用的),否则应使用最后一个代码段。
这个 $order_id 未定义,并且代码引发错误。还有变量 $string 未定义,如果它是索引列,则不需要显示(如下面的第一个代码段中所示)。
看来你的目标是“完成”的订单。使用 woocommerce_email_before_order_table 钩子将使您的代码被触发多次在每个电子邮件通知。而且这个钩子确实不方便触发任何数据库更改。
当订单状态为“完成”时,将触发以下代码。所以有两种情况:
1) 在wordpress数据库中为自定义表执行操作:

add_action( 'woocommerce_order_status_completed', 'generate_code_on_order_complete', 20, 2 );
function generate_code_on_order_complete( $order_id, $order ){
    global $wpdb;

    $billing_email = $order->get_billing_email(); // Billing email
    $total_tax     = $order->get_total_tax();     // Billing email

    $wpdb->query("
        INSERT INTO test_vouchers (email, redeemed, value)
        VALUES ('$billing_email','0','$total_tax');
    ");
}

代码放在活动子主题(或活动主题)的function.php文件中。测试和工作。
2) 将数据插入wordpress数据库以外的其他数据库(未测试):
您应该完成以下代码以使dabase连接到外部数据库并插入数据…记住 $string 未定义。

add_action( 'woocommerce_order_status_completed', 'generate_code_on_order_complete', 20, 2 );
function generate_code_on_order_complete( $order_id, $order ){

    $billing_email = $order->get_billing_email(); // Billing email
    $total_tax     = $order->get_total_tax();     // Billing email

    ## To be completed by you (below) ##

    $connection = DBLogin();

    $query = "INSERT INTO test_vouchers (voucher_id, email, redeemed, value) VALUES ('$string','$billing_email','0','$total_tax')";
}

代码放在活动子主题(或活动主题)的function.php文件中。

相关问题