我只像管理员一样看到“我的订单”列表,如何使其对所有客户可见?

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

以上是关于我只像管理员一样看到“我的订单”列表,如何使其对所有客户可见?的主要内容,如果未能解决你的问题,请参考以下文章

如何简单地使其对公众保密?无需为我的脚本更改任何内容

为啥我无法通过使其对缓存友好来加速我的程序?

我应该合并事实表的列以使其更窄,还是应该通过大量列使其对用户更友好?

简单的 ListView 数据绑定

Django Admin:获取根据 GET 字符串过滤的 QuerySet,与更改列表中看到的完全一样?

如何将 pyqt5 qcomboBox 中的文本应用于列表值