Order items in a JS tracking code on Order received page in Woocommerce

别等时光非礼了梦想. 提交于 2020-01-03 06:34:09

问题


I am trying to integrate a tracking code in Woocommerce Thankyou page. I found just the order id to fill it out. But I don't know how to complete this for order items data.

Here is my actual code:

<script type="text/javascript">
ADMITAD = window.ADMITAD || {};

ADMITAD.Invoice = ADMITAD.Invoice || {};

ADMITAD.Invoice.broker = "adm";     // deduplication parameter (for Admitad by default)

ADMITAD.Invoice.category = "1";     // action code (defined during integration)


var orderedItem = [];               // temporary array for product items


// repeat for every product item in the cart

orderedItem.push({

  Product: {

  productID: 'product_id', // internal product ID (not more than 100 characters, the same as in your product feed)

  category: '1',               // tariff code (defined during integration)

  price: 'price',          // product price

  priceCurrency: "RON",        // currency code in the ISO-4217 alfa-3 format

 },

 orderQuantity: '{{quantity}}',   // product quantity

 additionalType: "sale"           // always sale

 });


ADMITAD.Invoice.referencesOrder = ADMITAD.Invoice.referencesOrder || [];
// adding items to the order

ADMITAD.Invoice.referencesOrder.push({

  orderNumber: "<?php echo $order->get_id(); ?>;", // internal order ID (not more than 100 characters)

  orderedItem: orderedItem

});

// Important! If order data is loaded via AJAX, uncomment this string. 

// ADMITAD.Tracking.processPositions();

</script>

Any help is appreciated.


回答1:


The following revisited code adds the correct order items loop and uses "Order received" page (Thankyou) dedicated action hook:

add_action( 'woocommerce_thankyou', 'js_tracking_thank_you_page', 90, 1 );
function js_tracking_thank_you_page( $order_id ) {
    // Get the WC_Order instance Object
    $order = wc_get_order( $order_id );

    // Output
    ?>
    <script type="text/javascript">
    ADMITAD = window.ADMITAD || {};

    ADMITAD.Invoice = ADMITAD.Invoice || {};

    // deduplication parameter (for Admitad by default)
    ADMITAD.Invoice.broker = "adm";

    // action code (defined during integration)
    ADMITAD.Invoice.category = "1";

    // temporary array for product items
    var orderedItem = [];

    <?php
    // Loop through Order items
    foreach( $order->get_items() as $item ) :
        $product = $item->get_product();
    ?>
    orderedItem.push({

      Product: {
        // internal product ID (not more than 100 characters, the same as in your product feed)
        productID: '<?php echo $item->get_product_id(); ?>',

        // tariff code (defined during integration)
        category: '1',

        // product price
        price: '<?php echo $product->get_price(); ?>',

        // currency code in the ISO-4217 alfa-3 format
        priceCurrency: '<?php echo $order->get_currency(); ?>',
      },
      // product quantity
      orderQuantity: '<?php echo $item->get_quantity(); ?>',

      additionalType: "sale" // always sale

    });
    <?php endforeach; // End of Loop ?>

    // adding items to the order
    ADMITAD.Invoice.referencesOrder = ADMITAD.Invoice.referencesOrder || [];

    ADMITAD.Invoice.referencesOrder.push({
      // internal order ID (not more than 100 characters)
      orderNumber: "<?php echo $order->get_id(); ?>;",

      orderedItem: orderedItem

    });

    // Important! If order data is loaded via AJAX, uncomment this string.
    // ADMITAD.Tracking.processPositions();
    </script>
    <?php
}

It should works (Tested).

Related:

  • How to get WooCommerce order details
  • Get Order items and WC_Order_Item_Product in Woocommerce 3

Addition - Live currency conversion

1) Install and active this free plugin: Euro FxRef Currency Converter

2) Enable auto currency conversion from 'RON' to 'EUR' (product price example).

replace:

// product price
price: '<?php echo $product->get_price(); ?>',

by the following:

// Converted product price (rounded with 2 decimals)
<?php $price = EuroFxRef::convert( $product->get_price(), 'RON', 'EUR' ); ?>
price: '<?php echo round( $price, 2 );  ?>',

Tested and works… This should do the trick.



来源:https://stackoverflow.com/questions/52783743/order-items-in-a-js-tracking-code-on-order-received-page-in-woocommerce

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!