我使用此功能来排序Woocommerce订单管理项目的菜单顺序,但但带有变量的产品不能正确显示。如果有几个带有变量的产品的顺序,只有其中一个将被显示。
编辑:我们遇到一个产品多个项目具有不同属性的问题:
项目1:产品A,变量a,属性:红色,数量12
item2:产品A,变量a,属性:绿色,18件
排序后只显示:
项目1:产品A,变量a,属性:红色,数量12
换句话说,具有相同变化标识的产品物料存在问题。
add_filter('woocommerce_order_get_items', 'custom_woocommerce_order_get_items', 10, 2);
function custom_woocommerce_order_get_items($items, $object)
{
//no need to reorder if less than 2 products
if(count($items) < 2)
return $items;
//create a list of products within the order
$products = array();
foreach($items as $key => $item)
{
$products[ $item['product_id'] ] = $key;
}
$sorted_items = array();
global $post;
$args = array(
'posts_per_page' => -1,
'post_type' => 'product',
'orderby' => 'menu_order',
'order' => 'ASC',
'post__in' => array_keys($products)
);
$custom_query = new WP_Query($args);
while($custom_query->have_posts())
{
$custom_query->the_post();
$sorted_items[ $products[$post->ID] ] = $items[ $products[$post->ID] ];
}
//check for any left outside items
foreach($items as $key => $item)
{
if(isset($sorted_items[$key]))
$sorted_items[ $key ] = $item;
}
return $sorted_items;
}
1条答案
按热度按时间9jyewag01#
已更新:(当产品是可变产品时,包括变体ID)
代码中的主要问题是在查询中需要获取also
product_variation
post类型,在第一个循环中需要获取变量产品的变体ID。此外,这段代码是过时的WooCommerce 3+作为订单项目现在是一个
WC_Order_Item_Product
对象,你需要使用这个类的可用方法代替。您不需要
global $post;
对象,因为它已经作为函数中的一个参数。我重新查看了您的所有代码:
经过测试,适用于所有产品,包括WooCommerce v2.5.x到v3.2+上的产品变体