/**
  * Display widget content
  */
 public function widget($args, $instance)
 {
     $cart = Cart::getInstance();
     echo $args['before_widget'];
     if (!empty($instance['title'])) {
         echo $args['before_title'] . apply_filters('widget_title', $instance['title']) . $args['after_title'];
     }
     echo $cart->render('contents');
     echo $args['after_widget'];
 }
 /**
  * Display widget content
  *
  * This widget will only be displayed on single product pages.
  */
 public function widget($args, $instance)
 {
     if (!is_singular(CGIT_PRODUCT_POST_TYPE)) {
         return;
     }
     $cart = Cart::getInstance();
     echo $args['before_widget'];
     if (!empty($instance['title'])) {
         echo $args['before_title'] . apply_filters('widget_title', $instance['title']) . $args['after_title'];
     }
     echo $cart->render('add');
     echo $args['after_widget'];
 }
<?php

/*
Plugin Name: Castlegate IT WP Product Cart
Plugin URI: http://github.com/castlegateit/cgit-wp-product-cart
Description: Simple product cart plugin for WordPress, extending the Product Catalogue plugin.
Version: 1.0
Author: Castlegate IT
Author URI: http://www.castlegateit.co.uk/
License: MIT
*/
use Cgit\Products\Cart;
define('CGIT_PRODUCT_CART_PLUGIN_FILE', __FILE__);
require __DIR__ . '/src/autoload.php';
require __DIR__ . '/activation.php';
/**
 * Load plugin
 *
 * This uses the plugins_loaded action to control the order in which plugins are
 * loaded. This plugin depends on the Product Catalogue, so must be loaded after
 * that plugin.
 */
add_action('plugins_loaded', function () {
    require __DIR__ . '/functions.php';
    // Initialization
    Cart::getInstance();
}, 20);
<?php

use Cgit\Products\Cart;
use Cgit\Products\Product;
$cart = Cart::getInstance();
$contents = $cart->contents();
if (count($contents) == 0) {
    include 'empty.php';
    return;
}
// Initial values
$products = [];
$total = 0;
$discount = 0;
foreach ($contents as $item) {
    $product = new Product($item['product']);
    // Product information
    $output = ['id' => $product->ID, 'name' => $product->post_title, 'url' => get_permalink($product->ID), 'quantity' => $item['quantity'], 'price' => $product->product_price * $item['quantity'], 'original' => $product->product_price_original * $item['quantity']];
    // Increment total price and discount
    $total += $output['price'];
    $discount += $output['original'] - $output['price'];
    // Variant information
    if ($item['variant'] !== false) {
        $variant = $product->product_variants[$item['variant']];
        $output['variant'] = $item['variant'];
        $output['name'] .= ' (' . $variant['variant_name'] . ')';
    }
    // Append to list of products in cart
    $products[] = $output;
}
usort($products, function ($a, $b) {