first commit

This commit is contained in:
2026-03-05 13:07:40 +01:00
commit 64ba0721ee
25709 changed files with 4691006 additions and 0 deletions

View File

@@ -0,0 +1 @@
backup/*

View File

@@ -0,0 +1,144 @@
<?php
class WPHPixelAdmin {
public $plugin_name;
public function __construct($plugin_name)
{
$this->plugin_name = $plugin_name;
add_action( 'admin_menu', [$this, 'wph_add_admin_page'] );
add_filter( 'plugin_action_links_'.$this->plugin_name, [$this, 'add_action_links'], 10, 2);
}
public function init()
{
}
public function wph_admin_init()
{
if ( is_admin() && current_user_can( 'activate_plugins' ) && !is_plugin_active( 'woocommerce/woocommerce.php' ) ) {
add_action( 'admin_notices', [$this, 'wph_plugin_notice'] );
deactivate_plugins( $this->plugin_name );
if ( isset( $_GET['activate'] ) ) {
unset( $_GET['activate'] );
}
}
add_settings_section(
'wph_admin',
'Ogólne',
'',
'wph_page'
);
register_setting(
'wph_page',
'wphopt_pixel_id'
);
add_settings_field(
'wphopt-pixel-id',
'WP Pixel ID',
[$this, 'wph_admin_output_field'],
'wph_page',
'wph_admin'
);
register_setting(
'wph_page',
'wphopt_pixel_ajax_listing'
);
add_settings_field(
'wphopt-pixel-ajax-listing',
'Czy w Twoim sklepie na stronie listy produktów/kategorii dodanie do koszyka odbywa się bez przeładowania strony?',
[$this, 'wph_admin_output_field_checkbox'],
'wph_page',
'wph_admin',
['id_field' => 'wphopt_pixel_ajax_listing']
);
register_setting(
'wph_page',
'wphopt_pixel_ajax_product'
);
add_settings_field(
'wphopt-pixel-ajax-product',
'Czy w Twoim sklepie na stronie produktu dodanie do koszyka odbywa się bez przeładowania strony?',
[$this, 'wph_admin_output_field_checkbox'],
'wph_page',
'wph_admin',
['id_field' => 'wphopt_pixel_ajax_product']
);
}
public function wph_plugin_notice() {
echo '<div class="error"><p>Błąd, Wirtualna Polska Pixel wymaga zainstalowanego pluginu Woocommerce.</p></div>';
}
public function add_action_links ( $actions, $plugin_file ) {
$mylinks = [
'<a href="' . admin_url( 'options-general.php?page=wph_page' ) . '">'. __('Settings') .'</a>',
];
$actions = array_merge( $actions, $mylinks );
return $actions;
}
public function wph_add_admin_page()
{
add_options_page(
'WP Pixel Ustawienia',
'WP Pixel',
'manage_options',
'wph_page',
[$this, 'wph_show_admin_page']
);
add_action( 'admin_init', [$this, 'wph_admin_init'] );
}
function wph_show_admin_page() {
if (!current_user_can('manage_options')) {
return;
}
?>
<div class="wrap">
<h2>WP Pixel Ustawienia</h2>
<?php //settings_errors();?>
<form action="options.php" method="post">
<?php settings_fields( 'wph_page' ); ?>
<?php do_settings_sections( 'wph_page' ); ?>
<?php submit_button(); ?>
</form>
</div>
<?php
}
public function wph_admin_output_field()
{
$idField = 'wphopt_pixel_id';
$options = get_option($idField, '');
echo "<input id='".esc_attr($idField)."' name='".esc_attr($idField)."' size='40' type='text' value='".esc_attr($options)."' />";
}
public function wph_admin_output_field_checkbox($args)
{
$options = get_option($args['id_field'], '');
$checked = ($options == 1) ? 'checked="checked"' : '';
echo "<label><input id='".esc_attr($args['id_field'])."' name='".esc_attr($args['id_field'])."' type='checkbox' value='1' ".esc_js($checked)." /> Zaznacz jeśli tak</label>";
if(is_plugin_active( 'woo-ajax-add-to-cart/woo-ajax-add-to-cart.php' ) || is_plugin_active( 'woocommerce-ajax-cart/wooajaxcart.php' )) {
echo "<br><small>Wykryto wtyczkę umożliwiającą dodawanie produktów do koszyka bez przeładowania strony, polecamy włączyć powyższą opcję</small>";
}
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

View File

@@ -0,0 +1,41 @@
jQuery(document).ready(function($) {
$('a.add_to_cart_button').on('click', function(e) {
//e.preventDefault();
var qty = parseInt($(this).attr('data-quantity'));
$.ajax({
url: wph_get_product.ajaxurl,
data: {
'action': 'wph_ajax_get_product',
'product_id' : $(this).attr('data-product_id'),
'nonce' : wph_get_product.nonce
},
success:function(data) {
var product = JSON.parse(data);
var cont = {
"id": product.id,
"name": product.name,
"price": product.price,
"sizes": product.sizes,
"quantity": qty,
"category": product.category,
"in_stock": product.in_stock
};
if(product.colour)
cont.colour = product.colour;
wph('track', 'AddToCart', {
contents: [cont]
});
},
error: function(errorThrown){
console.log(errorThrown);
}
});
});
});

View File

@@ -0,0 +1,2 @@
jQuery(document).ready(function($){$('a.add_to_cart_button').on('click',function(e){var qty=parseInt($(this).attr('data-quantity'));$.ajax({url:wph_get_product.ajaxurl,data:{'action':'wph_ajax_get_product','product_id':$(this).attr('data-product_id'),'nonce':wph_get_product.nonce},success:function(data){var product=JSON.parse(data);var cont={"id":product.id,"name":product.name,"price":product.price,"sizes":product.sizes,"quantity":qty,"category":product.category,"in_stock":product.in_stock};if(product.colour)
cont.colour=product.colour;wph('track','AddToCart',{contents:[cont]})},error:function(errorThrown){console.log(errorThrown)}})})})

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

View File

@@ -0,0 +1,134 @@
=== Wirtualna Polska Pixel ===
Contributors: wppixel
Tags: track, wppixel, pixel
Requires at least: 4.7
Tested up to: 6.1
Requires PHP: 7.0
Stable tag: 1.0.1
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html
Narzędzie do pomiaru działań podejmowanych przez użytkowników odwiedzających witrynę i zwiększania skuteczności reklam w Sieci Reklamowej WP.
== Description ==
## Pixel - informacje
WPH Pixel jest wykorzystywany do analizy działania użytkowników odwiedzających witrynę (analizy konwersji). Zebrane informacje można użyć np. do analizy skuteczności ścieżki konwersji oraz budowy lejka sprzedażowego.
Dane z kodów WP wykorzystywane są do:
- Zwiększania liczby konwersji za pomocą pozyskanych z kodu informacji, WP ma możliwość optymalizowania wyświetlanych produktów tak, żeby Partner uzyskał jak największą liczbę konwersji i sprzedaży.
- Określenie zaangażowania użytkowników: Badamy stopień przywiązania użytkowników w treści na stronie klienta. Segmentujemy user'ów w grupy m. in. „porzucone koszyki”, „porzucone produkty”
- Personalizowanie ofert produktowych dla użytkowników: Narzędzia stworzone przez WP dopasowują wyświetlanie produktów do właściwych użytkowników, którzy odwiedzili stronę partnera lub podjęli oczekiwane działanie w witrynie. Dzięki temu produkty Partnera mogą skutecznie konkurować z innymi sklepami w ramach mechanizmów personalizujących.
## Jak działa skrypt WPH Pixel?
Skrypt WP Pixel to kod zapisany w języku JavaScript, który rejestruje na stronie następujące akcje użytkownika :
- `ViewContent` Na stronie głównej, na stronach z kategoriach produktowych oraz na stronach z konkretnymi produktami (kart produktu).
- `Purchase` wywoływany na stronie z potwierdzeniem zakupu (ostatni krok na ścieżce zakupowej). Kod można osadzić po zakończeniu płatności, na tzw. ThankYouPageu zaraz po powrocie od dostawcy płatności lub na stronie z potwierdzeniem zamówienia.
- `AddToCart` Na stronie/zdarzeniu dodania produktów do koszyka (np. kliknięcie, wyświetlenie strony docelowej po kliknięciu przycisku \"Dodaj do koszyka\")
## Parametry
Parametry są obiektami przekazywanymi w formacie JSON. Pozwalają one na dostarczenie dodatkowych informacji o działaniach użytkowników odwiedzających witrynę.
W celu dodania do obiektu parametrów sformatuj dane jako obiekt za pomocą JSON, a następnie dołącz jako trzeci parametr funkcji podczas wywoływania `wph(\'track\')`.
### Lista dostępnych parametrów
|Nazwa parametru|Typ danych|Opis|
|----|---|---|
|value|`number`|Wartość zamówienia.
`przykład: 104.99`|
|currency|`string`|Domyślna wartość jest ustawiona w PLN, jeżeli transakcja odbyła się w innej walucie można dodać informację w jakiej.
`przykład: \'EUR\'`
|name|`string`|Nazwa produktu.
`przykład: \'coca-cola\'`|
|content_category|`string`|Nazwa kategorii.
`przykład: \'napój\'`|
|content_ids|`string[]`|Tablica identyfikatorów produktów przekazanych w feedzie produktowym.
`przykład: [\'ID\', \'ID\', \'ID\']`|
|transaction_id|`string`|unikalny identyfikator zamówienia.
`przykład: \'ID\'`|
|mvalue|`string`|marża na danym przekliku.
`przykład: \'15.50\'`|
|in_stock|`bolean`|Informacja czy produkt jest dostępny.
`przykład: true`|
|price|`number`|Cena pojedynczego produktu.
`przykład: 123.90`
|sizes|`string[]`|Tablica rozmiarów przypisana do produktu.
`przykład: [\'s\', \'m\', \'l\', \'xl\']`|
|shipping_cost|`number`|Koszt przesyłki.
`przykład: 22.55`|
|id|`string`|Unikalny identyfikator produktu.
`przykład: \'asd123asd321z2xc\'`|
|ean|`string`|Unikalny identyfikator ean.
`przykład: \'1zxc123p\'`|
|discount_code|`string`|Kod rabatu.
`przykład: \'QWERTY123\'`|
|quantity|`number`|Ilość jednostek.
`przykład: 3`|
|content_type|`string`|Typ zawartości.
`przykład: \'product\'`|
|content_category_id|`string`|Unikalny identyfikator kategorii.
`przykład: \'ID_KATEGORII\'`|
|contents|`CustomProduct[]`|Lista produktów zawierających identyfikatory powiązanych z feedem produktowym oraz dodatkowe informacje.|
| ||`przykład:`|
|||`[{`|
|||`id: \'ID_PRODUKTU\',`|
|||`name: \'NAZWA_PRODUKTU\',`|
|||`price: 20.15,`|
|||`quantity: 2,`|
|||`ean: \'eanId\',`|
|||`in_stock: true,`|
|||`sizes: [\'SX\', \'L\']`|
|||`}]`||
## Zarządzanie piksela
Po zainstalowaniu piksela na witrynie internetowej otwórz dowolną stronę witryny, w której znajduje się piksel. Jeśli piksel zainstalowany jest prawidłowo, wyśle informacje do systemów analitycznych.
== Installation ==
1. W panelu admina WP, kliknij \"Wtyczki\" -> \"Dodaj nową\".
1. W wyszukiwarce wtyczek, napisz \"Wirtualna Polska Pixel\".
1. Wybierz wtyczkę \"WordPress WP Pixel\" plugin (autora \"Wirtualna Polska Media S.A.\"), i kliknij \"Install\".
1. Aktywuj plugin.
1. Przejdź do Ustawień wtyczki i uzupełnij WP Pixel ID.
LUB...
1. Pobierz wtyczkę z tej strony.
1. W panelu admina WP, kliknij \"Wtyczki\" -> \"Dodaj nową\".
1. Kliknij \"Wyślij wtyczkę na serwer\" następnie wybierz plik .zip z wtyczką, i kliknij \"Install\".
1. Aktywuj plugin.
1. Przejdź do Ustawień wtyczki i uzupełnij WP Pixel ID.
LUB...
1. Pobierz wtyczkę z tej strony.
1. Wypakuj wtyczką na Twój komputer.
1. Użyj klienta FTP w celu wysłania plików wtyczki na serwer.
1. Wyślij folder \"wirtualnapolska-pixel\" do folderu `wp-content/plugins`
1. W panelu admina WP, kliknij \"Wtyczki\" a następnie aktywuj wtyczkę \"WordPress WP Pixel\"
1. Przejdź do Ustawień wtyczki i uzupełnij WP Pixel ID.
== Screenshots ==
1. Konfiguracja wtyczki Wirtualna Polska Pixel
== Changelog ==
= Wirtualna Polska Pixel 1.0 =
* Powstanie nowej wtyczki: Pozwala zarządzać kodem piksela \"Wirtualna Polska Pixel\" jednym kliknięciem!

View File

@@ -0,0 +1,706 @@
<?php
/**
* Plugin Name: Wirtualna Polska Pixel
* Plugin URI:
* Description: Narzędzie do pomiaru działań podejmowanych przez użytkowników odwiedzających witrynę i zwiększania skuteczności reklam w Sieci Reklamowej WP.
* Version: 1.0
* Author: Wirtualna Polska Media S.A.
* Author URI: https://wp.pl/
**/
defined( 'ABSPATH' ) || exit;
class WPHPixelCore {
public $plugin_name = '';
public $pixel_option = 'wphopt_pixel_id';
private $shop_ajax_listing;
private $shop_ajax_product;
private $size_color = [];
public function __construct()
{
$this->plugin_name = plugin_basename(__FILE__);
$this->shop_ajax_listing = get_option('wphopt_pixel_ajax_listing', '0');
$this->shop_ajax_product = get_option('wphopt_pixel_ajax_product', '0');
// all pages
add_action( 'wp_head', [$this, 'init_pixel']); // inicjalizacja wph pixel
// dodanie do koszyka
// 3. ajax add to cart on category page and hotspots
if($this->shop_ajax_product) {
// 2. ajax add to cart woocommerce_after_add_to_cart_button
add_action('wp_footer', [$this, 'pixel_add_to_cart']); // dodanie zdarzenia po dodaniu do koszyka
} else {
// 1. refresh page (not ajax)
add_action( 'wp_footer', [$this, 'pixel_add_to_cart_refresh']);
}
if($this->shop_ajax_listing) {
add_action('wp_enqueue_scripts', [$this, 'pixel_add_to_cart_box']);
add_action( 'wp_ajax_wph_ajax_get_product', [$this, 'wph_ajax_get_product'] );
add_action( 'wp_ajax_nopriv_wph_ajax_get_product', [$this, 'wph_ajax_get_product'] );
}
if('yes' === get_option( 'woocommerce_cart_redirect_after_add' )) {
add_action( 'init', [$this, 'init_session'] );
add_action('woocommerce_add_to_cart', [$this, 'pixel_add_to_cart_redirect'], 10, 4);
}
// home page
add_action( 'wp_footer', [$this, 'pixel_home']); // kod na stronie głównej
// product page
add_action( 'wp_footer', [$this, 'pixel_product']); // strona produktu
// category page
add_action( 'wp_footer', [$this, 'pixel_category']); // strona kategorii
// received order page
add_action( 'wp_footer', [$this, 'pixel_purchase']); // strona podsumowania zamowienia
// landing pages, other pages
add_action( 'wp_footer', [$this, 'pixel_otherpages']); // strony stworzone przez użytkownika
}
public function init_session()
{
if ( ! session_id() ) {
session_start();
}
}
public function init_pixel()
{
$pixel_id = get_option($this->pixel_option, '');
?>
<script>
!function(d,m,e,v,n,t,s){d['WphTrackObject'] = n;
d[n] = window[n] || function() {(d[n].queue=d[n].queue||[]).push(arguments)},
d[n].l = 1 * new Date(), t=m.createElement(e), s=m.getElementsByTagName(e)[0],
t.async=1;t.src=v;s.parentNode.insertBefore(t,s)}(window,document,'script',
'https://pixel.wp.pl/w/tr.js', 'wph');
wph('init', '<?php echo esc_html($pixel_id) ?>', {
plugin_name: "Wordpress",
plugin_version: "1.0.1"
});
</script>
<?php
}
public function pixel_home()
{
if(!is_front_page())
return;
?>
<script>
wph('track', 'ViewContent', { 'content_type': 'Site', 'content_name': 'View' })
</script>
<?php
}
public function pixel_otherpages()
{
if(!is_page() || is_front_page() || is_home() || is_category() || is_single() || is_woocommerce() || is_shop() || is_product_category() || is_product_tag() || is_product() || is_cart() || is_checkout() || is_account_page() || is_wc_endpoint_url())
return;
?>
<script>
wph('track', 'ViewContent', { 'content_type': 'Site', 'content_name': 'LandingPage' })
</script>
<?php
}
public function pixel_product()
{
if(!is_product())
return;
if(isset($_REQUEST['add-to-cart']))
return;
global $product;
$sizes = $this->wph_viewproduct_sizes($product);
$price = $this->wph_price(wc_get_price_including_tax($product));
?>
<script>
wph('track', 'ViewContent', {
content_type: 'Site',
content_name: 'ViewProduct',
contents: [{
id: '<?php echo esc_html( $product->get_id() ) ?>',
name: '<?php echo esc_html( $product->get_name() ) ?>',
ean: '<?php echo esc_html( $product->get_sku() ) ?>',
<?php if($sizes) echo 'sizes: '. wp_json_encode($sizes) .','; ?>
<?php if($this->size_color) echo 'colour: '. wp_json_encode($this->size_color) .','; ?>
category: '<?php echo esc_js($this->wph_getcategory($product)) ?>',
<?php if($price): ?>price: <?php echo esc_js($price) ?>,<?php endif; ?>
in_stock: <?php echo esc_html( $this->wph_instock($product->get_stock_status()) ) ?>
}],
});
</script>
<?php
}
public function pixel_add_to_cart_box()
{
wp_enqueue_script(
'wph-ajax-get-product',
plugin_dir_url( __FILE__ ) . 'assets/js/category_add_to_cart.min.js',
['jquery']
);
wp_localize_script(
'wph-ajax-get-product',
'wph_get_product',
[
'ajaxurl' => admin_url( 'admin-ajax.php' ),
'nonce' => wp_create_nonce('wph-ajax-get-product')
]
);
}
public function wph_ajax_get_product()
{
if ( isset($_REQUEST) && is_numeric($_REQUEST['product_id']) ) {
$product_id = sanitize_text_field($_REQUEST['product_id']);
$product = wc_get_product($product_id);
$sizes = $this->wph_addtocart_sizes();
$sizes = str_replace("['", '', $sizes);
$sizes = str_replace("']", '', $sizes);
$data = [
'name'=>$product->get_name(),
'id'=>(string)$product->get_id(),
'sizes'=>[$sizes],
'category'=>$this->wph_getcategory($product),
'in_stock'=>$this->wph_instock($product->get_stock_status())
];
$price = $this->wph_price(wc_get_price_including_tax($product));
if($price) {
$data['price'] = floatval($price);
}
if($this->size_color)
$data['colour'] = $this->size_color;
echo json_encode($data);
}
die();
}
public function pixel_add_to_cart_redirect($cart_id, $id_product, $quantity, $id_variation)
{
$_SESSION['wph_add_to_cart_product_id'] = [
'id_product' => $id_product,
'quantity' => $quantity,
'id_variation' => $id_variation
];
}
public function pixel_add_to_cart_refresh()
{
$variation_id = NULL;
if(isset($_REQUEST['add-to-cart'])) {
$addToCart = $_REQUEST['add-to-cart'];
$quantity = $_REQUEST['quantity'];
if(isset($_REQUEST['variation_id']) && $_REQUEST['variation_id']) {
$variation_id = $_REQUEST['variation_id'];
}
} else if(isset($_SESSION['wph_add_to_cart_product_id']) && is_array($_SESSION['wph_add_to_cart_product_id'])) {
$addToCart = $_SESSION['wph_add_to_cart_product_id']['id_product'];
$quantity = $_SESSION['wph_add_to_cart_product_id']['quantity'];
if($_SESSION['wph_add_to_cart_product_id']['id_variation']) {
$variation_id = $_SESSION['wph_add_to_cart_product_id']['id_variation'];
}
unset($_SESSION['wph_add_to_cart_product_id']);
} else {
return;
}
if(!isset($addToCart) || !is_numeric($addToCart))
return;
global $product;
if($variation_id) {
$product = new WC_Product_Variation($variation_id);
if(!is_a( $product, 'WC_Product_Variation' )) {
return;
}
} else {
$product = wc_get_product($addToCart);
if(is_a( $product, 'WC_Product' )) {
if($product->get_type() == 'variable') {
return;
}
} else {
return;
}
}
$product_id = $product->get_parent_id();
if(!$product_id)
$product_id = $product->get_id();
$sizes = $this->wph_addtocart_sizes();
$price = $this->wph_price(wc_get_price_including_tax($product));
?>
<script>
wph('track', 'AddToCart', {
contents: [
{
id: '<?php echo esc_html( $product_id ) ?>',
name: '<?php echo esc_html( $product->get_name() ) ?>',
<?php if($price): ?>
price: <?php echo esc_js($price) ?>,
<?php endif; ?>
quantity: <?php echo esc_js( $this->wph_quantity($quantity) ) ?>,
sizes: ['<?php echo esc_js($sizes) ?>'],
<?php if($this->size_color[0]): ?>
colour: ['<?php echo esc_js($this->size_color[0]) ?>'],
<?php endif; ?>
category: '<?php echo esc_html($this->wph_getcategory($product)) ?>',
in_stock: <?php echo esc_html( $this->wph_instock($product->get_stock_status()) ) ?>
}
]
});
</script>
<?php
}
public function pixel_add_to_cart()
{
if(!is_product())
return;
global $product;
$price = wc_get_price_including_tax($product);
$jsVariant = '';
$attrLists = [];
$rozmiar = [];
$color = '';
if($product->get_type() == 'variable') {
$current_products = $product->get_children();
if(is_array($current_products)) {
$jsVariant = 'var pv = [];';
foreach($current_products as $variant) {
$ProductVariant = wc_get_product($variant);
$price = $this->wph_price($ProductVariant->get_price());
$price = ($price) ? $price : '0';
$jsVariant .= 'pv['.esc_html( $variant ).'] = '.$price.';';
}
}
$attributes = $product->get_attributes();
if(is_array($attributes)) {
foreach($attributes as $attribute => $obj) {
$data = $obj->get_data();
if($data['variation'] && $data['visible']) {
$label = wc_attribute_label($attribute);
if($this->wph_check_is_size($label)) {
$rozmiar = [
'attr'=>'attribute_'.esc_html( $attribute ),
'label'=>esc_html( $label ),
];
}
if($this->wph_check_is_color($label))
$color = 'attribute_'.esc_html( $attribute );
}
}
}
}
/*
Potrzebna obsluga .add_to_cart_button czyli produktow na kategorii
dodanie do koszyka na karcie produktu
*/
?>
<script>
(function($){
$('*[name="add-to-cart"], .single_add_to_cart_button').on('click', function(e) {
if ($(this).hasClass('disabled')) {
return;
}
<?php if($product->get_type() == 'variable'): ?>
var a = <?php echo json_encode($attrLists, JSON_FORCE_OBJECT) ?>;
<?php if($color): ?>
var c = $('[name="<?php echo esc_js($color) ?>"]').find(':selected').val();
<?php endif; ?>
<?php if($rozmiar['attr']): ?>
var s = $('[name="<?php echo esc_js($rozmiar['attr']) ?>"]').find(':selected').val();
<?php endif; ?>
<?php endif; ?>
var q = parseInt($('[name="quantity"]').val());
<?php echo esc_js($jsVariant) ?>
var sp = <?php echo esc_js($this->wph_price($price)) ?>;
<?php if($jsVariant): ?>
var cv = $('[name="variation_id"]').val();
sp = pv[cv];
<?php endif; ?>
var objwph = {
"id": '<?php echo esc_js($product->get_id()) ?>',
"name": '<?php echo esc_js($product->get_name()) ?>',
"quantity": q,
"sizes": <?php echo ($product->get_type() == 'variable' && $rozmiar['attr']) ? "[s]" : "['onesize']" ?>,
<?php if($color): ?>"colour": [c],<?php endif; ?>
"category": '<?php echo esc_html($this->wph_getcategory($product)) ?>',
"in_stock": <?php echo esc_html( $this->wph_instock($product->get_stock_status()) ) ?>
};
if(sp)
objwph.price = sp;
wph('track', 'AddToCart', {
contents: [objwph]
});
});
})(jQuery);
</script>
<?php
}
public function pixel_category()
{
if(get_post_type() != 'product')
return;
if(is_product())
return;
global $wp_query;
$contents = [];
if($wp_query->have_posts()):
while ( $wp_query->have_posts() ) : $wp_query->the_post();
global $post;
$id_post = $post->ID;
$productOne = wc_get_product( $id_post );
if(!$productOne) {
continue;
}
$pid = esc_html( $productOne->get_id() );
$pname = esc_html( $productOne->get_name() );
$sizes = $this->wph_viewproduct_sizes($productOne);
$stock = $this->wph_instock($productOne->get_stock_status(), true);
$price = $this->wph_price(wc_get_price_including_tax($productOne));
$cat = $this->wph_getcategory($productOne);
$oneObj = [
'id'=>(string)$pid,
'name'=>$pname,
'category'=>$cat,
'sizes'=>$sizes,
'in_stock'=>$stock
];
if($this->size_color)
$oneObj['colour'] = $this->size_color;
if($price)
$oneObj['price'] = floatval($price);
$contents[] = $oneObj;
endwhile;
endif;
?>
<script>
wph('track', 'ViewContent', {
content_type: 'Site',
content_name: 'ProductList',
name: '<?php echo esc_js( $wp_query->queried_object->name ) ?>',
contents: <?php echo wp_json_encode($contents) ?>
});
</script>
<?php
}
public function pixel_purchase()
{
if( !is_wc_endpoint_url( 'order-received' ) ) return;
global $wp;
$order_id = absint( $wp->query_vars['order-received'] );
if( $order = wc_get_order( $order_id ) ) {
$data = $order->get_data();
$items = $order->get_items();
}
$coupons = $order->get_coupon_codes();
$shipping_total = $data['shipping_total'] + $data['shipping_tax'];
if(!$shipping_total) $shipping_total = 0.00;
$value_gross = $data['total'] - $shipping_total;
$value = $value_gross - $data['cart_tax'];
if(is_array($coupons)) {
$coupons_show = implode(',', $coupons);
$coupons_show = esc_html($coupons_show);
}
// end prepare
$value = $this->wph_price($value);
$value_gross = $this->wph_price($value_gross);
$shipping_total = $this->wph_price($shipping_total);
?>
<script>
wph('track', 'Purchase',
{
transaction_id: '<?php echo esc_html( $order->get_id() ) ?>',
value: <?php echo esc_js($value) ?>,
value_gross: <?php echo esc_js($value_gross) ?>,
shipping_cost: <?php echo esc_js($shipping_total) ?>,
<?php if(isset($coupons[0])) echo "discount_code: '{$coupons_show}'," ?>
contents: [
<?php foreach($items as $item):
$item_data = $item->get_data();
$product = $item->get_product();
$ean = $product->get_sku();
$item_sizes = $item->get_meta_data();
$item_price = wc_get_price_including_tax($product);
$sizes = $this->wph_purchase_sizes($item_sizes);
$colour = $this->size_color;
$price = $this->wph_price($item_price);
$product_id = $product->get_parent_id();
if(!$product_id)
$product_id = $product->get_id();
?>
{
id: '<?php echo esc_html( $product_id ) ?>',
name: '<?php echo esc_html( $product->get_name() ) ?>',
<?php if($ean): ?>ean: '<?php echo esc_html( $ean ) ?>',<?php endif; ?>
category: '<?php echo esc_html($this->wph_getcategory($product)) ?>',
sizes: <?php echo wp_json_encode($sizes) ?>,
<?php if($this->size_color): ?>colour: <?php echo wp_json_encode($colour) ?>,<?php endif; ?>
<?php if($price): ?>price: <?php echo esc_js($price); ?>,<?php endif; ?>
quantity: <?php echo esc_html( $this->wph_quantity($item_data['quantity']) ) ?>,
in_stock: <?php echo esc_html( $this->wph_instock($product->get_stock_status()) ) ?>
},
<?php endforeach; ?>
]
}
);
</script>
<?php
}
public function wph_price($price)
{
// from wc_get_price_including_tax($product)
$outPrice = (is_numeric($price)) ? number_format($price, 2, '.', '') : "";
return $outPrice;
}
public function wph_instock($status, $raw = false)
{
// from $product->get_stock_status()
// ($status == 'onbackorder') = false
if($raw)
return ($status == 'instock') ? true : false;
else
return ($status == 'instock') ? 'true' : 'false';
}
public function wph_quantity($quantity)
{
// from $product->get_stock_quantity()
return (is_numeric($quantity)) ? esc_html($quantity) : "1";
}
public function wph_purchase_sizes($meta)//$attributes
{
$output = [];
$this->size_color = [];
if(is_array($meta)) {
foreach($meta as $single_meta) {
$single_data = $single_meta->get_data();
$label = wc_attribute_label($single_data['key']);
if($this->wph_check_is_color($label))
$this->size_color[] = $single_data['value'];
if($this->wph_check_is_size($label))
$output[] = $single_data['value'];
}
}
if(is_array($this->size_color) && !count($this->size_color)) {
$this->size_color[] = 'onecolour';
}
if(!$output) $output[] = 'onesize';
return $output;
}
public function wph_addtocart_sizes() // data from $_REQUEST
{
$output = '';
$this->size_color = [];
if(is_array($_REQUEST)) {
foreach($_REQUEST as $attr => $val) {
if(strpos($attr, 'attribute_') !== false) {
$attr_prod = str_replace('attribute_', '', $attr);
$label = wc_attribute_label($attr_prod);
if($this->wph_check_is_color($label))
$this->size_color[] = $val;
if($this->wph_check_is_size($label)) {
$output = $val;
}
}
}
}
if(is_array($this->size_color) && !count($this->size_color)) {
$this->size_color[] = 'onecolour';
}
if(!$output) $output = 'onesize';
return $output;
}
private function wph_viewproduct_sizes($product)
{
$attributes = $product->get_attributes();
$output = [];
$this->size_color = [];
if(is_array($attributes)) {
foreach($attributes as $key => $value)
{
$label = wc_attribute_label($key);
if($value->get_variation() && $this->wph_check_is_color($label)) {
$attribute_slug = wc_get_product_terms( get_the_ID(), $key, array( 'fields' => 'slugs' ) );
if(is_array($attribute_slug)) {
foreach($attribute_slug as $one) {
$one_esc = esc_html($one);
$this->size_color[] = $one_esc;
}
}
}
if($value->get_variation() && $this->wph_check_is_size($label)) {
$attribute_slug = wc_get_product_terms( get_the_ID(), $key, array( 'fields' => 'slugs' ) );
if(is_array($attribute_slug)) {
foreach($attribute_slug as $one) {
$one_esc = esc_html($one);
$output[] = $one_esc;
}
}
}
}
}
if(is_array($this->size_color) && !count($this->size_color)) {
$this->size_color[] = 'onecolour';
}
if(!$output) $output[] = 'onesize';
return $output;
}
private function wph_getcategory($product)
{
$id = $product->get_type() == 'variation' ? wp_get_post_parent_id($product->get_id()) : $product->get_id();
$terms = wc_get_product_terms(
$id,
'product_cat',
[
'orderby' => 'parent',
'order' => 'DESC',
]
);
return $terms[0]->name;
}
private function wph_check_is_size($label)
{
return strpos(strtolower($label), 'rozmiar') !== false || strpos(strtolower($label), 'size') !== false;
}
private function wph_check_is_color($label)
{
return strpos(strtolower($label), 'color') !== false || strpos(strtolower($label), 'kolor') !== false || strpos(strtolower($label), 'colour') !== false;
}
}
$WPH_Core = new WPHPixelCore();
require_once('admin/admin.php');
$Admin = new WPHPixelAdmin($WPH_Core->plugin_name);
$Admin->init();