如何在 WooCommerce 结帐时从订单中获取类别?

Jos*_*dum 1 php wordpress checkout woocommerce hook-woocommerce

我想在 WooCommerce 结账时获取购物车中商品的类别。我想提取它,然后将其放置在我的自定义结帐中的字段中。

我正在使用WooCommerce MultiStep Checkout Wizard高级插件和特定的挂钩

add_action('woocommerce_multistep_checkout_before_order_info', 'destinationStep');
Run Code Online (Sandbox Code Playgroud)

我有点迷失了,找不到太多我需要用来获取它的 文档。

我试图让项目出现,但我只得到一个空数组。

$order = new WC_Order( $order_id );
$items = $order->get_items(); 
var_dump($items);
Run Code Online (Sandbox Code Playgroud)

Loi*_*tec 6

您可以先尝试使用您的方法new WC_Order( $order_id );,这样:

function destinationStep( $order_id )

    global $woocommerce; 

    $order = new WC_Order( $order_id );
    $items = $order->get_items(); 
    // echo var_dump($items);

    //----
    foreach ($items as $key => $item) {
        $product_name = $item['name'];
        $product_id = $item['product_id'];
        $terms = get_the_terms( $product_id, 'product_cat' );
        // echo var_dump($terms);

        foreach ( $terms as $term ) {
            // Categories by slug
            $product_cat_slug= $term->slug;
        }
    }

add_action('woocommerce_multistep_checkout_before_order_info', 'destinationStep', 10, 1);
Run Code Online (Sandbox Code Playgroud)

如果仍然不起作用,请尝试使用new WC_Order($post->ID)方法:

function destinationStep()

    global $woocommerce, $post; 

    $order = new WC_Order($post->ID);
    $items = $order->get_items(); 
    // echo var_dump($items);

    //----
    foreach ($items as $key => $item) {
        $product_name = $item['name'];
        $product_id = $item['product_id'];
        $terms = get_the_terms( $product_id, 'product_cat' );
        // echo var_dump($terms);

        foreach ( $terms as $term ) {
            // Categories by slug
            $product_cat_slug= $term->slug;
        }
    }

add_action('woocommerce_multistep_checkout_before_order_info', 'destinationStep');
Run Code Online (Sandbox Code Playgroud)

更新-经过一番思考:

无法获取“post_type”=>“shop_order”的订单 ID,因为它尚不存在。该订单 ID 在客户提交订单时生成,但在结账页面之前不会生成。
所以在这种情况下,得到一个空数组是正常的。