This commit is contained in:
2026-04-26 23:47:49 +02:00
parent 1b95f03d1e
commit b073e009d8
5288 changed files with 1112699 additions and 55536 deletions

View File

@@ -228,7 +228,12 @@ class ServerEventHelper {
if($order->get_billing_state()) {
$userData->setState($order->get_billing_state());
}
if($order->get_meta( 'external_id' )){
$external_id = $order->get_meta( 'external_id' );
if (!empty($external_id)) {
$userData->setExternalId($external_id);
}
}
} else {
if($order->billing_postcode) {
$userData->setZipCode($order->billing_postcode);
@@ -240,6 +245,12 @@ class ServerEventHelper {
$userData->setLastName($order->billing_last_name);
$userData->setCity($order->billing_city);
$userData->setState($order->billing_state);
if(get_post_meta( $order_id, 'external_id', true )){
$external_id = get_post_meta( $order_id, 'external_id', true );
if (!empty($external_id)) {
$userData->setExternalId($external_id);
}
}
}
} else {
return ServerEventHelper::getRegularUserData();
@@ -313,10 +324,18 @@ class ServerEventHelper {
$userData->setZipCode($user->get('billing_postcode'));
}
}
if(PixelYourSite\EventsManager::isTrackExternalId()){
if (isset($_COOKIE['pbid'])) {
$userData->setExternalId($_COOKIE['pbid']);
}
}
} else {
// $userData->setFirstName("undefined");
// $userData->setLastName("undefined");
// $userData->setEmail("undefined");
if (PixelYourSite\EventsManager::isTrackExternalId() && isset($_COOKIE['pbid'])) {
$userData->setExternalId($_COOKIE['pbid']);
}
}
return $userData;
}

View File

