使用 Dokan 插件时按供应商对 WooCommerce 购物车项目进行排序
Sort WooCommerce cart items by vendor when using Dokan plugin
我们正在研究一种解决方案,可以按供应商商店名称对购物车中的产品进行排序和结帐。我们在这里找到了这个:Woocommerce sort cart products by product category 但我们必须为我们的案例扩展这段代码。每个产品都有一个供应商。所以我们不必检查产品是否没有供应商。
我不确定如何以正确的方式输出数组。我可以这样做吗?
add_action( 'woocommerce_cart_loaded_from_session', function() {
global $woocommerce;
// Build product array
$products_in_cart = array();
// Loop through cart items
foreach ( $woocommerce->cart->cart_contents as $key => $item ) {
// Get product object
$product = $item->get_product();
// Author id
$author_id = $product->post->post_author;
// Shopname
$vendor = dokan()->vendor->get( $author_id );
$shop_name = $vendor->get_shop_name();
$products_in_cart[ $key ] = $shop_name[0]->name;
}
ksort( $products_in_cart );
// Build cart array
$cart_contents = array();
foreach ( $products_in_cart as $cart_key => $Vendor_store ) {
$cart_contents[ $cart_key ] = $woocommerce->cart->cart_contents[ $cart_key ];
}
// Output sorted cart
$woocommerce->cart->cart_contents = $cart_contents;
}, 100 );
更新:尝试以下经过简化和重新访问的代码:
add_action( 'woocommerce_cart_loaded_from_session', 'sort_cart_items_by_vendor', 100 );
function sort_cart_items_by_vendor() {
$items_to_sort = $cart_contents = array(); // Initializing
// Loop through cart items
foreach ( WC()->cart->cart_contents as $item_key => $cart_item ) {
$vendor_id = get_post_field( 'post_author', $cart_item['product_id']);
$store_info = dokan_get_store_info( $vendor_id );
$items_to_sort[ $item_key ] = $store_info['store_name'];
}
ksort( $items_to_sort );
// Loop through sorted items key
foreach ( $items_to_sort as $cart_item_key => $store_name ) {
$cart_contents[ $cart_item_key ] = WC()->cart->cart_contents[ $cart_item_key ];
}
// Set sorted items as cart contents
WC()->cart->cart_contents = $cart_contents;
}
代码进入活动子主题(或活动主题)的 functions.php 文件。它应该有效。
相关:
我们正在研究一种解决方案,可以按供应商商店名称对购物车中的产品进行排序和结帐。我们在这里找到了这个:Woocommerce sort cart products by product category 但我们必须为我们的案例扩展这段代码。每个产品都有一个供应商。所以我们不必检查产品是否没有供应商。
我不确定如何以正确的方式输出数组。我可以这样做吗?
add_action( 'woocommerce_cart_loaded_from_session', function() {
global $woocommerce;
// Build product array
$products_in_cart = array();
// Loop through cart items
foreach ( $woocommerce->cart->cart_contents as $key => $item ) {
// Get product object
$product = $item->get_product();
// Author id
$author_id = $product->post->post_author;
// Shopname
$vendor = dokan()->vendor->get( $author_id );
$shop_name = $vendor->get_shop_name();
$products_in_cart[ $key ] = $shop_name[0]->name;
}
ksort( $products_in_cart );
// Build cart array
$cart_contents = array();
foreach ( $products_in_cart as $cart_key => $Vendor_store ) {
$cart_contents[ $cart_key ] = $woocommerce->cart->cart_contents[ $cart_key ];
}
// Output sorted cart
$woocommerce->cart->cart_contents = $cart_contents;
}, 100 );
更新:尝试以下经过简化和重新访问的代码:
add_action( 'woocommerce_cart_loaded_from_session', 'sort_cart_items_by_vendor', 100 );
function sort_cart_items_by_vendor() {
$items_to_sort = $cart_contents = array(); // Initializing
// Loop through cart items
foreach ( WC()->cart->cart_contents as $item_key => $cart_item ) {
$vendor_id = get_post_field( 'post_author', $cart_item['product_id']);
$store_info = dokan_get_store_info( $vendor_id );
$items_to_sort[ $item_key ] = $store_info['store_name'];
}
ksort( $items_to_sort );
// Loop through sorted items key
foreach ( $items_to_sort as $cart_item_key => $store_name ) {
$cart_contents[ $cart_item_key ] = WC()->cart->cart_contents[ $cart_item_key ];
}
// Set sorted items as cart contents
WC()->cart->cart_contents = $cart_contents;
}
代码进入活动子主题(或活动主题)的 functions.php 文件。它应该有效。
相关: