Woocommerce - 在多供应商设置中按作者/用户对购物车中的产品进行排序 [英] Woocommerce - Sort products in cart by Author/User in Multi-vendor setup

查看:43
本文介绍了Woocommerce - 在多供应商设置中按作者/用户对购物车中的产品进行排序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一家使用 Dokan 插件 的多供应商 Woocommerce 商店,我正在尝试拆分根据供应商是谁将购物车分成几个部分.例如:

I have a multivendor Woocommerce shop using Dokan plugin and I'm trying to split out the shopping cart into sections based on who the vendor is. For example:

  • 供应商 1
    • 产品 C
    • 产品 B
    • 产品 A

    Dokan 使用自定义角色vendor"来扩展用户类,因此要获取供应商的 ID,我应该可以使用以下内容:

    Dokan uses a custom role 'vendor' to extend the user class, so to get the ID of the vendors, I should be able to use something like:

    $post_data = get_post( $cart_item['product_id'] ); 
    $vendor_id = $post_data->post_author;
    

    这确实有效,但它只会获取第一个供应商 ID,并简单地为购物车中的所有剩余产品重复该 ID.我知道这是因为我没有检索数组,但我在 WP 文档中找不到任何关于如何获取作者 ID 数组的内容(wp_list_authors 除外,但效果不佳).

    This does work, but it will only get the first vendor ID and simply repeats that for all remaining products in the cart. I know this is because I'm not retrieving an array but I can't really find anything in the WP documentation on how to get an array of author IDs (other than wp_list_authors, but that doesn't work well).

    作为一项实验,只要我按类别排序,我就设法使拆分 + 排序工作,因为我可以使用 wp_get_post_terms().不过,我无法为作者数据复制此内容...

    As an experiment, I managed to get the splitting + sorting working so long as I'm sorting by categories, since I can use wp_get_post_terms(). I can't replicate this for author data, though...

    当前(相关)代码如下:

    Current (relevant) code is below:

    <?php
    $cat_sort = array();
    
    foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
      $product_id = $cart_item['product_id'];
      $cat_ids = wp_get_post_terms( $product_id, 'product_cat', array( 'fields' => 'ids' ) );
    
      foreach ( $cat_ids as $id ) {
        $cat_sort[$id][$cart_item_key] = $cart_item;
      }                                                    
    
    }
    
    ksort( $cat_sort ); 
    
    $grouped_cart_items = array();
      foreach ( $cat_sort as $cat_id => $cart_items ) {
        $term = get_term( $cat_id, 'product_cat' );                           
    ?>
    <tr>
      <td colspan="6" class=""><strong><?php echo $term->name; ?></strong></td>
    </tr>
    

    (在此之后是实际的产品循环,这里不重要,因为它们的排序发生在上面的代码中)

    (After this is the actual product loop which shouldn't be important here because their sort ordering happens in the above code)

    关于如何以与获取类别相同的方式获取购物车产品的作者信息的任何想法?我真的很难过...

    Any ideas on how I can get author info for the cart products the same way I can get the categories? I'm pretty stumped...

    预先感谢您的任何帮助!

    Thanks in advance for any and all assistance!

    推荐答案

    以下是关于如何按 Dokan 供应商商店名称排序和显示购物车项目的示例:

    Here is an example on how to sort and display cart items by Dokan vendor store name:

    <table>
    <?php
    
    $car_items  = WC()->cart->get_cart(); // Cart items
    
    $items_sort = array(); // Initializing
    
    // Loop through cart items
    foreach ( $car_items as $cart_item_key => $cart_item ) {
        // Get the vendor_id
        $vendor_id   = get_post_field( 'post_author', $cart_item['product_id'] );
    
        $store_info  = dokan_get_store_info( $vendor_id ); // Get the store data
        $store_name  = $store_info['store_name'];          // Get the store name
    
        // Set in multidimentional array the vendor and then the cart item key
        $items_sort[$store_name][$cart_item_key] = $vendor_id;
    }
    
    if ( count($car_items) > 1 ) {
        ksort( $items_sort ); // Sorting by vendor name
    }
    
    // 1st Loop by vendor name
    foreach ( $items_sort as $store_name => $values ) {
        $vendor_id  = reset($values); // The vendor id
        /$store_url = dokan_get_store_url( $vendor_id );  // Get the store URL (if needed)
        ?>
        <tr>
            <!-- Store name display -->
            <td colspan="6" class="store-name"><strong><?php echo $store_name; ?></strong></td>
        </tr>
        <?php
        // 2nd Loop the cart items for the vendor name
        foreach( $values as $cart_item_key => $vendor_id) {
    
            // Retreive the cart item from the cart item key
            $cart_item = $car_items[$cart_item_key];
            ?>
            <tr>
                <!-- Product name display -->
                <td colspan="6" class="product-name"><?php echo $cart_item['data']->get_name(); ?></td>
            </tr>
            <?php
    
        } // End of 2nd Loop
    
    } // End of 1st Loop
    
    ?>
    </table>
    

    相关:显示 dokan 供应商名称Woocommerce 单个产品页面

    这篇关于Woocommerce - 在多供应商设置中按作者/用户对购物车中的产品进行排序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