@@ -275,7 +275,11 @@ class FacebookServer {
$event->setEventId($event->getEventId());
$api = Api::init(null, null, $this->access_token[$pixel_Id],false);
$opts = $api->getHttpClient()->getAdapter()->getOpts();
if ($opts instanceof \ArrayObject && $opts->offsetExists(CURLOPT_CONNECTTIMEOUT)) {
$opts->offsetSet(CURLOPT_CONNECTTIMEOUT, 30);
$api->getHttpClient()->getAdapter()->setOpts($opts);
}
/**
* filter pys_before_send_fb_server_event
* Help add custom options or get data from event before send
@@ -310,9 +314,16 @@ class FacebookServer {
$pysData['fbc'] = ServerEventHelper::getFbc();
$pysData['fbp'] = ServerEventHelper::getFbp();
$order = wc_get_order($order_id);
if($order) {
$order->update_meta_data("pys_fb_cookie",$pysData);
$order->save();
if ( isWooCommerceVersionGte('3.0.0') ) {
// WooCommerce >= 3.0
if($order) {
$order->update_meta_data("pys_fb_cookie",$pysData);
$order->save();
}
} else {
// WooCommerce < 3.0
update_post_meta( $order_id, 'pys_fb_cookie', $pysData );
}
}

View File

@@ -43,6 +43,7 @@ class Facebook extends Settings implements Pixel {
add_action( 'pys_register_pixels', function( $core ) {
/** @var PYS $core */
$core->registerPixel( $this );
} );
add_action( 'wp_head', array( $this, 'output_meta_tag' ) );
@@ -76,7 +77,8 @@ class Facebook extends Settings implements Pixel {
if(count($ids) == 0|| empty($ids[0])) {
return apply_filters("pys_facebook_ids",[]);
} else {
return apply_filters("pys_facebook_ids",(array) reset( $ids )); // return first id only
$id = array_shift($ids);
return apply_filters("pys_facebook_ids", array($id)); // return first id only
}
}
@@ -85,16 +87,17 @@ class Facebook extends Settings implements Pixel {
return array(
'pixelIds' => $this->getPixelIDs(),
'advancedMatching' => $this->getOption( 'advanced_matching_enabled' ) ? Helpers\getAdvancedMatchingParams() : array(),
'removeMetadata' => $this->getOption( 'remove_metadata' ),
'advancedMatchingEnabled' => $this->getOption( 'advanced_matching_enabled' ),
'removeMetadata' => $this->getOption( 'remove_metadata' ),
'contentParams' => getTheContentParams(),
'commentEventEnabled' => $this->getOption( 'comment_event_enabled' ),
'wooVariableAsSimple' => $this->getOption( 'woo_variable_as_simple' ),
'downloadEnabled' => $this->getOption( 'download_event_enabled' ),
'formEventEnabled' => $this->getOption( 'form_event_enabled' ),
"ajaxForServerEvent" => $this->getOption( "server_event_use_ajax" ),
'serverApiEnabled' => $this->isServerApiEnabled() && count($this->getApiToken()) > 0,
'wooCRSendFromServer' => $this->getOption("woo_complete_registration_send_from_server") && $this->getOption("woo_complete_registration_fire_every_time")
);
'wooCRSendFromServer' => $this->getOption("woo_complete_registration_send_from_server") && $this->getOption("woo_complete_registration_fire_every_time"),
'send_external_id' => $this->getOption('send_external_id')
);
}
@@ -805,8 +808,21 @@ class Facebook extends Settings implements Pixel {
if ( ! $this->getOption( 'woo_purchase_enabled' ) ) {
return false;
}
$key = sanitize_key($_REQUEST['key']);
$order_id = (int) wc_get_order_id_by_order_key( $key );
$order_key = sanitize_key($_REQUEST['key']);
$cache_key = 'order_id_' . $order_key;
$order_id = get_transient( $cache_key );
global $wp;
if (is_order_received_page() && empty($order_id) && $wp->query_vars['order-received']) {
$order_id = absint( $wp->query_vars['order-received'] );
if ($order_id) {
set_transient( $cache_key, $order_id, HOUR_IN_SECONDS );
}
}
if ( empty($order_id) ) {
$order_id = (int) wc_get_order_id_by_order_key( $order_key );
set_transient( $cache_key, $order_id, HOUR_IN_SECONDS );
}
$order = new \WC_Order( $order_id );
$content_ids = array();
@@ -874,6 +890,10 @@ class Facebook extends Settings implements Pixel {
$params['currency'] = get_woocommerce_currency();
$params['order_id'] = $order_id;
$params['fees'] = get_fees($order);
return array(
'name' => 'Purchase',
'data' => $params,
@@ -982,17 +1002,17 @@ class Facebook extends Settings implements Pixel {
$params = array(
'content_type' => 'product',
'content_ids' => Helpers\getFacebookEddDownloadContentId( $post->ID ),
'content_ids' => Helpers\getFacebookEddDownloadContentId( $download_id ),
);
// content_name, category_name
$params['tags'] = implode( ', ', getObjectTerms( 'download_tag', $post->ID ) );
$params = array_merge( $params, Helpers\getEddCustomAudiencesOptimizationParams( $post->ID ) );
$params['tags'] = implode( ', ', getObjectTerms( 'download_tag', $download_id ) );
$params = array_merge( $params, Helpers\getEddCustomAudiencesOptimizationParams( $download_id ) );
// currency, value
if ( PYS()->getOption( 'edd_add_to_cart_value_enabled' ) ) {
$amount = getEddDownloadPriceToDisplay( $post->ID, $price_index );
$amount = getEddDownloadPriceToDisplay( $download_id, $price_index );
$value_option = PYS()->getOption( 'edd_add_to_cart_value_option' );
$global_value = PYS()->getOption( 'edd_add_to_cart_value_global', 0 );

View File

@@ -52,8 +52,21 @@ function getAdvancedMatchingParams() {
*/
if ( is_order_received_page() && isset( $_REQUEST['key'] ) && $_REQUEST['key'] != "" ) {
$key = sanitize_key($_REQUEST['key']);
$order_id = wc_get_order_id_by_order_key($key );
$order_key = sanitize_key($_REQUEST['key']);
$cache_key = 'order_id_' . $order_key;
$order_id = get_transient( $cache_key );
global $wp;
if (empty($order_id) && $wp->query_vars['order-received']) {
$order_id = absint( $wp->query_vars['order-received'] );
if ($order_id) {
set_transient( $cache_key, $order_id, HOUR_IN_SECONDS );
}
}
if ( empty($order_id) ) {
$order_id = (int) wc_get_order_id_by_order_key( $order_key );
set_transient( $cache_key, $order_id, HOUR_IN_SECONDS );
}
$order = wc_get_order( $order_id );
if ( $order ) {
@@ -141,7 +154,11 @@ function getAdvancedMatchingParams() {
}
}
if(PixelYourSite\EventsManager::isTrackExternalId()){
if (isset($_COOKIE['pbid'])) {
$params['external_id'] = $_COOKIE['pbid'];
}
}
$sanitized = array();
foreach ( $params as $key => $value ) {
@@ -572,7 +589,12 @@ function getFDPPurchaseEventParams() {
function getCompleteRegistrationOrderParams() {
$params = array();
$order_key = sanitize_key( $_REQUEST['key']);
$order_id = (int) wc_get_order_id_by_order_key( $order_key );
$cache_key = 'order_id_' . $order_key;
$order_id = get_transient( $cache_key );
if ( empty($order_id) ) {
$order_id = (int) wc_get_order_id_by_order_key( $order_key );
set_transient( $cache_key, $order_id, HOUR_IN_SECONDS );
}
$order = new \WC_Order( $order_id );
$value_option = PixelYourSite\Facebook()->getOption( 'woo_complete_registration_custom_value' );

View File

@@ -49,7 +49,6 @@
"fdp_purchase_value" : "0",
"use_server_api": false,
"server_event_use_ajax": true,
"server_access_api_token": "",
"test_api_event_code": "",
"test_api_event_code_expiration_at": "",

View File

@@ -48,7 +48,6 @@
"fdp_purchase_value" : "text",
"use_server_api": "checkbox",
"server_event_use_ajax": "checkbox",
"server_access_api_token": "array",
"test_api_event_code": "array",
"test_api_event_code_expiration_at": "array",

View File

@@ -29,8 +29,7 @@ if ( ! defined( 'ABSPATH' ) ) {
<div class="alert alert-primary mt-3">Because of a Facebook error, when Advanced Matching is ON, Custom
Audiences based on the pixel
will not show the size number ("Size: -1", or "Size Unavailable"). They will still work fine for
retargeting or Lookalike Audiences. Details <a href="https://www.pixelyoursite
.com/facebook-audience-size-not-available" target="_blank">here</a>.</div>
retargeting or Lookalike Audiences. Details <a href="https://www.pixelyoursite.com/facebook-audience-size-not-available" target="_blank">here</a>.</div>
</div>
</div>
<div class="row">