我只像管理员一样看到“我的订单”列表,如何使其对所有客户可见?
Posted
技术标签:
【中文标题】我只像管理员一样看到“我的订单”列表,如何使其对所有客户可见?【英文标题】:I see 'my orders' list only like admin, how to male it visible for all customers? 【发布时间】:2022-01-02 03:20:49 【问题描述】:我在我的帐户中创建了一个新标签,所有客户都必须在其中查看他们的所有订单。它是自定义的,因为设计与默认订单表非常不相似。 像管理员一样,我看到了我所有的订单。但是当我尝试像普通用户一样注册并进行测试时,选项卡是空的。因此,仅当当前用户 = 管理员时才会显示订单。如何解决这个问题?
/**
* 1. Register new endpoint slug to use for My Account page
*/
/**
* @important-note Resave Permalinks or it will give 404 error
*/
function ts_custom_add_my_purchases_endpoint()
add_rewrite_endpoint( 'my_purchases', EP_ROOT | EP_PAGES );
add_action( 'init', 'ts_custom_add_my_purchases_endpoint' );
/**
* 2. Add new query var
*/
function ts_custom_my_purchases_query_vars( $vars )
$vars[] = 'my_purchases';
return $vars;
add_filter( 'woocommerce_get_query_vars', 'ts_custom_my_purchases_query_vars', 0 );
/**
* 3. Insert the new endpoint into the My Account menu
*/
function ts_custom_add_my_purchases_link_my_account( $items )
$items['my_purchases'] = 'My purchases';
return $items;
add_filter( 'woocommerce_account_menu_items', 'ts_custom_add_my_purchases_link_my_account' );
/**
* 4. Add content to the new endpoint
*/
function ts_custom_my_purchases_content() ?>
<section class="order">
<?php
$orders = wc_get_orders( array(
'numberposts' => -1,
'orderby' => 'date',
'order' => 'DESC',
'author' => get_current_user_id(),
) );
//* Loop through each WC_Order object
foreach( $orders as $order )?>
<div class="order-wrapper product d-flex col-12">
<?php
$order_data = $order->get_data(); // The Order data
$order_id = $order_data['id'];
$order_currency = $order_data['currency'];
$order_status = $order_data['status']; ?>
<div class="order-number">#<?php echo $order_id;?></div>
<div class="order-inner">
<div class="order-inner-top">
<?php
foreach ($order->get_items() as $key => $lineItem)
$product_id = $lineItem['product_id'];
$product = wc_get_product( $product_id );
$item_meta_data = $lineItem->get_meta_data();
$colormeta = $lineItem->get_meta( 'pa_color', true );
$sizemeta = $lineItem->get_meta( 'pa_size', true );
echo '<div class="order-inner-top-inner"><div class="order-slider-inner"> <div class="order-inner-left"><div class="order-image">' . $product->get_image(['322', '304']) . '</div></div>';
echo '<div class="order-inner-right"><div class="order-info-item order-info-item-name">' . $lineItem['name'] . '</div><div class="order-info-item order-info-item "><span class="order-price">' . $lineItem['total'] . ' ' . $order_currency . '</span></div><div class="order-item-quantity"> '. ' Quantity: ' . $lineItem['qty'] . '</div>';
echo '<div class="order-item-metas">' . $colormeta . ' , ' . $sizemeta . '</div>';
echo '</div></div></div>'; ?>
</div>
<div class="order-inner-bottom">
<div class="d-flex justify-content-center">
<button class="order-total"><?php echo get_theme_mod('orders_total_button');?></button>
</div>
<div class="totals-toggle">
<div class="order-info-item bottom"> <span>Total Price:</span><span class="order-total-price"> <?php echo $order->get_total() . ' ' . $order_currency; ?></span></div>
<div class="order-info-item bottom"> <span>Total Quantity:</span> <?php echo $order->get_item_count(); ?> item(s)</div>
<div class="order-info-item bottom"> <span>Status:</span> <?php echo $order_status;?></div>
<div class="order-info-item bottom"> <span>Order Date: </span> <?php echo $order->order_date; ?></div>
</div>
</div>
</div>
</div>
<?php ?>
</section>
<?php
add_action( 'woocommerce_account_my_purchases_endpoint', 'ts_custom_my_purchases_content' );
【问题讨论】:
【参考方案1】:您看不到订单是非管理员用户,因为在 wc_get_orders 参数中您指定要获取作者是当前用户的订单。
在 WooCommerce 中,下订单的用户不是订单的作者。如果你想获取当前用户的订单,你必须像这样重写你的 wc_get-orders 调用:
$orders = wc_get_orders( array(
'numberposts' => -1,
'orderby' => 'date',
'order' => 'DESC',
'customer_id' => get_current_user_id(),
) );
【讨论】:
不知道为什么没用,还是一样 帮助。 polylang 让我很困惑。那你!我在哪里可以阅读所有这些参数?例如,我需要分页。 @libertarian 检查此link以上是关于我只像管理员一样看到“我的订单”列表,如何使其对所有客户可见?的主要内容,如果未能解决你的问题,请参考以下文章
我应该合并事实表的列以使其更窄,还是应该通过大量列使其对用户更友好?