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

Get product categories ids from order items in WooCommerce

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

谁能指出我正确的方向?

$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() )
    //...
}

如果重要的话,产品只会有一个类别。

我按照某处的建议进行了尝试,但仍然 returns 错误?

$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() )
    //...
}

这会起作用。

For product variations, you always need to get the parent variable product, which you always get using the WC_Order_Item_Product get_product_id() method.