File "FacebookWordpressContactForm7.php"
Full Path: /home/jlklyejr/public_html/wp-content/test/wp-content/plugins/official-facebook-pixel/integration/FacebookWordpressContactForm7.php
File size: 4.34 KB
MIME-type: text/x-php
Charset: utf-8
<?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\FacebookPluginUtils;
use FacebookPixelPlugin\Core\FacebookServerSideEvent;
use FacebookPixelPlugin\Core\FacebookWordPressOptions;
use FacebookPixelPlugin\Core\ServerEventFactory;
use FacebookPixelPlugin\Core\PixelRenderer;
use FacebookAds\Object\ServerSide\Event;
use FacebookAds\Object\ServerSide\UserData;
class FacebookWordpressContactForm7 extends FacebookWordpressIntegrationBase {
const PLUGIN_FILE = 'contact-form-7/wp-contact-form-7.php';
const TRACKING_NAME = 'contact-form-7';
public static function injectPixelCode() {
add_action(
'wpcf7_submit',
array(__CLASS__, 'trackServerEvent'),
10, 2);
add_action(
'wp_footer',
array(__CLASS__, 'injectMailSentListener'),
10, 2);
}
public static function injectMailSentListener(){
ob_start();
?>
<!-- Meta Pixel Event Code -->
<script type='text/javascript'>
document.addEventListener( 'wpcf7mailsent', function( event ) {
if( "fb_pxl_code" in event.detail.apiResponse){
eval(event.detail.apiResponse.fb_pxl_code);
}
}, false );
</script>
<!-- End Meta Pixel Event Code -->
<?php
$listenerCode = ob_get_clean();
echo $listenerCode;
}
public static function trackServerEvent($form, $result) {
$isInternalUser = FacebookPluginUtils::isInternalUser();
$submitFailed = $result['status'] !== 'mail_sent';
if ($isInternalUser || $submitFailed) {
return $result;
}
$server_event = ServerEventFactory::safeCreateEvent(
'Lead',
array(__CLASS__, 'readFormData'),
array($form),
self::TRACKING_NAME,
true
);
FacebookServerSideEvent::getInstance()->track($server_event);
add_action(
'wpcf7_feedback_response',
array(__CLASS__, 'injectLeadEvent'),
20, 2);
return $result;
}
public static function injectLeadEvent($response, $result) {
if (FacebookPluginUtils::isInternalUser()) {
return $response;
}
$events = FacebookServerSideEvent::getInstance()->getTrackedEvents();
if( count($events) == 0 ){
return $response;
}
$event_id = $events[0]->getEventId();
$fbq_calls = PixelRenderer::render($events, self::TRACKING_NAME, false);
$code = sprintf("
if( typeof window.pixelLastGeneratedLeadEvent === 'undefined'
|| window.pixelLastGeneratedLeadEvent != '%s' ){
window.pixelLastGeneratedLeadEvent = '%s';
%s
}
",
$event_id ,
$event_id ,
$fbq_calls);
$response['fb_pxl_code'] = $code;
return $response;
}
public static function readFormData($form) {
if (empty($form)) {
return array();
}
$form_tags = $form->scan_form_tags();
$name = self::getName($form_tags);
return array(
'email' => self::getEmail($form_tags),
'first_name' => $name[0],
'last_name' => $name[1],
'phone' => self::getPhone($form_tags)
);
}
private static function getEmail($form_tags) {
if (empty($form_tags)) {
return null;
}
foreach ($form_tags as $tag) {
if ($tag->basetype == "email") {
return $_POST[$tag->name];
}
}
return null;
}
private static function getName($form_tags) {
if (empty($form_tags)) {
return null;
}
foreach ($form_tags as $tag) {
if ($tag->basetype === "text"
&& strpos(strtolower($tag->name), 'name') !== false) {
return ServerEventFactory::splitName($_POST[$tag->name]);
}
}
return null;
}
private static function getPhone($form_tags) {
if (empty($form_tags)) {
return null;
}
foreach ($form_tags as $tag) {
if ($tag->basetype === "tel") {
return $_POST[$tag->name];
}
}
return null;
}
}