163 lines
5.7 KiB
PHP
163 lines
5.7 KiB
PHP
<?php
|
|
/**
|
|
* Facebook Pixel Plugin FacebookWordpressMailchimpForWp class.
|
|
*
|
|
* This file contains the main logic for FacebookWordpressMailchimpForWp.
|
|
*
|
|
* @package FacebookPixelPlugin
|
|
*/
|
|
|
|
/**
|
|
* Define FacebookWordpressMailchimpForWp class.
|
|
*
|
|
* @return void
|
|
*/
|
|
|
|
/*
|
|
* 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.
|
|
*/
|
|
|
|
namespace FacebookPixelPlugin\Integration;
|
|
|
|
defined( 'ABSPATH' ) || 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;
|
|
|
|
/**
|
|
* FacebookWordpressMailchimpForWp class.
|
|
*/
|
|
class FacebookWordpressMailchimpForWp extends FacebookWordpressIntegrationBase {
|
|
const PLUGIN_FILE = 'mailchimp-for-wp/mailchimp-for-wp.php';
|
|
const TRACKING_NAME = 'mailchimp-for-wp';
|
|
|
|
/**
|
|
* Injects Facebook Pixel events for the MailChimp for WP plugin.
|
|
*
|
|
* This method sets up WordPress actions to inject Facebook Pixel events
|
|
* for different stages of the MailChimp for WP plugin process.
|
|
*
|
|
* @return void
|
|
*/
|
|
public static function inject_pixel_code() {
|
|
self::add_pixel_fire_for_hook(
|
|
array(
|
|
'hook_name' => 'mc4wp_form_subscribed',
|
|
'classname' => __CLASS__,
|
|
'inject_function' => 'injectLeadEvent',
|
|
)
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Injects Facebook Pixel events for the MailChimp for WP plugin.
|
|
*
|
|
* This method sets up WordPress actions to inject Facebook Pixel events
|
|
* for different stages of the MailChimp for WP plugin process.
|
|
*
|
|
* @return void
|
|
*/
|
|
public static function injectLeadEvent() {
|
|
if ( FacebookPluginUtils::is_internal_user() ) {
|
|
return;
|
|
}
|
|
|
|
$server_event = ServerEventFactory::safe_create_event(
|
|
'Lead',
|
|
array( __CLASS__, 'readFormData' ),
|
|
array(),
|
|
self::TRACKING_NAME,
|
|
true
|
|
);
|
|
FacebookServerSideEvent::get_instance()->track( $server_event );
|
|
|
|
$code = PixelRenderer::render(
|
|
array( $server_event ),
|
|
self::TRACKING_NAME
|
|
);
|
|
printf(
|
|
'
|
|
<!-- Meta Pixel Event Code -->
|
|
%s
|
|
<!-- End Meta Pixel Event Code -->
|
|
',
|
|
$code // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Reads form data from the $_POST global array.
|
|
*
|
|
* This function extracts user-related data
|
|
* such as email, first name, last name,
|
|
* phone number, and address details from the
|
|
* $_POST array, commonly used in form
|
|
* submissions. The extracted data includes:
|
|
* - 'email': The user's email address.
|
|
* - 'first_name': The user's first name.
|
|
* - 'last_name': The user's last name.
|
|
* - 'phone': The user's phone number.
|
|
* - 'city', 'state', 'zip', 'country': Address details,
|
|
* where the country must
|
|
* be specified using a 2-letter code.
|
|
*
|
|
* The function returns an associative array containing the extracted data.
|
|
*
|
|
* @return array An associative array of form data.
|
|
*/
|
|
public static function readFormData() {
|
|
$event_data = array();
|
|
if ( ! empty( $_POST['EMAIL'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Missing
|
|
$event_data['email'] = sanitize_email( wp_unslash( $_POST['EMAIL'] ) ); // phpcs:ignore WordPress.Security.NonceVerification.Missing
|
|
}
|
|
|
|
if ( ! empty( $_POST['FNAME'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Missing
|
|
$event_data['first_name'] = sanitize_text_field( wp_unslash( $_POST['FNAME'] ) ); // phpcs:ignore WordPress.Security.NonceVerification.Missing
|
|
}
|
|
|
|
if ( ! empty( $_POST['LNAME'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Missing
|
|
$event_data['last_name'] = sanitize_text_field( wp_unslash( $_POST['LNAME'] ) ); // phpcs:ignore WordPress.Security.NonceVerification.Missing
|
|
}
|
|
|
|
if ( ! empty( $_POST['PHONE'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Missing
|
|
$event_data['phone'] = sanitize_text_field( wp_unslash( $_POST['PHONE'] ) ); // phpcs:ignore WordPress.Security.NonceVerification.Missing
|
|
}
|
|
|
|
if ( ! empty( $_POST['ADDRESS'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Missing
|
|
$address_data = sanitize_text_field( wp_unslash( $_POST['ADDRESS'] ) ); // phpcs:ignore WordPress.Security.NonceVerification.Missing
|
|
|
|
if ( ! empty( $address_data['city'] ) ) {
|
|
$event_data['city'] = sanitize_text_field( $address_data['city'] );
|
|
}
|
|
|
|
if ( ! empty( $address_data['state'] ) ) {
|
|
$event_data['state'] =
|
|
sanitize_text_field( $address_data['state'] );
|
|
}
|
|
|
|
if ( ! empty( $address_data['zip'] ) ) {
|
|
$event_data['zip'] = sanitize_text_field( $address_data['zip'] );
|
|
}
|
|
|
|
if (
|
|
! empty( $address_data['country'] )
|
|
&& strlen( $address_data['country'] ) === 2
|
|
) {
|
|
$event_data['country'] = $address_data['country'];
|
|
}
|
|
}
|
|
return $event_data;
|
|
}
|
|
}
|