<?php /* * Copyright (C) 2017-present, Meta, Inc. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 2 of the License. * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ /** * @package FacebookPixelPlugin */ namespace FacebookPixelPlugin\Integration; defined('ABSPATH') or die('Direct access not allowed'); use FacebookPixelPlugin\Core\FacebookPixel; use FacebookPixelPlugin\Core\FacebookPluginUtils; use FacebookPixelPlugin\Core\ServerEventFactory; use FacebookPixelPlugin\Core\FacebookServerSideEvent; use FacebookPixelPlugin\Core\PixelRenderer; class FacebookWordpressWPECommerce extends FacebookWordpressIntegrationBase { const PLUGIN_FILE = 'wp-e-commerce/wp-e-commerce.php'; const TRACKING_NAME = 'wp-e-commerce'; public static function injectPixelCode() { // AddToCart add_action('wpsc_add_to_cart_json_response', array(__CLASS__, 'injectAddToCartEvent'), 11); // InitiateCheckout self::addPixelFireForHook(array( 'hook_name' => 'wpsc_before_shopping_cart_page', 'classname' => __CLASS__, 'inject_function' => 'injectInitiateCheckoutEvent')); // Purchase add_action( 'wpsc_transaction_results_shutdown', array(__CLASS__, 'injectPurchaseEvent'), 11, 3); } // Event hook for AddToCart. public static function injectAddToCartEvent($response) { if (FacebookPluginUtils::isInternalUser()) { return $response; } $product_id = $response['product_id']; $server_event = ServerEventFactory::safeCreateEvent( 'AddToCart', array(__CLASS__, 'createAddToCartEvent'), array($product_id), self::TRACKING_NAME ); FacebookServerSideEvent::getInstance()->track($server_event); $code = PixelRenderer::render(array($server_event), self::TRACKING_NAME); $code = sprintf(" <!-- Meta Pixel Event Code --> %s <!-- End Meta Pixel Event Code --> ", $code); $response['widget_output'] .= $code; return $response; } public static function injectInitiateCheckoutEvent() { if (FacebookPluginUtils::isInternalUser()) { return; } $server_event = ServerEventFactory::safeCreateEvent( 'InitiateCheckout', array(__CLASS__, 'createInitiateCheckoutEvent'), array(), self::TRACKING_NAME ); FacebookServerSideEvent::getInstance()->track($server_event); $code = PixelRenderer::render(array($server_event), self::TRACKING_NAME); printf(" <!-- Meta Pixel Event Code --> %s <!-- End Meta Pixel Event Code --> ", $code); } public static function injectPurchaseEvent( $purchase_log_object, $session_id, $display_to_screen) { if (FacebookPluginUtils::isInternalUser() || !$display_to_screen) { return; } $server_event = ServerEventFactory::safeCreateEvent( 'Purchase', array(__CLASS__, 'createPurchaseEvent'), array($purchase_log_object), self::TRACKING_NAME ); FacebookServerSideEvent::getInstance()->track($server_event); $code = PixelRenderer::render(array($server_event), self::TRACKING_NAME); printf(" <!-- Meta Pixel Event Code --> %s <!-- End Meta Pixel Event Code --> ", $code); } public static function createPurchaseEvent($purchase_log_object) { $event_data = FacebookPluginUtils::getLoggedInUserInfo(); $cart_items = $purchase_log_object->get_items(); $total_price = $purchase_log_object->get_total(); $currency = function_exists('\wpsc_get_currency_code') ? \wpsc_get_currency_code() : ''; $item_ids = array(); foreach ($cart_items as $item) { // This is for backwards compatibility $item_array = (array) $item; $item_ids[] = $item_array['prodid']; } $event_data['content_ids'] = $item_ids; $event_data['content_type'] = 'product'; $event_data['currency'] = $currency; $event_data['value'] = $total_price; return $event_data; } public static function createAddToCartEvent($product_id) { $event_data = FacebookPluginUtils::getLoggedInUserInfo(); global $wpsc_cart; $cart_items = $wpsc_cart->get_items(); foreach ($cart_items as $item) { if ($item->product_id === $product_id) { $unit_price = $item->unit_price; break; } } $event_data['content_ids'] = array($product_id); $event_data['content_type'] = 'product'; $event_data['currency'] = function_exists('\wpsc_get_currency_code') ? \wpsc_get_currency_code() : ''; $event_data['value'] = $unit_price; return $event_data; } public static function createInitiateCheckoutEvent() { $event_data = FacebookPluginUtils::getLoggedInUserInfo(); $content_ids = array(); $value = 0; global $wpsc_cart; $cart_items = $wpsc_cart->get_items(); foreach ($cart_items as $item) { $content_ids[] = $item->product_id; $value += $item->unit_price; } $event_data['currency'] = function_exists('\wpsc_get_currency_code') ? \wpsc_get_currency_code() : ''; $event_data['value'] = $value; $event_data['content_ids'] = $content_ids; return $event_data; } }