WooCommerce:SQL 查询 - 如何获取当前的 customer_id? (不是用户 ID)

Posted

技术标签:

【中文标题】WooCommerce:SQL 查询 - 如何获取当前的 customer_id? (不是用户 ID)【英文标题】:WooCommerce: SQL query - how to get current customer_id ? (NOT user_id) 【发布时间】:2020-06-19 17:16:01 【问题描述】:

1.问题: WooCommerce 4.1.0: \woocommerce\templates\myaccount 仪表盘.php

在第 46 行,我想添加包含一些 SQL 查询的代码,以显示活跃客户在他登录后在“我的帐户”下的帐户 (“$account_balance”) 上有多少钱。

我可以得到活跃的user_id:

$user_id = get_current_user_id();
$user = new WC_Customer( $user_id );

但我不知道如何获取当前的customer_id(需要,因为表中不包含user_id)。

2。我试过的:

我在 phpMyAdmin 中创建了一个名为 L16_transfers 的表,其中包含以下列:

transaction_id
customer_id
transfer_date
eur_transferred
eur_refunded
first_name
last_name
order_id

我想从这个自定义表中获取所有入站和出站事务(eur_transferredeur_refunded)。

我正在使用的另一个表是L16_wc_order_stats,我想从中获取net_total。 但是,L16_wc_order_stats 包含列 customer_id 但不包含 user_id(分配的数字在数据库中不同)。

3 个 SQL 查询应返回总和 - 转移 - 退款 - 订单 我将添加/减去以获得当前总余额。

3.我的代码:

<?php

//
// variable declarations
//

global $account_balance, $transferred_total, $refunded_total, $orders_total, $net_total;
global $wpdb;

$account_balance = 0.00;
$transferred_total = 0.00;
$refunded_total = 0.00;
$orders_total = 0.00;

$user_id = get_current_user_id();
$user = new WC_Customer( $user_id );

$customer_id = get_customer_id();
$customer = new WC_Customer( $customer_id );

//
// first output testing
//

echo "Customer id: " . print_r($customer_id). "<br>"; // I always get NULL, also tried with sprintf and echo
echo "Customer id: " . $customer_id . "<br>";
print_r($customer_id);
sprintf($customer_id);

print_r ($customer); // I always get NULL, also tried with sprintf and echo
echo "Customer: " . $customer. "<br><br>";
echo "Customer: " . print_r($customer);

echo "User id: " . $user_id . "<br>"; // user_id output works
var_dump($user["id"]["display_name"]["role"]);
echo var_dump($user['id']);

//
// Three SQL queries
//

$transferred_total = $wpdb->get_var("

    SELECT SUM(eur_transferred) FROM L16_transfers WHERE customer_id = $customer_id
");

echo "<b>" . "Transfers grand total: " . "</b>" . $transferred_total . " €<br>";

$refunded_total = $wpdb->get_var("

    SELECT SUM(eur_refunded) FROM L16_transfers WHERE customer_id = $customer_id
");

echo "<b>" . "Refunds grand total: " . '</b>' . $refunded_total . " €<br>";

$orders_total = $wpdb->get_var("

    SELECT SUM(net_total) FROM L16_wc_order_stats WHERE customer_id = $customer_id
");

echo "<b>Orders grand total: </b>" . $orders_total . " €<br><br>";
var_dump ($orders_total); // solely for testing output

$account_balance = $transferred_total + $refunded_total - $orders_total

var_dump ($account_balance);
echo $account_balance;
echo "<h1>Your current account balance: </h1><b>" . $account_balance . "</b>";

?>
</p>

我认为我在处理数组或错误解释查询输出方面犯了一些错误。

(我是 WooCommerce/WordPress 的新手,对 PHP 和 SQL 仅有基本的了解。)

非常感谢您在更正我的代码时提供的任何帮助。

【问题讨论】:

【参考方案1】:

所以我刚刚编写了一个自定义函数来为您执行此操作,该函数使用 Woo 的 customer_lookup 表。该表同时具有customer_iduser_id

// place in your theme functions.php or a functionality plugin
function my_get_customer_id_from_user_id($user_id = -1)

    // if no use_id passed as a param use the current user id
    if (-1 === $user_id) 
        $user_id = get_current_user_id();
    

    global $wpdb;

    // use woo's customer lookup table which has both customer_id and user_id
    $tablename = $wpdb->prefix . "wc_customer_lookup";

    // setup query
    $sql = $wpdb->prepare("SELECT customer_id FROM $tablename WHERE user_id = %d", $user_id);


    $customer_id = $wpdb->get_var($sql);


    return $customer_id;


// usage in your template
$customer_id = my_get_customer_id_from_user_id();

【讨论】:

非常感谢@mikerojas!你的功能就像一个魅力! 也许你可以在这里帮帮我:***.com/questions/62957023/… ?

以上是关于WooCommerce:SQL 查询 - 如何获取当前的 customer_id? (不是用户 ID)的主要内容,如果未能解决你的问题,请参考以下文章

如何使用我的 sql 查询在 woocommerce 中删除已完成的订单

如何在 WooCommerce 中使用 SQL 查询选择特定类别的产品

获取具有相似 SKU 的 WooCommerce 产品列表

sql 获取WooCommerce产品类型

sql 从Woocommerce订单获取客户数据

限制删除订单数量 SQL Query