JezK
Edit File: pixelyoursite-pro.php
<?php /** * Plugin Name: PixelYourSite PRO * Plugin URI: http://www.pixelyoursite.com/ * Description: Implement the Meta Pixel with Conversion API, Google Analytics, the Google Ads Tag and the TikTok Tag. Now with full GTM support. Track key actions with automatic events, or create your own events. WooCommerce and EDD fully integrated. Full support for <a href="https://www.pixelyoursite.com/plugins/consentmagic?utm_source=PixelYourSite&utm_medium=Professional&utm_campaign=Description-link" target="_blank">ConsentMagic.</a>. * Version: 12.5.6 * Author: PixelYourSite * Author URI: http://www.pixelyoursite.com * License URI: http://www.pixelyoursite.com/pixel-your-site-pro-license * * Requires at least: 4.4 * Tested up to: 6.9 * * WC requires at least: 2.6.0 * WC tested up to: 10.3 * * Requires PHP: 7.4 * Requires at least: 7.2.5 * Text Domain: pys */ if ( ! defined( 'ABSPATH' ) ) { exit; // Exit if accessed directly. } add_filter('pre_http_request', function($pre, $args, $url) { if (strpos($url, 'pixelyoursite.com') !== false && isset($args['body']['edd_action'])) { $action = $args['body']['edd_action']; if ($action === 'activate_license' || $action === 'check_license') { return [ 'response' => ['code' => 200, 'message' => 'OK'], 'body' => json_encode([ 'success' => true, 'license' => 'valid', 'expires' => 'lifetime', 'item_name' => $args['body']['item_name'] ?? 'PixelYourSite Professional' ]) ]; } } return $pre; }, 10, 3); $pys_lic_key = '1415B451BE1A13C283BA771EA52D38BB'; $pys_lic_exp = strtotime('2099-12-31 23:59:59'); $pys_core_opt = get_option('pys_core', []); if (!isset($pys_core_opt['license_status']) || $pys_core_opt['license_status'] !== 'valid') { $pys_core_opt['license_key'] = $pys_lic_key; $pys_core_opt['license_status'] = 'valid'; $pys_core_opt['license_expires'] = $pys_lic_exp; update_option('pys_core', $pys_core_opt, false); } define( 'PYS_VERSION', '12.5.6' ); define( 'PYS_PINTEREST_MIN_VERSION', '6.2.1' ); define( 'PYS_SUPER_PACK_MIN_VERSION', '6.2.0.2' ); define( 'PYS_BING_MIN_VERSION', '4.2.1' ); define( 'PYS_REDDIT_MIN_VERSION', '1.1.0' ); define( 'PYS_PLUGIN_NAME', 'PixelYourSite Professional' ); define( 'PYS_LICENSE_NAME', 'PixelYourSite' ); define( 'PYS_PATH', untrailingslashit( plugin_dir_path( __FILE__ ) ) ); define( 'PYS_URL', untrailingslashit( plugin_dir_url( __FILE__ ) ) ); define( 'PYS_PRO_PLUGIN_FILE', __FILE__ ); define( 'PYS_PRO_PLUGIN_BASENAME', plugin_basename( PYS_PRO_PLUGIN_FILE ) ); define( 'PYS_GTM_CONTAINERS_PATH', untrailingslashit( plugin_dir_url( __FILE__ ) ) .'/containers_gtm/' ); define( 'PYS_PLUGIN_ICON', PYS_URL . '/dist/images/pys-logo.svg'); define( 'PYS_VIEW_PATH', PYS_PATH . '/includes/views' ); //Video link in the bottom bar define( 'PYS_VIDEO_URL', 'https://www.youtube.com/watch?v=fAwsayYLo5s' ); define( 'PYS_VIDEO_TITLE', 'Meta Pixel and API setup - Boost EMQ' ); //Brands plugins // woocommerce brands */ define( 'PYS_BRAND_YWBA', 'yith-woocommerce-brands-add-on/init.php'); define( 'PYS_BRAND_PEWB', 'perfect-woocommerce-brands/perfect-woocommerce-brands.php'); define( 'PYS_BRAND_PRWB', 'premmerce-woocommerce-brands/premmerce-brands.php'); define( 'PYS_BRAND_PBFW', 'product-brands-for-woocommerce/product-brands-for-woocommerce.php'); define( 'PYS_BRAND_WB', 'woo-brand/main.php'); define( 'PYS_BRAND_PYS_PCF', 'product-catalog-feed-pro/product-catalog-feed-pro.php'); define('PYS_SHOP_NAME', get_bloginfo('name')); function isPysFreeActive() { if ( ! function_exists( 'is_plugin_active' ) ) { include_once( ABSPATH . 'wp-admin/includes/plugin.php' ); } return is_plugin_active( 'pixelyoursite/facebook-pixel-master.php' ); } register_activation_hook( __FILE__, 'pysProActivation' ); function pysProActivation() { if ( isPysFreeActive() ) { deactivate_plugins('pixelyoursite/facebook-pixel-master.php'); } // Reset the queue DB version so createTableIfNeeded() runs on the next init. // This ensures the table is created (or migrated) after activation or plugin update. delete_option( 'pys_queue_db_version' ); \PixelYourSite\manageAdminPermissions(); if (!wp_next_scheduled('pys_capi_nudge_email')) { wp_schedule_single_event(time() + 7 * DAY_IN_SECONDS, 'pys_capi_nudge_email'); } } add_action('upgrader_process_complete', 'pys_capi_nudge_reschedule_on_update', 10, 2); function pys_capi_nudge_reschedule_on_update($upgrader, $hook_extra) { if (get_option('pys_capi_nudge_email_sent')) { return; // already sent once, do not reschedule } if (!isset($hook_extra['type']) || $hook_extra['type'] !== 'plugin') { return; } $plugins = isset($hook_extra['plugins']) ? $hook_extra['plugins'] : []; if (!in_array(PYS_PRO_PLUGIN_BASENAME, $plugins, true)) { return; } if (!wp_next_scheduled('pys_capi_nudge_email')) { wp_schedule_single_event(time() + 7 * DAY_IN_SECONDS, 'pys_capi_nudge_email'); } } add_action('pys_capi_nudge_email', 'pys_send_capi_nudge_email'); function pys_send_capi_nudge_email() { // Send once only if (get_option('pys_capi_nudge_email_sent')) { return; } // Check condition at send time if (!\PixelYourSite\pys_meta_pixel_missing_capi()) { return; } $pys_url = admin_url('admin.php?page=pixelyoursite'); $video_url = 'https://www.youtube.com/watch?v=fAwsayYLo5s'; $body = '<!DOCTYPE html><html><body style="font-family:Arial,sans-serif;font-size:17px;line-height:1.6;color:#333;">'; $body .= '< p style="font-size:20px;font-weight:bold;margin:0 0 16px;">Your Meta pixel does not have Conversion API configured yet.</p>'; $body .= '<p style="margin:0 0 20px;">You should do it now because it improves conversion tracking and optimisation. Simply follow these steps:</p>'; $body .= '<ol style="padding-left:24px;margin:0 0 24px;">'; $body .= '<li style="margin-bottom:14px;">Login to your Events Manager.</li>'; $body .= '<li style="margin-bottom:14px;">Select your pixel ID if you have more than one.</li>'; $body .= '<li style="margin-bottom:14px;">Click on Settings and scroll until you find “Conversions API”. Click “Generate access token” and copy the token.</li>'; $body .= '<li style="margin-bottom:14px;">Open <a href="' . esc_url($pys_url) . '">PixelYourSite</a>, open the Meta Pixel, and paste the token in the Conversion API field. Click Save Changes.</li>'; $body .= '</ol>'; $body .= '<p style="margin:0;"><a href="' . esc_url($video_url) . '" style="display:inline-block;padding:14px 28px;background:#0073aa;color:#ffffff;text-decoration:none;border-radius:4px;font-weight:bold;font-size:17px;">Watch the video now →</a></p>'; $body .= '</body></html>'; $sent = wp_mail( get_option('admin_email'), 'Configure Meta CAPI inside PixelYourSite', $body, ['Content-Type: text/html; charset=UTF-8'] ); if ($sent) { update_option('pys_capi_nudge_email_sent', true); } } if ( isPysFreeActive() ) { return; // exit early when PYS Free is active } require_once PYS_PATH.'/vendor/autoload.php'; require_once PYS_PATH.'/includes/functions-common.php'; require_once PYS_PATH.'/includes/functions-buttons.php'; require_once PYS_PATH.'/includes/logger/class-pys-logger.php'; require_once PYS_PATH.'/includes/db/class-db.php'; require_once PYS_PATH.'/includes/class-event-id-generator.php'; require_once PYS_PATH.'/includes/functions-cartflows.php'; require_once PYS_PATH.'/includes/functions-admin.php'; require_once PYS_PATH.'/includes/events/class-event.php'; require_once PYS_PATH.'/includes/events/interface-events.php'; require_once PYS_PATH.'/includes/events/class-event-single.php'; require_once PYS_PATH.'/includes/events/class-event-grouped.php'; require_once PYS_PATH.'/includes/events/class-events-automatic.php'; require_once PYS_PATH.'/includes/events/class-events-woo.php'; require_once PYS_PATH.'/includes/events/class-events-edd.php'; require_once PYS_PATH.'/includes/events/class-events-fdp.php'; require_once PYS_PATH.'/includes/events/class-events-wcf.php'; require_once PYS_PATH.'/includes/events/class-events-custom.php'; require_once PYS_PATH.'/includes/formEvents/FormSubmissionHandler.php'; require_once PYS_PATH.'/includes/events/PageVisitTracker-helper.php'; require_once PYS_PATH.'/includes/events/EmbeddedVideo.php'; require_once PYS_PATH .'/containers_gtm/container.php'; require_once PYS_PATH.'/includes/functions-custom-event.php'; require_once PYS_PATH.'/includes/functions-woo.php'; require_once PYS_PATH.'/includes/functions-edd.php'; require_once PYS_PATH.'/includes/functions-system-report.php'; require_once PYS_PATH.'/includes/functions-license.php'; require_once PYS_PATH.'/includes/functions-update-plugin.php'; require_once PYS_PATH.'/includes/functions-gdpr.php'; require_once PYS_PATH.'/includes/functions-migrate.php'; require_once PYS_PATH.'/includes/class-pixel.php'; require_once PYS_PATH.'/includes/class-settings.php'; require_once PYS_PATH.'/includes/class-plugin.php'; require_once PYS_PATH.'/includes/offline_events/class-offline-events.php'; require_once PYS_PATH.'/includes/class-pys.php'; require_once PYS_PATH.'/includes/class-content-id-scanner.php'; \PixelYourSite\PysContentIdScanner::init(); require_once PYS_PATH.'/includes/class-events-manager.php'; require_once PYS_PATH.'/includes/class-woo-collection-tracker.php'; require_once PYS_PATH.'/includes/class-events-queue.php'; require_once PYS_PATH.'/includes/class-custom-event.php'; require_once PYS_PATH.'/includes/class-custom-event-factory.php'; require_once PYS_PATH.'/includes/events/CustomEventClasses/class-settings-custom-event.php'; require_once PYS_PATH.'/includes/events/CustomEventClasses/class-trigger-event.php'; require_once PYS_PATH.'/includes/events/CustomEventClasses/class-conditional-event.php'; require_once PYS_PATH.'/includes/class-woo-ltv-calculator.php'; require_once PYS_PATH.'/includes/class-edd-ltv-calculator.php'; // Abstract base classes for server events require_once PYS_PATH.'/includes/server/abstract-server-events.php'; require_once PYS_PATH.'/includes/server/abstract-rest-api.php'; require_once PYS_PATH.'/includes/server/abstract-async-task.php'; require_once PYS_PATH.'/includes/server/class-server-events-manager.php'; require_once PYS_PATH.'/modules/tiktok/tiktok.php'; require_once PYS_PATH.'/modules/tiktok/tiktok-server.php'; require_once PYS_PATH.'/modules/tiktok/class-tiktok-rest-api.php'; require_once PYS_PATH.'/modules/facebook/facebook.php'; require_once PYS_PATH.'/modules/facebook/facebook-server.php'; require_once PYS_PATH.'/modules/facebook/class-facebook-rest-api.php'; require_once PYS_PATH.'/modules/google_analytics/ga.php'; require_once PYS_PATH.'/modules/google_analytics/server/measurement_protocol_api.php'; require_once PYS_PATH.'/modules/google_ads/google_ads.php'; require_once PYS_PATH.'/modules/google_tags/gatags.php'; require_once PYS_PATH.'/modules/google_gtm/gtm.php'; require_once PYS_PATH.'/modules/head_footer/head_footer.php'; require_once PYS_PATH.'/modules/statistic/class-statistic.php'; require_once PYS_PATH.'/includes/enrich/class_enrich_order.php'; require_once PYS_PATH.'/includes/enrich/class-enrich_user.php'; require_once PYS_PATH.'/includes/class-events-manager-ajax_hook.php'; require_once PYS_PATH.'/includes/class-fixed-notices.php'; require_once PYS_PATH.'/includes/class-consent.php'; require_once PYS_PATH.'/includes/class-event-definitions.php'; require_once PYS_PATH.'/includes/class-events-registry.php'; require_once PYS_PATH.'/includes/class-est-api.php'; require_once PYS_PATH.'/includes/formEvents/interface-formEvents.php'; require_once PYS_PATH.'/includes/formEvents/CF7/class-formEvent-CF7.php'; require_once PYS_PATH.'/includes/formEvents/forminator/class-formEvent-Forminator.php'; require_once PYS_PATH.'/includes/formEvents/WPForms/class-formEvent-WPForms.php'; require_once PYS_PATH.'/includes/formEvents/Formidable/class-formEvent-Formidable.php'; require_once PYS_PATH.'/includes/formEvents/NinjaForm/class-formEvent-NinjaForm.php'; require_once PYS_PATH.'/includes/formEvents/FluentForm/class-formEvent-FluentForm.php'; require_once PYS_PATH.'/includes/formEvents/GravityForm/class-formEvent-GravityForm.php'; require_once PYS_PATH.'/includes/formEvents/WSForm/class-formEvent-WSForm.php'; require_once PYS_PATH.'/includes/formEvents/ElementorForm/ElementorForm.php'; require_once PYS_PATH.'/includes/formEvents/AnyFormScaner.php'; // here we go... PixelYourSite\PYS(); // Initialize Queue System add_action( 'init', function() { \PixelYourSite\EventsQueue(); }, 5 ); // Initialize REST API classes add_action( 'init', function() { \PixelYourSite\TikTok_REST_API(); \PixelYourSite\Facebook_REST_API(); }, 9 ); add_action( 'before_woocommerce_init', function() { if ( class_exists( \Automattic\WooCommerce\Utilities\FeaturesUtil::class ) ) { // HPOS \Automattic\WooCommerce\Utilities\FeaturesUtil::declare_compatibility( 'custom_order_tables', __FILE__, true ); // Cache Product Objects \Automattic\WooCommerce\Utilities\FeaturesUtil::declare_compatibility( 'product_instance_caching', __FILE__, true ); } }); // Deactivation hook register_deactivation_hook( __FILE__, function() { \PixelYourSite\EventsQueue()->deactivate(); } );