WooCommerce:SQL 查询 - 如何获取当前 customer_id? (不是 user_id)
WooCommerce: SQL query - how to get current customer_id ? (NOT user_id)
1。问题:
WooCommerce 4.1.0:
\woocommerce\templates\myaccount
dashboard.php
在第 46 行我想添加我的代码,其中包含一些 SQL 查询,以向活跃客户显示他在 [=63= 下的帐户 ("$account_balance
") 上有多少钱] 登录后。
我能拿到主动user_id:
$user_id = get_current_user_id();
$user = new WC_Customer( $user_id );
但我不知道如何获取当前的 customer_id
(需要,因为 table 不包含 user_id
)。
2。我试过的:
我在 phpMyAdmin 中创建了一个名为 L16_transfers
的 table 包含以下列:
transaction_id
customer_id
transfer_date
eur_transferred
eur_refunded
first_name
last_name
order_id
从这个自定义 table 我想获得所有入站和出站交易(eur_transferred
和
eur_refunded
).
我正在使用的另一个 table 是 L16_wc_order_stats
,我想从中获得 net_total
。
但是,L16_wc_order_stats
包含列 customer_id
但不包含 user_id
(分配的数字在数据库中不同)。
3 SQL 查询应该 return 的总和
- 转移
- 退款
- 命令
我将添加/减去以获得当前总余额。
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 的基础知识。)
非常感谢您在更正我的代码时提供的任何帮助。
所以我刚刚使用 Woo 的 customer_lookup
table 编写了一个自定义函数来为您执行此操作。这个 table 有 customer_id
和 user_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();
1。问题: WooCommerce 4.1.0: \woocommerce\templates\myaccount dashboard.php
在第 46 行我想添加我的代码,其中包含一些 SQL 查询,以向活跃客户显示他在 [=63= 下的帐户 ("$account_balance
") 上有多少钱] 登录后。
我能拿到主动user_id:
$user_id = get_current_user_id();
$user = new WC_Customer( $user_id );
但我不知道如何获取当前的 customer_id
(需要,因为 table 不包含 user_id
)。
2。我试过的:
我在 phpMyAdmin 中创建了一个名为 L16_transfers
的 table 包含以下列:
transaction_id
customer_id
transfer_date
eur_transferred
eur_refunded
first_name
last_name
order_id
从这个自定义 table 我想获得所有入站和出站交易(eur_transferred
和
eur_refunded
).
我正在使用的另一个 table 是 L16_wc_order_stats
,我想从中获得 net_total
。
但是,L16_wc_order_stats
包含列 customer_id
但不包含 user_id
(分配的数字在数据库中不同)。
3 SQL 查询应该 return 的总和 - 转移 - 退款 - 命令 我将添加/减去以获得当前总余额。
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 的基础知识。)
非常感谢您在更正我的代码时提供的任何帮助。
所以我刚刚使用 Woo 的 customer_lookup
table 编写了一个自定义函数来为您执行此操作。这个 table 有 customer_id
和 user_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();