感谢页面上的Woocommerce获取order_id类别

时间:2017-10-24 10:05:15

标签: php woocommerce hook-woocommerce sendinblue

我有来自sendinblue的跟踪代码javascript。

我想在此网站中启动“自动化”以进行细分,为此,我必须使用其API将数据从我的网站发送到sendinblue。

在Wocommerce的“谢谢”页面中,我需要了解客户购买的产品类别,并通过JS将此数据发送至sendinblue。

我已将此代码放在functions.php

add_action( 'woocommerce_thankyou', 'analisi' );    

function analisi($order_id) {
    $order = new WC_Order($order_id);   
    $items = $order->get_items();        

    foreach ($items as $item_id => $item_data)
    {
        //getting product object
        $_product = wc_get_product($item_data['item_meta']['_product_id'][0]);

        //getting all the product category
        $pro_cat_array = wp_get_post_terms($_product->ID, 'product_cat');

        $pro_cat = implode(',', $pro_cat_array);
        //storing all the line item as a string form
        $product_js[] = '{category:"' . $pro_cat . '"}';
    }
?>
    <!-- Paste Tracking Code Under Here -->
<script language="text/javascript">
sendinblue.track('categoria_acquisto', {    
  'categoria':'[<?= implode(',', $product_js) ?>]';  
});
</script>
<?php
}
?>

当我模拟订单并查看HTML代码时,数组(对于已发送的类别)为空。

    <script language="text/javascript">
sendinblue.track('categoria_acquisto', {    
  'categoria':'[{category:""}]';  
});
</script>

1 个答案:

答案 0 :(得分:0)

不确定您使用的是哪个版本的WooCommerce,但是对于WC&gt; 3.0,你可以使用类似的东西:

add_action( 'woocommerce_thankyou', 'analisi' );
function analisi( $order_id ) {
    $order      = wc_get_order( $order_id );
    $items      = $order->get_items();
    $product_js = array();

    /**
     * @var WC_Order_Item_Product $item_data
     */
    foreach ( $items as $item_id => $item_data ) {
        $product    = $item_data->get_product();
        $categories = array();

        $terms = get_the_terms( $product->get_id(), 'product_cat' );

        if ( is_wp_error( $terms ) || empty( $terms ) ) {
            continue;
        }

        foreach ( $terms as $term ) {
            $categories[] = $term->name;

            // Comment out the above and use the line below to have category IDs instead
            // $categories[] = $term->term_id;
        }

        $categories_list = implode( ',', $categories );
        if ( $categories_list ) {
            $product_js[] = '{category:"' . $categories_list . '"}';
        }
    }
    ?>
    <!-- Paste Tracking Code Under Here -->
    <script language="text/javascript">
        sendinblue.track('categoria_acquisto', {
            'categoria': '[<?php echo implode( ',', $product_js ) ?>]';
        })
        ;
    </script>
<?php } ?>