Woocommerce - 在多供应商设置中按 Author/User 对购物车中的产品进行排序
Woocommerce - Sort products in cart by Author/User in Multi-vendor setup
我有一家使用 Dokan plugin 的多供应商 Woocommerce 商店,我正在尝试根据供应商是谁将购物车分成几个部分。 例如:
- 供应商 1
- 产品 C
- 产品 B
- 供应商 2
- 产品 A
Dokan 使用自定义角色 'vendor' 来扩展用户 class,所以要获取供应商的 ID,我应该可以使用类似的东西:
$post_data = get_post( $cart_item['product_id'] );
$vendor_id = $post_data->post_author;
这确实有效,但它只会获取第一个供应商 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>
相关:
我有一家使用 Dokan plugin 的多供应商 Woocommerce 商店,我正在尝试根据供应商是谁将购物车分成几个部分。 例如:
- 供应商 1
- 产品 C
- 产品 B
- 供应商 2
- 产品 A
Dokan 使用自定义角色 'vendor' 来扩展用户 class,所以要获取供应商的 ID,我应该可以使用类似的东西:
$post_data = get_post( $cart_item['product_id'] );
$vendor_id = $post_data->post_author;
这确实有效,但它只会获取第一个供应商 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>
相关: