update
This commit is contained in:
@@ -10,6 +10,7 @@ class EventsWoo extends EventsFactory {
|
||||
//"woo_big_whale",
|
||||
"woo_view_content",
|
||||
//"woo_view_content_for_category",
|
||||
"woo_view_cart",
|
||||
"woo_view_category",
|
||||
"woo_view_item_list",
|
||||
//"woo_view_item_list_single",
|
||||
@@ -101,7 +102,9 @@ class EventsWoo extends EventsFactory {
|
||||
'removeFromCartSelector' => isWooCommerceVersionGte( '3.0.0' )
|
||||
? 'form.woocommerce-cart-form .remove'
|
||||
: '.cart .product-remove .remove',
|
||||
'addToCartCatchMethod' => PYS()->getOption('woo_add_to_cart_catch_method')
|
||||
'addToCartCatchMethod' => PYS()->getOption('woo_add_to_cart_catch_method'),
|
||||
'is_order_received_page' => is_order_received_page(),
|
||||
'containOrderId' => wooIsRequestContainOrderId()
|
||||
);
|
||||
|
||||
return $data;
|
||||
@@ -133,8 +136,21 @@ class EventsWoo extends EventsFactory {
|
||||
isset( $_REQUEST['key'] ) && $_REQUEST['key'] != ""
|
||||
&& empty($_REQUEST['wc-api']) // if is not api request
|
||||
) {
|
||||
global $wp;
|
||||
$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 (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 = wc_get_order($order_id);
|
||||
if(!$order) return false;
|
||||
@@ -152,6 +168,9 @@ class EventsWoo extends EventsFactory {
|
||||
case 'woo_view_content' : {
|
||||
return PYS()->getOption( 'woo_view_content_enabled' ) && is_product();
|
||||
}
|
||||
case 'woo_view_cart': {
|
||||
return PYS()->getOption( 'woo_view_cart_enabled' ) && is_cart();
|
||||
}
|
||||
case 'woo_view_category': {
|
||||
return PYS()->getOption( 'woo_view_category_enabled' ) && is_tax( 'product_cat' );
|
||||
}
|
||||
@@ -192,22 +211,43 @@ class EventsWoo extends EventsFactory {
|
||||
case 'woo_view_item_list':
|
||||
case 'woo_view_content':
|
||||
return new SingleEvent($event,EventTypes::$STATIC,'woo');
|
||||
|
||||
case 'woo_view_cart': {
|
||||
return $this->getInitCheckoutEvent($event);
|
||||
}
|
||||
case 'woo_add_to_cart_on_button_click':
|
||||
return new SingleEvent($event,EventTypes::$DYNAMIC,'woo');
|
||||
case 'woo_purchase' : {
|
||||
$events = 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 );
|
||||
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 = wc_get_order($order_id);
|
||||
if($order) {
|
||||
$order->update_meta_data("_pys_purchase_event_fired",true);
|
||||
$order->save();
|
||||
if ( isWooCommerceVersionGte('3.0.0') ) {
|
||||
// WooCommerce >= 3.0
|
||||
if($order) {
|
||||
$order->update_meta_data("_pys_purchase_event_fired",true);
|
||||
$order->save();
|
||||
}
|
||||
|
||||
} else {
|
||||
// WooCommerce < 3.0
|
||||
update_post_meta( $order_id, '_pys_purchase_event_fired', true );
|
||||
}
|
||||
$events[] = new SingleEvent($event,EventTypes::$STATIC,'woo');
|
||||
|
||||
// add child event complete_registration
|
||||
if(PYS()->getOption( 'woo_complete_registration_enabled' )) {
|
||||
if(PYS()->getOption( 'woo_complete_registration_enabled' ) && Facebook()->getOption("woo_complete_registration_fire_every_time") && !Facebook()->getOption("woo_complete_registration_send_from_server")) {
|
||||
$events[] = new SingleEvent('woo_complete_registration',EventTypes::$STATIC,'woo');
|
||||
}
|
||||
|
||||
@@ -241,7 +281,9 @@ class EventsWoo extends EventsFactory {
|
||||
case 'woo_view_category': {
|
||||
return PYS()->getOption( 'woo_view_category_enabled' ) ;
|
||||
}
|
||||
|
||||
case 'woo_view_cart': {
|
||||
return PYS()->getOption( 'woo_view_cart_enabled' );
|
||||
}
|
||||
case 'woo_initiate_checkout': {
|
||||
return PYS()->getOption( 'woo_initiate_checkout_enabled' );
|
||||
}
|
||||
@@ -304,7 +346,69 @@ class EventsWoo extends EventsFactory {
|
||||
'orders_count' => null,
|
||||
];
|
||||
}
|
||||
function getInitCheckoutEvent($eventId) {
|
||||
$event = new SingleEvent($eventId,EventTypes::$STATIC,self::getSlug());
|
||||
|
||||
$products_data = $this->getCartProductData();
|
||||
if(count($products_data) == 0) return null;
|
||||
|
||||
$event->args = [
|
||||
'products' => $products_data,
|
||||
'coupon' => $this->getCartCoupon()
|
||||
];
|
||||
return $event;
|
||||
}
|
||||
function getCartProductData() {
|
||||
$products_data = [];
|
||||
foreach ( WC()->cart->cart_contents as $cart_item_key => $cart_item ) {
|
||||
$product_id = empty($cart_item['variation_id']) ? $cart_item['product_id'] : $cart_item['variation_id'];
|
||||
$product = wc_get_product($product_id);
|
||||
|
||||
if(!$product) continue;
|
||||
|
||||
if ( $product->get_type() == 'variation' ) {
|
||||
$parent_id = $product->get_parent_id(); // get terms from parent
|
||||
$tags = getObjectTerms( 'product_tag', $parent_id );
|
||||
$categories = getObjectTermsWithId( 'product_cat', $parent_id );
|
||||
$variation_name = implode("/", $product->get_variation_attributes());
|
||||
} else {
|
||||
$tags = getObjectTerms( 'product_tag', $product->get_id() );
|
||||
$categories = getObjectTermsWithId( 'product_cat', $product->get_id() );
|
||||
$variation_name = "";
|
||||
}
|
||||
$sale_price = -1;
|
||||
|
||||
|
||||
$price = getWooProductPriceToDisplay($product_id, 1,$sale_price);
|
||||
$product_data = [
|
||||
'product_id' => $product->get_id(),
|
||||
'parent_id' => $product->get_parent_id(),
|
||||
'type' => $product->get_type(),
|
||||
'tags' => $tags,
|
||||
'categories' => $categories,
|
||||
'quantity' => $cart_item['quantity'],
|
||||
'price' => $price,
|
||||
'total' => pys_round($cart_item['line_total']), // with coupon sale
|
||||
'total_tax' => pys_round($cart_item['line_tax']),
|
||||
'subtotal' => pys_round($cart_item['line_subtotal']),
|
||||
'subtotal_tax' => pys_round($cart_item['line_subtotal_tax']),
|
||||
'name' => $product->get_name(),
|
||||
'variation_name'=> $variation_name
|
||||
];
|
||||
|
||||
$products_data[] = $product_data;
|
||||
}
|
||||
|
||||
return $products_data;
|
||||
}
|
||||
function getCartCoupon() {
|
||||
$coupons = WC()->cart->get_applied_coupons();
|
||||
if ( count($coupons) > 0 ) {
|
||||
$firstCoupon = reset($coupons); // Получить первый элемент массива
|
||||
return $firstCoupon;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
function getEvents() {
|
||||
return $this->events;
|
||||
}
|
||||
|
||||
@@ -31,16 +31,25 @@ abstract class EventsFactory {
|
||||
$eventsList = array();
|
||||
foreach ($this->getEvents() as $eventName) {
|
||||
if($this->isReadyForFire($eventName)) {
|
||||
|
||||
foreach ( PYS()->getRegisteredPixels() as $pixel ) {
|
||||
$events = $this->getEvent($eventName);
|
||||
if(!is_array($events)) $events = array($events); // some type of events can return array
|
||||
|
||||
foreach ($events as $event) {
|
||||
$singleEvents = $pixel->generateEvents( $event );
|
||||
foreach ($singleEvents as $singleEvent) {
|
||||
if(!apply_filters("pys_validate_pixel_event",true,$singleEvent,$pixel)) continue;
|
||||
$eventsList[$pixel->getSlug()][] = $singleEvent;
|
||||
$events = $this->getEvent($eventName);
|
||||
if($events == null) continue;
|
||||
if(!is_array($events)) $events = array($events); // some
|
||||
foreach ($events as $event) {
|
||||
foreach ( PYS()->getRegisteredPixels() as $pixel ) {
|
||||
if(method_exists($pixel,'generateEvents')) {
|
||||
$pixelEvents = $pixel->generateEvents( $event );
|
||||
foreach ($pixelEvents as $pixelEvent) {
|
||||
if(apply_filters("pys_validate_pixel_event",true,$pixelEvent,$pixel)) {
|
||||
$eventsList[$pixel->getSlug()][] = $pixelEvent;
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
// deprecate
|
||||
$pixel_event = clone $event;
|
||||
$isSuccess = $pixel->addParamsToEvent( $pixel_event );
|
||||
if(!$isSuccess || !apply_filters("pys_validate_pixel_event",true,$pixel_event,$pixel)) continue;
|
||||
$eventsList[$pixel->getSlug()][] = $pixel_event;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user