如何获取当前用户的所有订单(for Orders.php page)
How to get all orders of current user (for Orders.php page)
我正在尝试构建几个短代码来显示一些信息,例如用户下的所有订单的名称和订单号。
这些是简码。第一个 returns 0 作为一个值,我不明白我哪里错了。第二个不显示任何值。谁能帮我指出错误?
我需要使用短代码,因为我正在重新创建 orders.php 页面
// Get All Orders numbers of current user
add_shortcode( 'prcsed_order_numb' , 'prcsed_order_1' );
function prcsed_order_1(){
$customer = new WC_Customer( get_current_user_id() );
$order = new WC_Order( $customer_order );
if ( is_a( $order, 'WC_Order' ) ) {
return $order->get_order_number();
}
}
// Get All Orders Name of current user
add_shortcode( 'prcsed_order_name' , 'prcsed_order_2' );
function prcsed_order_2(){
// Get an instance of the WC_Order object
$order = new WC_Order( $customer_order );
foreach ( $customer_orders->orders as $customer_order ) {
return $order = $item->get_name();
}
}
我强烈建议您谨慎实施此解决方案。您发布的代码包含许多问题,它将处理敏感的客户数据。弄错可能会导致数据泄露。
在回调中,prcsed_order_2()
,您试图使用不存在的变量。您还在 foreach 循环中返回,因此它永远不会超过第一次循环迭代。
示例:
// Give the callback function a clear and descriptive name.
function wpse_get_customer_order_names() {
// Can you be certain the user is logged in at this stage...
// Consider how you might want to validate the user.
// Get all orders for the current user.
$customer_orders = wc_get_orders([
'customer_id' => get_current_user_id(),
]);
// Transform the array of order objects into an array of order names.
$order_names = array_map( function( $order ) {
return $order->name;
}, $customer_orders );
// Return as a string, ready for output,
return implode( ', ', $order_names );
}
add_shortcode( 'prcsed_order_name' , 'wpse_get_customer_order_names' );
相同的原则可以应用于涉及客户订单数据的其他相关短代码。除了之前提出的安全问题之外,我还质疑以这种方式实现事物的性能影响。
这里有大量错误,FOR 循环中的 return 只是 return 第一次迭代,变量似乎没有被初始化等....但用于测试
您可能正在调用短代码以尽早尝试;我为自己的测试调整了方法
add_action('init', 'xp33221_add_custom_shortcode');
function xp33221_add_custom_shortcode()
{
add_shortcode( 'prcsed_order_numb' , 'prcsed_order_1' );
add_shortcode( 'prcsed_order_name' , 'prcsed_order_2' );
}
function getCustOrder(int $orderNum): ?WC_Order
{
$order = wc_get_order($orderNum);
if ($order instanceof \WC_Order)) {
return $order;
}
return null;
}
function prcsed_order_1(): ?int
{
$order = getCustOrder($customer_order);
return $order instanceof \WC_Order
? $order->get_order_number()
: $order;
}
function prcsed_order_2() null|mixed
{
$order = getCustOrder($customer_order);
return $order instanceof \WC_Order
? $order->get_order_key()
: $order;
}
我正在尝试构建几个短代码来显示一些信息,例如用户下的所有订单的名称和订单号。
这些是简码。第一个 returns 0 作为一个值,我不明白我哪里错了。第二个不显示任何值。谁能帮我指出错误?
我需要使用短代码,因为我正在重新创建 orders.php 页面
// Get All Orders numbers of current user
add_shortcode( 'prcsed_order_numb' , 'prcsed_order_1' );
function prcsed_order_1(){
$customer = new WC_Customer( get_current_user_id() );
$order = new WC_Order( $customer_order );
if ( is_a( $order, 'WC_Order' ) ) {
return $order->get_order_number();
}
}
// Get All Orders Name of current user
add_shortcode( 'prcsed_order_name' , 'prcsed_order_2' );
function prcsed_order_2(){
// Get an instance of the WC_Order object
$order = new WC_Order( $customer_order );
foreach ( $customer_orders->orders as $customer_order ) {
return $order = $item->get_name();
}
}
我强烈建议您谨慎实施此解决方案。您发布的代码包含许多问题,它将处理敏感的客户数据。弄错可能会导致数据泄露。
在回调中,prcsed_order_2()
,您试图使用不存在的变量。您还在 foreach 循环中返回,因此它永远不会超过第一次循环迭代。
示例:
// Give the callback function a clear and descriptive name.
function wpse_get_customer_order_names() {
// Can you be certain the user is logged in at this stage...
// Consider how you might want to validate the user.
// Get all orders for the current user.
$customer_orders = wc_get_orders([
'customer_id' => get_current_user_id(),
]);
// Transform the array of order objects into an array of order names.
$order_names = array_map( function( $order ) {
return $order->name;
}, $customer_orders );
// Return as a string, ready for output,
return implode( ', ', $order_names );
}
add_shortcode( 'prcsed_order_name' , 'wpse_get_customer_order_names' );
相同的原则可以应用于涉及客户订单数据的其他相关短代码。除了之前提出的安全问题之外,我还质疑以这种方式实现事物的性能影响。
这里有大量错误,FOR 循环中的 return 只是 return 第一次迭代,变量似乎没有被初始化等....但用于测试
您可能正在调用短代码以尽早尝试;我为自己的测试调整了方法
add_action('init', 'xp33221_add_custom_shortcode');
function xp33221_add_custom_shortcode()
{
add_shortcode( 'prcsed_order_numb' , 'prcsed_order_1' );
add_shortcode( 'prcsed_order_name' , 'prcsed_order_2' );
}
function getCustOrder(int $orderNum): ?WC_Order
{
$order = wc_get_order($orderNum);
if ($order instanceof \WC_Order)) {
return $order;
}
return null;
}
function prcsed_order_1(): ?int
{
$order = getCustOrder($customer_order);
return $order instanceof \WC_Order
? $order->get_order_number()
: $order;
}
function prcsed_order_2() null|mixed
{
$order = getCustOrder($customer_order);
return $order instanceof \WC_Order
? $order->get_order_key()
: $order;
}