Woocommerce Get Orders on Thank you page and pass data javascript snippet

14,941

UPDATED
As you are finding hard to locate functions.php file you can created a plugin. Create a PHP file as wh-thankyou-tracking.php under /wp-content/plugins/ and copy paste the below code to it and save it. And form admin panel Activate WH Order Tracking JS plugin

<?php
/**
 * Plugin Name: WH Order Tracking JS
 * Version: 0.1
 * Description: This plugin will add a JS tracking code to WooCommerce Thankyou page.
 * Author: Raunak Gupta
 * Author URI: https://www.webhat.in/
 * Text Domain: wh
 */
if (!defined('ABSPATH'))
{
    exit;
} // Exit if accessed directly

if (!class_exists('WooCommerce'))
{
    exit;
}// Exit if WooCommerce is not active

function wh_CustomReadOrder($order_id)
{
    //getting order object
    $order = wc_get_order($order_id);

    $items = $order->get_items();
    $product_js = [];

    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');

        $sku = $sku = $_product->get_sku();
        $qty = $item_data['item_meta']['_qty'][0];
        $pro_cat = implode(',', $pro_cat_array);
        $pro_brand = $_product->get_attribute('pa_brand'); //replace it with your brand attribute slug
        $pro_price = $item_data['item_meta']['_line_total'][0];

        //storing all the line item as a string form
        $product_js[] = '{id: "' . $sku . '",category:"' . $pro_cat . '",brand:"' . $pro_brand . '",price: "' . $pro_price . '"quantity:"' . $qty . '"}';
    }

    ?>
    <script type="text/javascript">
        order.purchase = {
            currency: 'EUR',
            transactionId: '<?= $order->id ?>',
            products: [<?= implode(',', $product_js) ?>]
        };
    </script>
    <?php
}

add_action('woocommerce_thankyou', 'wh_CustomReadOrder');

Hope this helps!

Share:
14,941
Evangelos
Author by

Evangelos

Updated on June 16, 2022

Comments

  • Evangelos
    Evangelos almost 2 years

    I am trying to read from thankyou.php orders and populate order_id, sku, price, quantity to a javascript snipper. The problem for me is how to "catch" the loop in php and pass those variables to JavaScript Snipper.

    <?php
    
    function CustomReadOrder ( $order_id ) {
        // Lets grab the order
        $order = wc_get_order( $order_id );
        // This is the order total
        $order->get_total();
    
        // This is how to grab line items from the order 
        $line_items = $order->get_items();
    
        // This loops over line items
        foreach ( $line_items as $item ) {
            // This will be a product
            $product = $order->get_product_from_item( $item );
    
            // This is the products SKU
            $sku = $product->get_sku();
    
            // This is the qty purchased
            $qty = $item['qty'];
    
            // Line item total cost including taxes and rounded
            $total = $order->get_line_total( $item, true, true );
    
            // Line item subtotal (before discounts)
            $subtotal = $order->get_line_subtotal( $item, true, true );
    
            echo $order_id."-";
            echo $sku."-";
            echo $qty;
        }
    }
    ?>
    
    <?php add_action( 'woocommerce_thankyou', 'CustomReadOrder' ); ?>
    
    <script type="text/javascript">
    order.purchase = {
        currency: 'EUR',
        transactionId: '<?php echo $order->id ?>',
        products: [{
            id: '{{PRODUCT_SKU}}',
            category: '{{PRODUCT_CATEGORY}}',
            brand: '{{PRODUCT_BRAND}}',
            price: '{{PRODUCT_PRICE}}',
            quantity: '{{PRODUCT_QUANTITY}}'
        }, {
            id: '{{PRODUCT_SKU}}',
            category: '{{PRODUCT_CATEGORY}}',
            brand: '{{PRODUCT_BRAND}}',
            price: '{{PRODUCT_PRICE}}',
            quantity: '{{PRODUCT_QUANTITY}}'
        }]
    };
    </script>