Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Woocommerce-在多供应商设置中按作者/用户对购物车中的产品进行排序_Php_Wordpress_Sorting_Woocommerce_Dokan - Fatal编程技术网

Php Woocommerce-在多供应商设置中按作者/用户对购物车中的产品进行排序

Php Woocommerce-在多供应商设置中按作者/用户对购物车中的产品进行排序,php,wordpress,sorting,woocommerce,dokan,Php,Wordpress,Sorting,Woocommerce,Dokan,我有一个多供应商的Woocommerce商店,我正在尝试根据供应商是谁将购物车分成几个部分例如: 供应商1 产品C 产品B 供应商2 产品A Dokan使用一个自定义角色“vendor”来扩展用户类,因此要获得供应商的ID,我应该能够使用如下内容: $post_data = get_post( $cart_item['product_id'] ); $vendor_id = $post_data->post_author; 这是可行的,但它只会获取第一个供应商ID,并对购物

我有一个多供应商的Woocommerce商店,我正在尝试根据供应商是谁将购物车分成几个部分例如:

  • 供应商1
    • 产品C
    • 产品B
  • 供应商2
    • 产品A
Dokan使用一个自定义角色“vendor”来扩展用户类,因此要获得供应商的ID,我应该能够使用如下内容:

$post_data = get_post( $cart_item['product_id'] ); 
$vendor_id = $post_data->post_author;
这是可行的,但它只会获取第一个供应商ID,并对购物车中的所有剩余产品重复该ID。我知道这是因为我没有检索数组,但我在WP文档中找不到任何关于如何获取作者ID数组的内容(除了WP_list_authors,但这并不奏效)

作为一个实验,只要我按类别排序,我就成功地实现了拆分+排序,因为我可以使用wp_get_post_terms()。我不能复制作者数据,但是

当前(相关)代码如下:

<?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>


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

关于如何以与获取类别相同的方式获取购物车产品的作者信息,有何想法?我很困惑


提前感谢您提供的一切帮助

下面是一个关于如何按Dokan供应商商店名称对购物车项目进行排序和显示的示例:

<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>



相关:

Ohhh!我明白我做错了什么。非常感谢你!get_post_field()是获取post_作者的更好方法。(顺便说一句,$store_url前面有一个杂散的/front。我无法编辑它,因为编辑需要6个字符长,但我想我应该提到它!)@LoicTheAztec:这段代码仍然有效吗?我犯了一个错误“语法错误,意外'@LoicTheAztec是的,我看到了。但我觉得这个更合适。但我无法将其添加到functions.php中进行测试。我必须以另一种方式添加这个吗?@LoicTheAztec-ah。。我的错。。是可以通过function.php实现,还是只能通过模板实现?啊,我明白了。表示在woocommerce templates文件夹中或通过子主题编辑cart.php文件。正确的?