[英]Does anybody know how to get a custom woocommerce orders.php on a self created page running?
[英]How to get all orders of current user (for Orders.php page)
我正在嘗試構建幾個短代碼來顯示一些信息,例如用戶下的所有訂單的名稱和訂單號。
這些是簡碼。 第一個返回 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 循環中的返回只會返回第一次迭代,以及似乎沒有初始化的變量等......但用於測試
您可能正在調用簡碼以盡早嘗試; 我調整方法只是為了我自己的測試
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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.