I am trying to pull line item data from the order and implode it in a specific format. It’s only retrieving the details of the last item in the order right now. I need a pipe separator between each individual set of item details.
I appreciate any help.
function wg_tracking( $order_id ) {
$order = wc_get_order( $order_id );
$shipping_total = $order->get_shipping_total();
$order_total = $order->get_total();
$currency = $order->get_currency();
$coupons = $order->get_coupon_codes();
$items = $order->get_items();
$total_exc_shipping = $order_total - $shipping_total;
$order_discount = $order->get_discount_total();
foreach( $coupons as $coupon ){
$coupon_post_object = get_page_by_title($coupon, OBJECT, 'shop_coupon');
$coupon_id = $coupon_post_object->ID;
$coupon = new WC_Coupon($coupon_id);
}
$wgItems = array();
foreach ( $items as $item ) {
$wgProduct = '';
$wgProduct .= '777777';
$wgProduct .= '::' . $order->get_line_total( $item, true, true );
$wgProduct .= '::' . $item->get_name();
$wgProduct .= '::' . $item->get_id();
}
$wgItems[] = $wgProduct;
$wgItemsList = implode('|', $wgItems); //this is where the problem is, I think
?>
<script>
items: '<?php echo $wgItemsList ?>', //this is where i want to call the items in a string
</script>
2
Answers
Have you tried the following? Assign the stored values to $wgItems array inside the loop. This should fix it on a quick look
There are some mistakes and complications in your code, try the following instead (commented):
Now it will work.
Note: to get the product id from an order item use
get_product_id()
, but notget_id()
which gives theitem_id
as recorded on the related database tables.Related: