从WooCommerce的订单项中获取产品类别ID

问题描述

我有几个代码片段来获取产品类别,它们可以工作,但是都错过了可变产品的类别。

有人能指出我正确的方向吗?

$items = $order->get_items();
$categories = array();
foreach($items as $item) {
    $product = $item->get_product();
    $product_categories = $product->get_category_ids();
    //...
}

代码段存在相同的问题。 (它使用的是发票插件中的钩子,但我认为这不相关)

add_action( 'wpo_wcpdf_after_item_Meta','wpo_wcpdf_show_product_categories',10,3 );
function wpo_wcpdf_show_product_categories ( $template_type,$item,$order ) {
    wc_get_product_category_list( $item['product']->get_id() )
    //...
}

只有这样,产品才会具有一个类别。

我按照某处的建议尝试了此操作,但仍然返回false?

$the_product = wc_get_product( $item['product']->get_id() );
$variable_categories = wc_get_product_category_list( $the_product->get_id() );

干杯!

解决方法

要从订单商品中获取产品类别ID,请改用以下内容:

$category_ids = array();

foreach($order->get_items() as $item) {
    $product = wc_get_product( $item->get_product_id() );

    $categories = array_merge( $category_ids,$product->get_category_ids() );
    //...
}

因此在您的钩子函数中:

add_action( 'wpo_wcpdf_after_item_meta','wpo_wcpdf_show_product_categories',10,3 );
function wpo_wcpdf_show_product_categories ( $template_type,$item,$order ) {
    wc_get_product_category_list( $item->product_get_id() )
    //...
}

这将起作用。

对于产品变体,您始终需要获取父变量产品,该产品总是使用WC_Order_Item_Product get_product_id()方法获得。