Version Description
Removed currency from shipping costs of Heureka feeds
Download this release
Release Info
Developer | jorisverwater |
Plugin | Product Feed PRO for WooCommerce |
Version | 9.9.3 |
Comparing to | |
See all releases |
Code changes from version 9.3.7 to 9.9.3
- TODO.txt +5 -3
- classes/channels/class-bing_shopping_promotions.php +105 -0
- classes/channels/class-facebook_drm.php +7 -1
- classes/channels/class-google_local_products.php +2 -2
- classes/channels/class-google_shopping.php +5 -0
- classes/channels/class-idealo.php +446 -0
- classes/class-activate.php +17 -3
- classes/class-attributes.php +27 -14
- classes/class-get-products.php +1468 -1248
- js/woosea_autocomplete.js +4 -4
- js/woosea_key.js +1 -1
- js/woosea_manage.js +20 -0
- pages/admin/woosea-generate-feed-step-1.php +3 -3
- pages/admin/woosea-generate-feed-step-4.php +3 -3
- pages/admin/woosea-manage-feed.php +13 -0
- pages/admin/woosea-manage-settings.php +117 -62
- readme.txt +373 -13
- woocommerce-sea.php +54 -32
TODO.txt
CHANGED
@@ -3,20 +3,22 @@ Missing some features you might like? Drop me a line at support@adtribes.io and
|
|
3 |
|
4 |
Tutorial / Blog posts:
|
5 |
- Explain all the different fields/attributes that can be selected from the drop-downs
|
|
|
6 |
|
7 |
Priority issues:
|
|
|
|
|
8 |
- License key input field needs to be a password field (asterixes)
|
|
|
9 |
- Add a preview option so only 5-10 products are being generated
|
10 |
- Own hosted plugin updating: https://rudrastyh.com/wordpress/self-hosted-plugin-update.html
|
11 |
- Google local product feed inventory in XML format (not just TXT like it is now)
|
12 |
- Add support for Multisites
|
13 |
- Add a filter on review score (and amount of reviews)
|
14 |
- Make extra woosea fields available for front-end usage
|
15 |
-
- Only update feed when changes to products have been made
|
16 |
- Add header to extra fields on product edit pages
|
17 |
- Add possibility to create OR rules
|
18 |
- Add support for Google My Business product feeds
|
19 |
-
- Build a better WP Cron check, current one is not good enough
|
20 |
- AMAZON integration:
|
21 |
- requires a professional seller account, 39 dollar a month, before being able to create a developer account
|
22 |
-
- only
|
3 |
|
4 |
Tutorial / Blog posts:
|
5 |
- Explain all the different fields/attributes that can be selected from the drop-downs
|
6 |
+
- product highlight / details article
|
7 |
|
8 |
Priority issues:
|
9 |
+
- Local product feed - store code should also work with an attribute and not just static values
|
10 |
+
- Add Pinterest Tag; https://help.pinterest.com/nl/business/article/install-the-pinterest-tag
|
11 |
- License key input field needs to be a password field (asterixes)
|
12 |
+
- A seperate FB pixel per WPML website / language
|
13 |
- Add a preview option so only 5-10 products are being generated
|
14 |
- Own hosted plugin updating: https://rudrastyh.com/wordpress/self-hosted-plugin-update.html
|
15 |
- Google local product feed inventory in XML format (not just TXT like it is now)
|
16 |
- Add support for Multisites
|
17 |
- Add a filter on review score (and amount of reviews)
|
18 |
- Make extra woosea fields available for front-end usage
|
|
|
19 |
- Add header to extra fields on product edit pages
|
20 |
- Add possibility to create OR rules
|
21 |
- Add support for Google My Business product feeds
|
|
|
22 |
- AMAZON integration:
|
23 |
- requires a professional seller account, 39 dollar a month, before being able to create a developer account
|
24 |
+
- only then we can use their MWS service needed to connect our plugin
|
classes/channels/class-bing_shopping_promotions.php
ADDED
@@ -0,0 +1,105 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Settings for Bing Shopping Promotions feeds
|
4 |
+
*/
|
5 |
+
class WooSEA_bing_shopping_promotions {
|
6 |
+
public $bing_attributes_promotions;
|
7 |
+
|
8 |
+
public static function get_channel_attributes() {
|
9 |
+
$sitename = get_option('blogname');
|
10 |
+
|
11 |
+
$bing_attributes_promotions = array(
|
12 |
+
"Feed fields" => array(
|
13 |
+
"promotion_id" => array(
|
14 |
+
"name" => "promotion_id",
|
15 |
+
"feed_name" => "promotion_id",
|
16 |
+
"format" => "required",
|
17 |
+
),
|
18 |
+
"product_applicability" => array(
|
19 |
+
"name" => "product_applicability",
|
20 |
+
"feed_name" => "product_applicability",
|
21 |
+
"format" => "required",
|
22 |
+
),
|
23 |
+
"offer_type" => array(
|
24 |
+
"name" => "offer_type",
|
25 |
+
"feed_name" => "offer_type",
|
26 |
+
"format" => "required",
|
27 |
+
),
|
28 |
+
"long_title" => array(
|
29 |
+
"name" => "long_title",
|
30 |
+
"feed_name" => "long_title",
|
31 |
+
"format" => "required",
|
32 |
+
),
|
33 |
+
"promotion_effective_dates" => array(
|
34 |
+
"name" => "promotion_effective_dates",
|
35 |
+
"feed_name" => "promotion_effective_dates",
|
36 |
+
"format" => "required",
|
37 |
+
),
|
38 |
+
"redemption_channel" => array(
|
39 |
+
"name" => "redemption_channel",
|
40 |
+
"feed_name" => "redemption_channel",
|
41 |
+
"format" => "required",
|
42 |
+
),
|
43 |
+
"promotional_display_dates" => array(
|
44 |
+
"name" => "promotional_display_dates",
|
45 |
+
"feed_name" => "promotional_display_dates",
|
46 |
+
"format" => "optional",
|
47 |
+
),
|
48 |
+
"minimum_purchase_amount" => array(
|
49 |
+
"name" => "minimum_purchase_amount",
|
50 |
+
"feed_name" => "minimum_purchase_amount",
|
51 |
+
"format" => "optional",
|
52 |
+
),
|
53 |
+
"generic_redemption_code" => array(
|
54 |
+
"name" => "generic_redemption_code",
|
55 |
+
"feed_name" => "generic_redemption_code",
|
56 |
+
"format" => "optional",
|
57 |
+
),
|
58 |
+
),
|
59 |
+
"Structured data attributes" => array(
|
60 |
+
"percent_off" => array(
|
61 |
+
"name" => "percent_off",
|
62 |
+
"feed_name" => "percent_off",
|
63 |
+
"format" => "optional",
|
64 |
+
),
|
65 |
+
"money_off_amount" => array(
|
66 |
+
"name" => "percent_off_amount",
|
67 |
+
"feed_name" => "percent_off_amount",
|
68 |
+
"format" => "optional",
|
69 |
+
),
|
70 |
+
"buy_this_quantity" => array(
|
71 |
+
"name" => "buy_this_quantity",
|
72 |
+
"feed_name" => "buy_this_quantity",
|
73 |
+
"format" => "optional",
|
74 |
+
),
|
75 |
+
"get_this_quantity_discounted" => array(
|
76 |
+
"name" => "get_this_quantity_discounted",
|
77 |
+
"feed_name" => "get_this_quantity_discounted",
|
78 |
+
"format" => "optional",
|
79 |
+
),
|
80 |
+
"free_shipping" => array(
|
81 |
+
"name" => "free_shipping",
|
82 |
+
"feed_name" => "free_shipping",
|
83 |
+
"format" => "optional",
|
84 |
+
),
|
85 |
+
"free_gift_value" => array(
|
86 |
+
"name" => "free_gift_value",
|
87 |
+
"feed_name" => "free_gift_value",
|
88 |
+
"format" => "optional",
|
89 |
+
),
|
90 |
+
"free_gift_description" => array(
|
91 |
+
"name" => "free_gift_description",
|
92 |
+
"feed_name" => "free_gift_description",
|
93 |
+
"format" => "optional",
|
94 |
+
),
|
95 |
+
"free_gift_item_id" => array(
|
96 |
+
"name" => "free_gift_item_id",
|
97 |
+
"feed_name" => "free_gift_item_id",
|
98 |
+
"format" => "optional",
|
99 |
+
),
|
100 |
+
),
|
101 |
+
);
|
102 |
+
return $bing_attributes_promotions;
|
103 |
+
}
|
104 |
+
}
|
105 |
+
?>
|
classes/channels/class-facebook_drm.php
CHANGED
@@ -56,7 +56,7 @@ class WooSEA_facebook_drm {
|
|
56 |
"name" => "title",
|
57 |
"feed_name" => "g:title",
|
58 |
"format" => "required",
|
59 |
-
"woo_suggest" => "
|
60 |
),
|
61 |
"price" => array(
|
62 |
"name" => "price",
|
@@ -116,6 +116,12 @@ class WooSEA_facebook_drm {
|
|
116 |
"format" => "required",
|
117 |
"woo_suggest" => "categories",
|
118 |
),
|
|
|
|
|
|
|
|
|
|
|
|
|
119 |
"fb_product_category" => array(
|
120 |
"name" => "fb_product_category",
|
121 |
"feed_name" => "g:fb_product_category",
|
56 |
"name" => "title",
|
57 |
"feed_name" => "g:title",
|
58 |
"format" => "required",
|
59 |
+
"woo_suggest" => "mother_title",
|
60 |
),
|
61 |
"price" => array(
|
62 |
"name" => "price",
|
116 |
"format" => "required",
|
117 |
"woo_suggest" => "categories",
|
118 |
),
|
119 |
+
"product_type" => array(
|
120 |
+
"name" => "product_type",
|
121 |
+
"feed_name" => "g:product_type",
|
122 |
+
"format" => "required",
|
123 |
+
"woo_suggest" => "category_path",
|
124 |
+
),
|
125 |
"fb_product_category" => array(
|
126 |
"name" => "fb_product_category",
|
127 |
"feed_name" => "g:fb_product_category",
|
classes/channels/class-google_local_products.php
CHANGED
@@ -12,8 +12,8 @@ class WooSEA_google_local_products {
|
|
12 |
$google_local_products = array(
|
13 |
"Local products fields" => array(
|
14 |
"Itemid" => array(
|
15 |
-
"name" => "
|
16 |
-
"feed_name" => "g:
|
17 |
"format" => "required",
|
18 |
"woo_suggest" => "id",
|
19 |
),
|
12 |
$google_local_products = array(
|
13 |
"Local products fields" => array(
|
14 |
"Itemid" => array(
|
15 |
+
"name" => "Id",
|
16 |
+
"feed_name" => "g:id",
|
17 |
"format" => "required",
|
18 |
"woo_suggest" => "id",
|
19 |
),
|
classes/channels/class-google_shopping.php
CHANGED
@@ -356,6 +356,11 @@ class WooSEA_google_shopping {
|
|
356 |
"feed_name" => "g:max_handling_time",
|
357 |
"format" => "optional",
|
358 |
),
|
|
|
|
|
|
|
|
|
|
|
359 |
),
|
360 |
"Tax" => array(
|
361 |
"Tax" => array(
|
356 |
"feed_name" => "g:max_handling_time",
|
357 |
"format" => "optional",
|
358 |
),
|
359 |
+
"Ships from country" => array(
|
360 |
+
"name" => "ships_from_country",
|
361 |
+
"feed_name" => "g:ships_from_country",
|
362 |
+
"format" => "optional",
|
363 |
+
),
|
364 |
),
|
365 |
"Tax" => array(
|
366 |
"Tax" => array(
|
classes/channels/class-idealo.php
ADDED
@@ -0,0 +1,446 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Settings for Idealo feeds
|
4 |
+
*/
|
5 |
+
class WooSEA_idealo {
|
6 |
+
public $idealo;
|
7 |
+
|
8 |
+
public static function get_channel_attributes() {
|
9 |
+
|
10 |
+
$sitename = get_option('blogname');
|
11 |
+
|
12 |
+
$idealo = array(
|
13 |
+
"Feed fields" => array(
|
14 |
+
"SKU" => array(
|
15 |
+
"name" => "SKU",
|
16 |
+
"feed_name" => "sku",
|
17 |
+
"format" => "required",
|
18 |
+
"woo_suggest" => "sku",
|
19 |
+
),
|
20 |
+
"Brand" => array(
|
21 |
+
"name" => "brand",
|
22 |
+
"feed_name" => "brand",
|
23 |
+
"format" => "required",
|
24 |
+
),
|
25 |
+
"Title" => array(
|
26 |
+
"name" => "title",
|
27 |
+
"feed_name" => "title",
|
28 |
+
"format" => "required",
|
29 |
+
"woo_suggest" => "title",
|
30 |
+
),
|
31 |
+
"CategoryPath" => array(
|
32 |
+
"name" => "categoryPath",
|
33 |
+
"feed_name" => "categoryPath",
|
34 |
+
"format" => "required",
|
35 |
+
"woo_suggest" => "category_path",
|
36 |
+
),
|
37 |
+
"url" => array(
|
38 |
+
"name" => "url",
|
39 |
+
"feed_name" => "url",
|
40 |
+
"format" => "required",
|
41 |
+
"woo_suggest" => "link",
|
42 |
+
),
|
43 |
+
"hans" => array(
|
44 |
+
"name" => "hans",
|
45 |
+
"feed_name" => "hans",
|
46 |
+
"format" => "optional",
|
47 |
+
),
|
48 |
+
"Description" => array(
|
49 |
+
"name" => "description",
|
50 |
+
"feed_name" => "description",
|
51 |
+
"format" => "required",
|
52 |
+
"woo_suggest" => "description",
|
53 |
+
),
|
54 |
+
"ImageUrls" => array(
|
55 |
+
"name" => "imageUrls",
|
56 |
+
"feed_name" => "imageUrls",
|
57 |
+
"format" => "optional",
|
58 |
+
"woo_suggest" => "image",
|
59 |
+
),
|
60 |
+
"eec" => array(
|
61 |
+
"name" => "eec",
|
62 |
+
"feed_name" => "eec",
|
63 |
+
"format" => "optional",
|
64 |
+
),
|
65 |
+
"merchantName" => array(
|
66 |
+
"name" => "merchantName",
|
67 |
+
"feed_name" => "merchantName",
|
68 |
+
"format" => "optional",
|
69 |
+
),
|
70 |
+
"merchantId" => array(
|
71 |
+
"name" => "merchantId",
|
72 |
+
"feed_name" => "merchanId",
|
73 |
+
"format" => "optional",
|
74 |
+
),
|
75 |
+
"price" => array(
|
76 |
+
"name" => "price",
|
77 |
+
"feed_name" => "price",
|
78 |
+
"format" => "required",
|
79 |
+
"woo_suggest" => "price",
|
80 |
+
),
|
81 |
+
"basePrice" => array(
|
82 |
+
"name" => "basePrice",
|
83 |
+
"feed_name" => "basePrice",
|
84 |
+
"format" => "optional",
|
85 |
+
),
|
86 |
+
"formerPrice" => array(
|
87 |
+
"name" => "formerPrice",
|
88 |
+
"feed_name" => "formerPrice",
|
89 |
+
"format" => "optional",
|
90 |
+
),
|
91 |
+
"voucherCode" => array(
|
92 |
+
"name" => "voucherCode",
|
93 |
+
"feed_name" => "voucherCode",
|
94 |
+
"format" => "optional",
|
95 |
+
),
|
96 |
+
"deposit" => array(
|
97 |
+
"name" => "deposit",
|
98 |
+
"feed_name" => "deposit",
|
99 |
+
"format" => "optional",
|
100 |
+
),
|
101 |
+
"deliveryTime" => array(
|
102 |
+
"name" => "deliveryTime",
|
103 |
+
"feed_name" => "deliveryTime",
|
104 |
+
"format" => "optional",
|
105 |
+
),
|
106 |
+
"deliveryComment" => array(
|
107 |
+
"name" => "deliveryComment",
|
108 |
+
"feed_name" => "deliveryComment",
|
109 |
+
"format" => "optional",
|
110 |
+
),
|
111 |
+
"maxOrderProcessingTime" => array(
|
112 |
+
"name" => "maxOrderProcessingTime",
|
113 |
+
"feed_name" => "maxOrderProcessingTime",
|
114 |
+
"format" => "optional",
|
115 |
+
),
|
116 |
+
"freeReturnDays" => array(
|
117 |
+
"name" => "freeReturnDays",
|
118 |
+
"feed_name" => "freeReturnDays",
|
119 |
+
"format" => "optional",
|
120 |
+
),
|
121 |
+
"checkout" => array(
|
122 |
+
"name" => "checkout",
|
123 |
+
"feed_name" => "checkout",
|
124 |
+
"format" => "required",
|
125 |
+
),
|
126 |
+
"minimumPrice" => array(
|
127 |
+
"name" => "minimumPrice",
|
128 |
+
"feed_name" => "minimumPrice",
|
129 |
+
"format" => "required",
|
130 |
+
),
|
131 |
+
"fullfillmentType" => array(
|
132 |
+
"name" => "fulfillmentType",
|
133 |
+
"feed_name" => "fulfillmentType",
|
134 |
+
"format" => "required",
|
135 |
+
),
|
136 |
+
"checkoutLimitPerPeriod" => array(
|
137 |
+
"name" => "checkoutLimitPerPeriod",
|
138 |
+
"feed_name" => "checkoutLimitPerPeriod",
|
139 |
+
"format" => "required",
|
140 |
+
),
|
141 |
+
"quantityPerOrder" => array(
|
142 |
+
"name" => "quantityPerOrder",
|
143 |
+
"feed_name" => "quantityPerOrder",
|
144 |
+
"format" => "optional",
|
145 |
+
),
|
146 |
+
"twoManHandlingFee" => array(
|
147 |
+
"name" => "twoManHandlingFee",
|
148 |
+
"feed_name" => "twoManHandlingFee",
|
149 |
+
"format" => "optional",
|
150 |
+
),
|
151 |
+
"disposalFee" => array(
|
152 |
+
"name" => "disposalFee",
|
153 |
+
"feed_name" => "disposalFee",
|
154 |
+
"format" => "optional",
|
155 |
+
),
|
156 |
+
"eans" => array(
|
157 |
+
"name" => "eans",
|
158 |
+
"feed_name" => "eans",
|
159 |
+
"format" => "required",
|
160 |
+
),
|
161 |
+
"packagingUnit" => array(
|
162 |
+
"name" => "packagingUnit",
|
163 |
+
"feed_name" => "packagingUnit",
|
164 |
+
"format" => "optional",
|
165 |
+
),
|
166 |
+
"deliveryCost_ups" => array(
|
167 |
+
"name" => "deliveryCost_ups",
|
168 |
+
"feed_name" => "deliveryCost_ups",
|
169 |
+
"format" => "optional",
|
170 |
+
),
|
171 |
+
"deliveryCost_fedex" => array(
|
172 |
+
"name" => "deliveryCost_fedex",
|
173 |
+
"feed_name" => "deliveryCost_fedex",
|
174 |
+
"format" => "optional",
|
175 |
+
),
|
176 |
+
"deliveryCost_deutsche_post" => array(
|
177 |
+
"name" => "deliveryCost_deutsche_post",
|
178 |
+
"feed_name" => "deliveryCost_deutsche_post",
|
179 |
+
"format" => "optional",
|
180 |
+
),
|
181 |
+
"deliveryCost_dhl" => array(
|
182 |
+
"name" => "deliveryCost_dhl",
|
183 |
+
"feed_name" => "deliveryCost_dhl",
|
184 |
+
"format" => "optional",
|
185 |
+
),
|
186 |
+
"deliveryCost_dhl_go_green" => array(
|
187 |
+
"name" => "deliveryCost_dhl_go_green",
|
188 |
+
"feed_name" => "deliveryCost_dhl_go_green",
|
189 |
+
"format" => "optional",
|
190 |
+
),
|
191 |
+
"deliveryCost_download" => array(
|
192 |
+
"name" => "deliveryCost_download",
|
193 |
+
"feed_name" => "deliveryCost_download",
|
194 |
+
"format" => "optional",
|
195 |
+
),
|
196 |
+
"deliveryCost_dpd" => array(
|
197 |
+
"name" => "deliveryCost_dpd",
|
198 |
+
"feed_name" => "deliveryCost_dpd",
|
199 |
+
"format" => "optional",
|
200 |
+
),
|
201 |
+
"deliveryCost_german_express_logistics" => array(
|
202 |
+
"name" => "deliveryCost_german_express_logistics",
|
203 |
+
"feed_name" => "deliveryCost_german_express_logistics",
|
204 |
+
"format" => "optional",
|
205 |
+
),
|
206 |
+
"deliveryCost_gls" => array(
|
207 |
+
"name" => "deliveryCost_gls",
|
208 |
+
"feed_name" => "deliveryCost_gls",
|
209 |
+
"format" => "optional",
|
210 |
+
),
|
211 |
+
"deliveryCost_gls_think_green" => array(
|
212 |
+
"name" => "deliveryCost_gls_think_green",
|
213 |
+
"feed_name" => "deliveryCost_gls_think_green",
|
214 |
+
"format" => "optional",
|
215 |
+
),
|
216 |
+
"deliveryCost_hermes" => array(
|
217 |
+
"name" => "deliveryCost_hermes",
|
218 |
+
"feed_name" => "deliveryCost_hermes",
|
219 |
+
"format" => "optional",
|
220 |
+
),
|
221 |
+
"deliveryCost_pick_point" => array(
|
222 |
+
"name" => "deliveryCost_pick_points",
|
223 |
+
"feed_name" => "deliveryCost_pick_point",
|
224 |
+
"format" => "optional",
|
225 |
+
),
|
226 |
+
"deliveryCost_spedition" => array(
|
227 |
+
"name" => "deliveryCost_spedition",
|
228 |
+
"feed_name" => "deliveryCost_spedition",
|
229 |
+
"format" => "optional",
|
230 |
+
),
|
231 |
+
"deliveryCost_tnt" => array(
|
232 |
+
"name" => "deliveryCost_tnt",
|
233 |
+
"feed_name" => "deliveryCost_tnt",
|
234 |
+
"format" => "optional",
|
235 |
+
),
|
236 |
+
"deliveryCost_trans_o_flex" => array(
|
237 |
+
"name" => "deliveryCost_trans_o_flex",
|
238 |
+
"feed_name" => "deliveryCost_trand_o_flex",
|
239 |
+
"format" => "optional",
|
240 |
+
),
|
241 |
+
"paymentCosts_credit_card" => array(
|
242 |
+
"name" => "paymentCosts_credit_card",
|
243 |
+
"feed_name" => "paymentCosts_credit_card",
|
244 |
+
"format" => "optional",
|
245 |
+
),
|
246 |
+
"paymentCosts_cash_in_advance" => array(
|
247 |
+
"name" => "paymentCosts_cash_in_advance",
|
248 |
+
"feed_name" => "paymentCosts_cash_in_advance",
|
249 |
+
"format" => "optional",
|
250 |
+
),
|
251 |
+
"paymentCosts_cash_on_delivery" => array(
|
252 |
+
"name" => "paymentCosts_cash_on_delivery",
|
253 |
+
"feed_name" => "paymentCosts_cash_on_delivery",
|
254 |
+
"format" => "optional",
|
255 |
+
),
|
256 |
+
"paymentCosts_paypal" => array(
|
257 |
+
"name" => "paymentCosts_paypal",
|
258 |
+
"feed_name" => "paymentCosts_paypal",
|
259 |
+
"format" => "optional",
|
260 |
+
),
|
261 |
+
"paymentCosts_giropay" => array(
|
262 |
+
"name" => "paymentCosts_giropay",
|
263 |
+
"feed_name" => "paymentCosts_giropay",
|
264 |
+
"format" => "optional",
|
265 |
+
),
|
266 |
+
"paymentCosts_direct_debit" => array(
|
267 |
+
"name" => "paymentCosts_direct_debit",
|
268 |
+
"feed_name" => "paymentCosts_direct_debit",
|
269 |
+
"format" => "optional",
|
270 |
+
),
|
271 |
+
"paymentCosts_google_checkout" => array(
|
272 |
+
"name" => "paymentCosts_google_checkout",
|
273 |
+
"feed_name" => "paymentCosts_google_checkout",
|
274 |
+
"format" => "optional",
|
275 |
+
),
|
276 |
+
"paymentCosts_invoice" => array(
|
277 |
+
"name" => "paymentCosts_invoice",
|
278 |
+
"feed_name" => "paymentCosts_invoice",
|
279 |
+
"format" => "optional",
|
280 |
+
),
|
281 |
+
"paymentCosts_postal_order" => array(
|
282 |
+
"name" => "paymentCosts_postal_order",
|
283 |
+
"feed_name" => "paymentCosts_postal_order",
|
284 |
+
"format" => "optional",
|
285 |
+
),
|
286 |
+
"paymentCosts_paysafecard" => array(
|
287 |
+
"name" => "paymentCosts_paysafecard",
|
288 |
+
"feed_name" => "paymentCosts_paysafecard",
|
289 |
+
"format" => "optional",
|
290 |
+
),
|
291 |
+
"paymentCosts_sofortueberweisung" => array(
|
292 |
+
"name" => "paymentCosts_sofortueberweisung",
|
293 |
+
"feed_name" => "paymentCosts_sofortueberweisung",
|
294 |
+
"format" => "optional",
|
295 |
+
),
|
296 |
+
"paymentCosts_amazon_payment" => array(
|
297 |
+
"name" => "paymentCosts_amazon_payment",
|
298 |
+
"feed_name" => "paymentCosts_amazon_payment",
|
299 |
+
"format" => "optional",
|
300 |
+
),
|
301 |
+
"paymentCosts_electronical_payment_standard" => array(
|
302 |
+
"name" => "paymentCosts_electronical_payment_standard",
|
303 |
+
"feed_name" => "paymentCosts_electronical_payment_standard",
|
304 |
+
"format" => "optional",
|
305 |
+
),
|
306 |
+
"paymentCosts_ecotax" => array(
|
307 |
+
"name" => "paymentCosts_ecotax",
|
308 |
+
"feed_name" => "paymentCosts_ecotax",
|
309 |
+
"format" => "optional",
|
310 |
+
),
|
311 |
+
"used" => array(
|
312 |
+
"name" => "used",
|
313 |
+
"feed_name" => "used",
|
314 |
+
"format" => "optional",
|
315 |
+
),
|
316 |
+
"download" => array(
|
317 |
+
"name" => "download",
|
318 |
+
"feed_name" => "download",
|
319 |
+
"format" => "optional",
|
320 |
+
),
|
321 |
+
"replica" => array(
|
322 |
+
"name" => "replica",
|
323 |
+
"feed_name" => "replica",
|
324 |
+
"format" => "optional",
|
325 |
+
),
|
326 |
+
"size" => array(
|
327 |
+
"name" => "size",
|
328 |
+
"feed_name" => "size",
|
329 |
+
"format" => "optional",
|
330 |
+
),
|
331 |
+
"colour" => array(
|
332 |
+
"name" => "colour",
|
333 |
+
"feed_name" => "colour",
|
334 |
+
"format" => "optional",
|
335 |
+
),
|
336 |
+
"gender" => array(
|
337 |
+
"name" => "gender",
|
338 |
+
"feed_name" => "gender",
|
339 |
+
"format" => "optional",
|
340 |
+
),
|
341 |
+
"material" => array(
|
342 |
+
"name" => "material",
|
343 |
+
"feed_name" => "material",
|
344 |
+
"format" => "optional",
|
345 |
+
),
|
346 |
+
"oens" => array(
|
347 |
+
"name" => "oens",
|
348 |
+
"feed_name" => "oens",
|
349 |
+
"format" => "optional",
|
350 |
+
),
|
351 |
+
"kbas" => array(
|
352 |
+
"name" => "kbas",
|
353 |
+
"feed_name" => "kbas",
|
354 |
+
"format" => "optional",
|
355 |
+
),
|
356 |
+
"diopter" => array(
|
357 |
+
"name" => "diopter",
|
358 |
+
"feed_name" => "diopter",
|
359 |
+
"format" => "optional",
|
360 |
+
),
|
361 |
+
"baseCurve" => array(
|
362 |
+
"name" => "baseCurve",
|
363 |
+
"feed_name" => "baseCurve",
|
364 |
+
"format" => "optional",
|
365 |
+
),
|
366 |
+
"diameter" => array(
|
367 |
+
"name" => "diameter",
|
368 |
+
"feed_name" => "diameter",
|
369 |
+
"format" => "optional",
|
370 |
+
),
|
371 |
+
"cylinder" => array(
|
372 |
+
"name" => "cylinder",
|
373 |
+
"feed_name" => "cylinder",
|
374 |
+
"format" => "optional",
|
375 |
+
),
|
376 |
+
"axis" => array(
|
377 |
+
"name" => "axis",
|
378 |
+
"feed_name" => "axis",
|
379 |
+
"format" => "optional",
|
380 |
+
),
|
381 |
+
"addition" => array(
|
382 |
+
"name" => "addition",
|
383 |
+
"feed_name" => "addition",
|
384 |
+
"format" => "optional",
|
385 |
+
),
|
386 |
+
"pzns" => array(
|
387 |
+
"name" => "pzns",
|
388 |
+
"feed_name" => "pzns",
|
389 |
+
"format" => "optional",
|
390 |
+
),
|
391 |
+
"quantity" => array(
|
392 |
+
"name" => "quantity",
|
393 |
+
"feed_name" => "quantity",
|
394 |
+
"format" => "optional",
|
395 |
+
),
|
396 |
+
"fuelEfficiency" => array(
|
397 |
+
"name" => "fuelEfficiency",
|
398 |
+
"feed_name" => "fuelEfficiency",
|
399 |
+
"format" => "optional",
|
400 |
+
),
|
401 |
+
"wetGrip" => array(
|
402 |
+
"name" => "wetGrip",
|
403 |
+
"feed_name" => "wetGrip",
|
404 |
+
"format" => "optional",
|
405 |
+
),
|
406 |
+
"externalRollingNoise" => array(
|
407 |
+
"name" => "externalRollingNoise",
|
408 |
+
"feed_name" => "externalRollingNoise",
|
409 |
+
"format" => "optional",
|
410 |
+
),
|
411 |
+
"rollingNoiseClass" => array(
|
412 |
+
"name" => "rollingNoiseClass",
|
413 |
+
"feed_name" => "rollingNoiseClass",
|
414 |
+
"format" => "optional",
|
415 |
+
),
|
416 |
+
"alcoholicContent" => array(
|
417 |
+
"name" => "alcoholicContent",
|
418 |
+
"feed_name" => "alcoholicConent",
|
419 |
+
"format" => "optional",
|
420 |
+
),
|
421 |
+
"allergenInformation" => array(
|
422 |
+
"name" => "allergenInformation",
|
423 |
+
"feed_name" => "allergenInformation",
|
424 |
+
"format" => "optional",
|
425 |
+
),
|
426 |
+
"countryOfOrigin" => array(
|
427 |
+
"name" => "countryOfOrigin",
|
428 |
+
"feed_name" => "countryOfOrigin",
|
429 |
+
"format" => "optional",
|
430 |
+
),
|
431 |
+
"bottler" => array(
|
432 |
+
"name" => "bottler",
|
433 |
+
"feed_name" => "bottler",
|
434 |
+
"format" => "optional",
|
435 |
+
),
|
436 |
+
"importer" => array(
|
437 |
+
"name" => "importer",
|
438 |
+
"feed_name" => "importer",
|
439 |
+
"format" => "optional",
|
440 |
+
),
|
441 |
+
),
|
442 |
+
);
|
443 |
+
return $idealo;
|
444 |
+
}
|
445 |
+
}
|
446 |
+
?>
|
classes/class-activate.php
CHANGED
@@ -64,7 +64,14 @@ class WooSEA_Activation {
|
|
64 |
"fields" => "google_shopping",
|
65 |
"taxonomy" => "google_shopping",
|
66 |
"utm_source" => "Bing Shopping",
|
67 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
68 |
"Facebook Catalog Feed / Instagram" => array (
|
69 |
"channel_hash" => md5("Facebook Remarketing"),
|
70 |
"name" => "Facebook Catalog Feed / Instagram",
|
@@ -90,7 +97,7 @@ class WooSEA_Activation {
|
|
90 |
"channel_hash" => md5("Snapchat Product Catalog"),
|
91 |
"name" => "Snapchat Product Catalog",
|
92 |
"fields" => "snapchat",
|
93 |
-
"taxonomy" => "
|
94 |
"utm_source" => "snapchat",
|
95 |
"type" => "Advertising" ),
|
96 |
),
|
@@ -740,7 +747,7 @@ class WooSEA_Activation {
|
|
740 |
"Idealo.de" => array (
|
741 |
"channel_hash" => md5("Idealo.de"),
|
742 |
"name" => "Idealo.de",
|
743 |
-
"fields" => "
|
744 |
"taxonomy" => "none",
|
745 |
"utm_source" => "Idealo.de",
|
746 |
"type" => "Comparison shopping engine" ),
|
@@ -1112,6 +1119,13 @@ class WooSEA_Activation {
|
|
1112 |
"taxonomy" => "none",
|
1113 |
"utm_source" => "Tweakers.nl",
|
1114 |
"type" => "Comparison shopping engine" ),
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1115 |
"Fashionchick.nl" => array (
|
1116 |
"channel_hash" => md5("Fashionchick.nl"),
|
1117 |
"name" => "Fashionchick.nl",
|
64 |
"fields" => "google_shopping",
|
65 |
"taxonomy" => "google_shopping",
|
66 |
"utm_source" => "Bing Shopping",
|
67 |
+
"type" => "Advertising" ),
|
68 |
+
"Bing Shopping Promotions" => array (
|
69 |
+
"channel_hash" => md5("Bing Shopping Promotions"),
|
70 |
+
"name" => "Bing Shopping Promotions",
|
71 |
+
"fields" => "google_shopping_promotions",
|
72 |
+
"taxonomy" => "google_shopping_promotions",
|
73 |
+
"utm_source" => "Bing Shopping Promotions",
|
74 |
+
"type" => "Advertising" ),
|
75 |
"Facebook Catalog Feed / Instagram" => array (
|
76 |
"channel_hash" => md5("Facebook Remarketing"),
|
77 |
"name" => "Facebook Catalog Feed / Instagram",
|
97 |
"channel_hash" => md5("Snapchat Product Catalog"),
|
98 |
"name" => "Snapchat Product Catalog",
|
99 |
"fields" => "snapchat",
|
100 |
+
"taxonomy" => "google_shopping",
|
101 |
"utm_source" => "snapchat",
|
102 |
"type" => "Advertising" ),
|
103 |
),
|
747 |
"Idealo.de" => array (
|
748 |
"channel_hash" => md5("Idealo.de"),
|
749 |
"name" => "Idealo.de",
|
750 |
+
"fields" => "idealo",
|
751 |
"taxonomy" => "none",
|
752 |
"utm_source" => "Idealo.de",
|
753 |
"type" => "Comparison shopping engine" ),
|
1119 |
"taxonomy" => "none",
|
1120 |
"utm_source" => "Tweakers.nl",
|
1121 |
"type" => "Comparison shopping engine" ),
|
1122 |
+
"Boetiek.nl" => array (
|
1123 |
+
"channel_hash" => md5("Boetiek.nl"),
|
1124 |
+
"name" => "Boetiek.nl",
|
1125 |
+
"fields" => "boetiek",
|
1126 |
+
"taxonomy" => "none",
|
1127 |
+
"utm_source" => "Boetiek.nl",
|
1128 |
+
"type" => "Comparison shopping engine" ),
|
1129 |
"Fashionchick.nl" => array (
|
1130 |
"channel_hash" => md5("Fashionchick.nl"),
|
1131 |
"name" => "Fashionchick.nl",
|
classes/class-attributes.php
CHANGED
@@ -48,7 +48,7 @@ private function get_dynamic_attributes(){
|
|
48 |
global $wpdb;
|
49 |
$list = array();
|
50 |
|
51 |
-
$no_taxonomies = array("portfolio_category","portfolio_skills","portfolio_tags","nav_menu","post_format","slide-page","element_category","template_category","portfolio_category","portfolio_skills","portfolio_tags","faq_category","slide-page","
|
52 |
$taxonomies = get_taxonomies();
|
53 |
$diff_taxonomies = array_diff($taxonomies, $no_taxonomies);
|
54 |
|
@@ -205,13 +205,17 @@ public function get_mapping_attributes_dropdown() {
|
|
205 |
"sku_item_group_id" => "SKU_ITEM_GROUP_ID (Facebook)",
|
206 |
"wc_post_id_product_id" => "Wc_post_id_product_id (Facebook)",
|
207 |
"title" => "Product name",
|
208 |
-
"mother_title" => "Product name parent product",
|
209 |
"title_hyphen" => "Product name hyphen",
|
|
|
|
|
210 |
"title_lc" => "Product name lowercase",
|
|
|
211 |
"description" => "Product description",
|
212 |
"short_description" => "Product short description",
|
213 |
"raw_description" => "Unfiltered product description",
|
214 |
"raw_short_description" => "Unfiltered product short description",
|
|
|
|
|
215 |
"price" => "Price",
|
216 |
"regular_price" => "Regular price",
|
217 |
"sale_price" => "Sale price",
|
@@ -247,9 +251,10 @@ public function get_mapping_attributes_dropdown() {
|
|
247 |
"category_path" => "Category path",
|
248 |
"category_path_short" => "Category path short",
|
249 |
"category_path_skroutz" => "Category path Skroutz",
|
250 |
-
"one_category" => "
|
251 |
"condition" => "Condition",
|
252 |
-
|
|
|
253 |
"quantity" => "Quantity [Stock]",
|
254 |
"product_type" => "Product Type",
|
255 |
"content_type" => "Content Type",
|
@@ -267,7 +272,8 @@ public function get_mapping_attributes_dropdown() {
|
|
267 |
"length" => "Length",
|
268 |
"shipping" => "Shipping",
|
269 |
"shipping_price" => "Shipping cost",
|
270 |
-
"shipping_label" => "Shipping
|
|
|
271 |
"visibility" => "Visibility",
|
272 |
"rating_total" => "Total rating",
|
273 |
"rating_average" => "Average rating",
|
@@ -350,9 +356,10 @@ public function get_mapping_attributes_dropdown() {
|
|
350 |
|
351 |
foreach ($custom_attributes as $key => $value) {
|
352 |
if (!preg_match("/pyre|sbg|fusion/i",$value)){
|
353 |
-
|
|
|
354 |
$dropdown .= "<option value='$key'>" . ucfirst($value) . "</option>";
|
355 |
-
|
356 |
}
|
357 |
}
|
358 |
|
@@ -398,15 +405,19 @@ public function get_mapping_attributes_dropdown() {
|
|
398 |
"parent_sku" => "SKU parent variable product",
|
399 |
"sku_item_group_id" => "SKU_ITEM_GROUP_ID (Facebook)",
|
400 |
"wc_post_id_product_id" => "Wc_post_id_product_id (Facebook)",
|
401 |
-
|
402 |
-
|
403 |
-
|
|
|
404 |
"title_lc" => "Product name lowercase",
|
|
|
405 |
"description" => "Product description",
|
406 |
"short_description" => "Product short description",
|
407 |
"raw_description" => "Unfiltered product description",
|
408 |
"raw_short_description" => "Unfiltered product short description",
|
409 |
-
|
|
|
|
|
410 |
"variable_link" => "Product variable link",
|
411 |
"add_to_cart_link" => "Add to cart link",
|
412 |
"image" => "Main image",
|
@@ -429,10 +440,11 @@ public function get_mapping_attributes_dropdown() {
|
|
429 |
"category_path" => "Category path",
|
430 |
"category_path_short" => "Category path short",
|
431 |
"category_path_skroutz" => "Category path Skroutz",
|
432 |
-
"one_category" => "
|
433 |
"condition" => "Condition",
|
434 |
"availability" => "Availability",
|
435 |
-
|
|
|
436 |
"price" => "Price",
|
437 |
"regular_price" => "Regular price",
|
438 |
"sale_price" => "Sale price",
|
@@ -464,7 +476,8 @@ public function get_mapping_attributes_dropdown() {
|
|
464 |
"length" => "Length",
|
465 |
"shipping" => "Shipping",
|
466 |
"shipping_price" => "Shipping cost",
|
467 |
-
|
|
|
468 |
"visibility" => "Visibility",
|
469 |
"rating_total" => "Total rating",
|
470 |
"rating_average" => "Average rating",
|
48 |
global $wpdb;
|
49 |
$list = array();
|
50 |
|
51 |
+
$no_taxonomies = array("portfolio_category","portfolio_skills","portfolio_tags","nav_menu","post_format","slide-page","element_category","template_category","portfolio_category","portfolio_skills","portfolio_tags","faq_category","slide-page","category","post_tag","nav_menu","link_category","post_format","product_type","product_visibility","product_cat","product_shipping_class","product_tag");
|
52 |
$taxonomies = get_taxonomies();
|
53 |
$diff_taxonomies = array_diff($taxonomies, $no_taxonomies);
|
54 |
|
205 |
"sku_item_group_id" => "SKU_ITEM_GROUP_ID (Facebook)",
|
206 |
"wc_post_id_product_id" => "Wc_post_id_product_id (Facebook)",
|
207 |
"title" => "Product name",
|
|
|
208 |
"title_hyphen" => "Product name hyphen",
|
209 |
+
"mother_title" => "Product name parent product",
|
210 |
+
"mother_title_hyphen" => "Product name parent product hyphen",
|
211 |
"title_lc" => "Product name lowercase",
|
212 |
+
"title_lcw" => "Product name uppercase first characters",
|
213 |
"description" => "Product description",
|
214 |
"short_description" => "Product short description",
|
215 |
"raw_description" => "Unfiltered product description",
|
216 |
"raw_short_description" => "Unfiltered product short description",
|
217 |
+
"mother_description" => "Product description parent product",
|
218 |
+
"mother_short_description" => "Product short description parent product",
|
219 |
"price" => "Price",
|
220 |
"regular_price" => "Regular price",
|
221 |
"sale_price" => "Sale price",
|
251 |
"category_path" => "Category path",
|
252 |
"category_path_short" => "Category path short",
|
253 |
"category_path_skroutz" => "Category path Skroutz",
|
254 |
+
"one_category" => "Yoast primary category",
|
255 |
"condition" => "Condition",
|
256 |
+
"availability" => "Availability",
|
257 |
+
"stock_status" => "Stock Status WooCommerce",
|
258 |
"quantity" => "Quantity [Stock]",
|
259 |
"product_type" => "Product Type",
|
260 |
"content_type" => "Content Type",
|
272 |
"length" => "Length",
|
273 |
"shipping" => "Shipping",
|
274 |
"shipping_price" => "Shipping cost",
|
275 |
+
"shipping_label" => "Shipping class slug",
|
276 |
+
"shipping_label_name" => "Shipping class name",
|
277 |
"visibility" => "Visibility",
|
278 |
"rating_total" => "Total rating",
|
279 |
"rating_average" => "Average rating",
|
356 |
|
357 |
foreach ($custom_attributes as $key => $value) {
|
358 |
if (!preg_match("/pyre|sbg|fusion/i",$value)){
|
359 |
+
$value = ltrim($value);
|
360 |
+
if (!empty($value)){
|
361 |
$dropdown .= "<option value='$key'>" . ucfirst($value) . "</option>";
|
362 |
+
}
|
363 |
}
|
364 |
}
|
365 |
|
405 |
"parent_sku" => "SKU parent variable product",
|
406 |
"sku_item_group_id" => "SKU_ITEM_GROUP_ID (Facebook)",
|
407 |
"wc_post_id_product_id" => "Wc_post_id_product_id (Facebook)",
|
408 |
+
"title" => "Product name",
|
409 |
+
"title_hyphen" => "Product name hyphen",
|
410 |
+
"mother_title" => "Product name parent product",
|
411 |
+
"mother_title_hyphen" => "Product name parent product hyphen",
|
412 |
"title_lc" => "Product name lowercase",
|
413 |
+
"title_lcw" => "Product name uppercase first characters",
|
414 |
"description" => "Product description",
|
415 |
"short_description" => "Product short description",
|
416 |
"raw_description" => "Unfiltered product description",
|
417 |
"raw_short_description" => "Unfiltered product short description",
|
418 |
+
"mother_description" => "Product description parent product",
|
419 |
+
"mother_short_description" => "Product short description parent product",
|
420 |
+
"link" => "Link",
|
421 |
"variable_link" => "Product variable link",
|
422 |
"add_to_cart_link" => "Add to cart link",
|
423 |
"image" => "Main image",
|
440 |
"category_path" => "Category path",
|
441 |
"category_path_short" => "Category path short",
|
442 |
"category_path_skroutz" => "Category path Skroutz",
|
443 |
+
"one_category" => "Yoast primary category",
|
444 |
"condition" => "Condition",
|
445 |
"availability" => "Availability",
|
446 |
+
"stock_status" => "Stock Status WooCommerce",
|
447 |
+
"quantity" => "Quantity [Stock]",
|
448 |
"price" => "Price",
|
449 |
"regular_price" => "Regular price",
|
450 |
"sale_price" => "Sale price",
|
476 |
"length" => "Length",
|
477 |
"shipping" => "Shipping",
|
478 |
"shipping_price" => "Shipping cost",
|
479 |
+
"shipping_label" => "Shipping class slug",
|
480 |
+
"shipping_label_name" => "Shipping class name",
|
481 |
"visibility" => "Visibility",
|
482 |
"rating_total" => "Total rating",
|
483 |
"rating_average" => "Average rating",
|
classes/class-get-products.php
CHANGED
@@ -26,7 +26,6 @@ class WooSEA_Get_Products {
|
|
26 |
return "<![CDATA[ $string ]]>";
|
27 |
}
|
28 |
|
29 |
-
|
30 |
/**
|
31 |
* Check if a plugin is active
|
32 |
*/
|
@@ -57,6 +56,11 @@ class WooSEA_Get_Products {
|
|
57 |
* Get all approved product review comments for Google's Product Review Feeds
|
58 |
*/
|
59 |
public function woosea_get_reviews ( $product_data, $product ) {
|
|
|
|
|
|
|
|
|
|
|
60 |
$approved_reviews = array();
|
61 |
$prod_id = $product_data['id'];
|
62 |
|
@@ -73,54 +77,61 @@ class WooSEA_Get_Products {
|
|
73 |
|
74 |
// Loop through all product reviews for this specific products (ternary operators)
|
75 |
foreach($reviews as $review_raw){
|
76 |
-
$review = array();
|
77 |
-
$review['review_reviewer_image'] = empty($product_data['reviewer_image']) ? '' : $product_data['reviewer_image'];
|
78 |
-
$review['review_ratings'] = get_comment_meta( $review_raw->comment_ID, 'rating', true);
|
79 |
-
$review['review_id'] = $review_raw->comment_ID;
|
80 |
-
|
81 |
-
// Names need to be anonomyzed
|
82 |
-
$name_pieces = explode(" ", $review_raw->comment_author);
|
83 |
-
$nr_name_pieces = count($name_pieces);
|
84 |
-
$cnt = 0;
|
85 |
-
$name = "";
|
86 |
-
foreach($name_pieces as $n_piece){
|
87 |
-
if($cnt > 0){
|
88 |
-
$n_piece = substr($n_piece, 0, 1);
|
89 |
-
}
|
90 |
-
$name .= $n_piece." ";
|
91 |
-
$cnt++;
|
92 |
-
}
|
93 |
|
94 |
-
//
|
95 |
-
$
|
96 |
-
|
97 |
-
|
98 |
-
|
99 |
-
|
100 |
-
|
101 |
-
|
102 |
-
|
103 |
-
|
104 |
-
|
105 |
-
|
106 |
-
|
107 |
-
|
108 |
-
|
109 |
-
|
110 |
-
|
111 |
-
|
112 |
-
|
113 |
-
|
114 |
-
|
115 |
-
|
116 |
-
|
117 |
-
|
118 |
-
|
119 |
-
|
120 |
-
|
121 |
-
|
122 |
-
|
123 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
124 |
}
|
125 |
$review_count = $product->get_review_count();
|
126 |
$review_average = $product->get_average_rating();
|
@@ -174,7 +185,7 @@ class WooSEA_Get_Products {
|
|
174 |
if($feed_config['fields'] == "google_drm"){
|
175 |
$utm_part .= "&$key=$value";
|
176 |
} else {
|
177 |
-
$utm_part .= "
|
178 |
}
|
179 |
}
|
180 |
|
@@ -200,7 +211,7 @@ class WooSEA_Get_Products {
|
|
200 |
if($parentId > 0){
|
201 |
# Even though variation products always have parameters in the URL we still need to check and make sure they are there
|
202 |
if(strpos($link, '?') !== false){
|
203 |
-
$utm_part = "&
|
204 |
} else {
|
205 |
$utm_part = "?".ltrim($utm_part, '&');
|
206 |
}
|
@@ -324,7 +335,7 @@ class WooSEA_Get_Products {
|
|
324 |
/**
|
325 |
* Get category path (needed for Prisjakt)
|
326 |
*/
|
327 |
-
public function woosea_get_term_parents( $id, $taxonomy, $link =
|
328 |
// Only add Home to the beginning of the chain when we start buildin the chain
|
329 |
if(empty($visited)){
|
330 |
$chain = 'Home';
|
@@ -363,6 +374,15 @@ class WooSEA_Get_Products {
|
|
363 |
return $chain;
|
364 |
}
|
365 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
366 |
/**
|
367 |
* Get all configured shipping zones
|
368 |
*/
|
@@ -712,6 +732,8 @@ class WooSEA_Get_Products {
|
|
712 |
$shipping_methods = $zone['shipping_methods'];
|
713 |
|
714 |
foreach ($shipping_methods as $k => $v){
|
|
|
|
|
715 |
|
716 |
if($v->enabled == "yes"){
|
717 |
if(empty($zone_details['country'])){
|
@@ -754,22 +776,22 @@ class WooSEA_Get_Products {
|
|
754 |
}
|
755 |
}
|
756 |
|
757 |
-
// WooCommerce Table Rate Bolder Elements
|
758 |
-
|
759 |
-
|
760 |
-
|
761 |
-
|
762 |
-
|
763 |
-
|
764 |
-
|
765 |
-
|
766 |
-
|
767 |
-
|
768 |
-
|
769 |
-
|
770 |
-
|
771 |
-
|
772 |
-
|
773 |
wc_load_cart();
|
774 |
|
775 |
WC()->customer->set_shipping_country( $code_from_config );
|
@@ -787,17 +809,86 @@ class WooSEA_Get_Products {
|
|
787 |
// Read cart and get schipping costs
|
788 |
foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
|
789 |
$total_cost = WC()->cart->get_total();
|
790 |
-
|
|
|
|
|
791 |
$shipping_cost = wc_format_localized_price($shipping_cost);
|
792 |
-
|
793 |
-
}
|
794 |
// Make sure to empty the cart again
|
795 |
WC()->cart->empty_cart();
|
796 |
-
|
797 |
-
|
798 |
-
|
799 |
-
|
800 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
801 |
|
802 |
// CLASS SHIPPING COSTS
|
803 |
if((isset($v->instance_settings[$class_cost_id])) AND ($class_cost_id != "no_class_cost")){
|
@@ -931,6 +1022,16 @@ class WooSEA_Get_Products {
|
|
931 |
unset($shipping_cost);
|
932 |
}
|
933 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
934 |
}
|
935 |
|
936 |
if(isset($zone_details)){
|
@@ -948,7 +1049,12 @@ class WooSEA_Get_Products {
|
|
948 |
}
|
949 |
}
|
950 |
}
|
951 |
-
|
|
|
|
|
|
|
|
|
|
|
952 |
if(isset($shipping_cost)){
|
953 |
if(strlen($shipping_cost) > 0){
|
954 |
if($project_config['ship_suffix'] == "false"){
|
@@ -957,12 +1063,9 @@ class WooSEA_Get_Products {
|
|
957 |
$zone_details['price'] = trim($shipping_cost);
|
958 |
}
|
959 |
} else {
|
960 |
-
// $shipping_cost = 0;
|
961 |
if(isset($shipping_cost)){
|
962 |
$zone_details['price'] = trim($currency." ".$shipping_cost);
|
963 |
}
|
964 |
-
//unset($zone_details);
|
965 |
-
//unset($shipping_cost);
|
966 |
}
|
967 |
}
|
968 |
}
|
@@ -992,12 +1095,19 @@ class WooSEA_Get_Products {
|
|
992 |
|
993 |
// Remove other shipping classes when free shipping is relevant
|
994 |
$free_check = "yes";
|
995 |
-
//$free_check = get_option ('free_shipping');
|
996 |
|
997 |
if(in_array($free_check, array_column($shipping_arr, 'free'))) { // search value in the array
|
998 |
foreach($shipping_arr as $k => $v) {
|
999 |
if(!in_array($free_check, $v)){
|
1000 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1001 |
}
|
1002 |
}
|
1003 |
}
|
@@ -1005,8 +1115,6 @@ class WooSEA_Get_Products {
|
|
1005 |
// Fix empty services
|
1006 |
foreach($shipping_arr as $k => $v){
|
1007 |
if(empty($v['service'])){
|
1008 |
-
// $lalala = get_option( 'woocommerce_default_country' );
|
1009 |
-
// $shipping_arr[$k]['country'] = get_option( 'woocommerce_default_country' );
|
1010 |
unset($shipping_arr[$k]);
|
1011 |
}
|
1012 |
}
|
@@ -1145,16 +1253,19 @@ class WooSEA_Get_Products {
|
|
1145 |
} elseif (preg_match("/g:product_detail/i",$k)){
|
1146 |
if(!empty($v)){
|
1147 |
$product_detail_split = explode("#", $v);
|
1148 |
-
|
1149 |
-
|
1150 |
-
|
1151 |
-
|
1152 |
-
|
1153 |
-
|
1154 |
-
|
1155 |
-
|
1156 |
-
|
1157 |
-
|
|
|
|
|
|
|
1158 |
}
|
1159 |
} elseif ($k == "g:installment"){
|
1160 |
if(!empty($v)){
|
@@ -1355,187 +1466,193 @@ class WooSEA_Get_Products {
|
|
1355 |
|
1356 |
// For Google Product review template
|
1357 |
if (($feed_config['name'] == "Google Product Review") AND (empty($xml->channel))) {
|
1358 |
-
|
|
|
|
|
1359 |
|
1360 |
-
|
1361 |
|
1362 |
-
|
1363 |
-
|
1364 |
-
|
1365 |
-
|
1366 |
|
1367 |
-
|
1368 |
-
|
1369 |
|
1370 |
-
|
1371 |
-
|
1372 |
|
1373 |
-
|
1374 |
-
|
1375 |
-
|
1376 |
|
1377 |
-
|
1378 |
-
|
1379 |
-
|
1380 |
-
|
1381 |
-
|
1382 |
-
|
1383 |
-
|
1384 |
-
|
1385 |
-
|
1386 |
-
|
1387 |
-
|
1388 |
-
|
|
|
|
|
|
|
1389 |
} else {
|
1390 |
-
$
|
|
|
|
|
1391 |
}
|
1392 |
} else {
|
1393 |
-
$reviewer->addChild('
|
1394 |
-
|
1395 |
-
|
1396 |
-
|
1397 |
-
|
1398 |
-
|
1399 |
-
|
1400 |
-
|
1401 |
-
|
1402 |
} else {
|
1403 |
-
$
|
|
|
|
|
1404 |
}
|
1405 |
-
} else {
|
1406 |
-
$reviewer->addChild('reviewer_id',$nodes[1]);
|
1407 |
}
|
1408 |
-
}
|
1409 |
-
|
1410 |
-
|
1411 |
-
|
1412 |
-
|
1413 |
-
|
1414 |
}
|
1415 |
}
|
1416 |
-
}
|
1417 |
|
1418 |
-
|
1419 |
-
|
1420 |
-
|
1421 |
|
1422 |
-
|
1423 |
-
|
1424 |
-
|
1425 |
-
|
1426 |
-
|
|
|
1427 |
}
|
1428 |
-
}
|
1429 |
-
|
1430 |
|
1431 |
-
|
1432 |
-
|
1433 |
|
1434 |
-
|
1435 |
|
1436 |
-
|
1437 |
-
|
1438 |
-
|
1439 |
-
|
1440 |
-
|
1441 |
-
|
|
|
1442 |
}
|
1443 |
-
|
1444 |
-
|
1445 |
-
|
1446 |
-
|
1447 |
-
|
1448 |
-
|
1449 |
-
|
1450 |
-
|
1451 |
-
|
1452 |
-
|
1453 |
-
|
1454 |
-
|
1455 |
-
|
1456 |
-
|
1457 |
-
|
1458 |
-
|
1459 |
-
|
1460 |
-
|
1461 |
-
|
1462 |
-
|
1463 |
-
|
1464 |
-
|
1465 |
-
|
1466 |
-
|
1467 |
-
|
1468 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1469 |
}
|
1470 |
-
|
1471 |
-
|
1472 |
-
|
1473 |
-
$poig = $poi->addChild('gtins');
|
1474 |
-
$poig->$k = $v;
|
1475 |
-
} elseif ($k == "mpn"){
|
1476 |
-
$poim = $poi->addChild('mpns');
|
1477 |
-
$poim->$k = $v;
|
1478 |
-
} elseif ($k == "sku"){
|
1479 |
-
$poix = $poi->addChild('skus');
|
1480 |
-
$poix->$k = $v;
|
1481 |
-
} elseif($k == "brand"){
|
1482 |
-
$poib = $poi->addChild('brands');
|
1483 |
-
$poib->$k = $v;
|
1484 |
-
} else {
|
1485 |
-
// Do nothing
|
1486 |
-
}
|
1487 |
-
}
|
1488 |
-
}
|
1489 |
-
}
|
1490 |
-
}
|
1491 |
|
1492 |
-
|
1493 |
-
|
1494 |
-
|
1495 |
-
|
1496 |
-
|
1497 |
-
|
1498 |
-
|
1499 |
-
|
1500 |
-
|
1501 |
-
|
1502 |
-
|
1503 |
-
|
1504 |
-
|
1505 |
-
|
1506 |
-
|
1507 |
-
|
1508 |
-
|
1509 |
-
|
1510 |
-
|
1511 |
-
|
1512 |
-
|
1513 |
-
|
1514 |
-
|
1515 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1516 |
}
|
1517 |
-
|
1518 |
-
|
1519 |
-
|
1520 |
-
|
1521 |
-
|
1522 |
-
} elseif ($k == "mpn"){
|
1523 |
-
$poim = $poi->addChild('mpns');
|
1524 |
-
$poim->$k = $v;
|
1525 |
-
} elseif ($k == "sku"){
|
1526 |
-
$poix = $poi->addChild('skus');
|
1527 |
-
$poix->$k = $v;
|
1528 |
-
} elseif($k == "brand"){
|
1529 |
-
$poib = $poi->addChild('brands');
|
1530 |
-
$poib->$k = $v;
|
1531 |
-
} else {
|
1532 |
-
// Do nothing
|
1533 |
-
}
|
1534 |
-
}
|
1535 |
-
}
|
1536 |
-
}
|
1537 |
-
}
|
1538 |
-
}
|
1539 |
}
|
1540 |
}
|
1541 |
}
|
@@ -1993,7 +2110,7 @@ class WooSEA_Get_Products {
|
|
1993 |
$xml_piece = "";
|
1994 |
|
1995 |
// Get taxonomies
|
1996 |
-
$no_taxonomies = array("element_category","template_category","portfolio_category","portfolio_skills","portfolio_tags","faq_category","slide-page","
|
1997 |
$taxonomies = get_taxonomies();
|
1998 |
$diff_taxonomies = array_diff($taxonomies, $no_taxonomies);
|
1999 |
|
@@ -2248,10 +2365,9 @@ class WooSEA_Get_Products {
|
|
2248 |
// Check if there are mother categories
|
2249 |
if(!empty($product_cat)){
|
2250 |
$category_path = $this->woosea_get_term_parents( $product_cat->term_id, 'product_cat', $link = false, $project_taxonomy = $project_config['taxonomy'], $nicename = false, $visited = array() );
|
2251 |
-
$category_path_skroutz = preg_replace('/>/', '>', $category_path);
|
2252 |
-
//$category_path_skroutz = str_replace('>','>',$category_path);
|
2253 |
|
2254 |
-
|
|
|
2255 |
$product_data['category_path'] = $category_path;
|
2256 |
$product_data['category_path_skroutz'] = $category_path_skroutz;
|
2257 |
$product_data['category_path_skroutz'] = str_replace("Home >","",$product_data['category_path_skroutz']);
|
@@ -2325,6 +2441,10 @@ class WooSEA_Get_Products {
|
|
2325 |
$product_data['raw_description'] = substr($product_data['raw_description'], 0, 5000);
|
2326 |
$product_data['raw_short_description'] = substr($product_data['raw_short_description'], 0, 5000);
|
2327 |
|
|
|
|
|
|
|
|
|
2328 |
/**
|
2329 |
* Check of we need to add Google Analytics UTM parameters
|
2330 |
*/
|
@@ -2350,6 +2470,8 @@ class WooSEA_Get_Products {
|
|
2350 |
if(empty($product_data['condition']) || $product_data['condition'] == "Array"){
|
2351 |
$product_data['condition'] = "New";
|
2352 |
}
|
|
|
|
|
2353 |
$product_data['availability'] = $this->get_stock( $this->childID );
|
2354 |
|
2355 |
/**
|
@@ -2358,6 +2480,7 @@ class WooSEA_Get_Products {
|
|
2358 |
* Therefor, we need to check the stock_status and overwrite te availability value
|
2359 |
*/
|
2360 |
$stock_status = $product->get_stock_status();
|
|
|
2361 |
if ($stock_status == "outofstock"){
|
2362 |
$product_data['availability'] = "out of stock";
|
2363 |
} elseif ($stock_status == "onbackorder") {
|
@@ -2439,6 +2562,10 @@ class WooSEA_Get_Products {
|
|
2439 |
}
|
2440 |
|
2441 |
$product_data['shipping_label'] = $product->get_shipping_class();
|
|
|
|
|
|
|
|
|
2442 |
|
2443 |
// Get product prices
|
2444 |
$product_data['price'] = wc_get_price_including_tax($product, array('price'=> $product->get_price()));
|
@@ -2449,9 +2576,11 @@ class WooSEA_Get_Products {
|
|
2449 |
$product_data['regular_price'] = wc_format_decimal($product_data['regular_price'],2);
|
2450 |
|
2451 |
// Untouched raw system pricing - DO NOT CHANGE THESE
|
2452 |
-
|
2453 |
-
|
2454 |
-
$product_data['
|
|
|
|
|
2455 |
$product_data['system_regular_price'] = wc_format_decimal($product_data['system_regular_price'],2);
|
2456 |
|
2457 |
$product_data['system_price'] = wc_get_price_including_tax($product, array('price'=> $product->get_price()));
|
@@ -2485,6 +2614,7 @@ class WooSEA_Get_Products {
|
|
2485 |
if($product->get_type() == "bundle"){
|
2486 |
if ($this->woosea_is_plugin_active('woocommerce-product-bundles/woocommerce-product-bundles.php')){
|
2487 |
$product_data['price'] = get_post_meta($product_data['id'], '_price', true);
|
|
|
2488 |
if(is_numeric($tax_rates[1]['rate'])){
|
2489 |
$product_data['price_forced'] = round(get_post_meta($product_data['id'], '_price', true) * (100+$tax_rates[1]['rate'])/100,2);
|
2490 |
$product_data['regular_price'] = round(get_post_meta($product_data['id'], '_regular_price', true) * (100+$tax_rates[1]['rate'])/100,2);
|
@@ -2570,8 +2700,10 @@ class WooSEA_Get_Products {
|
|
2570 |
$product_data['net_sale_price'] = "";
|
2571 |
}
|
2572 |
}
|
2573 |
-
|
2574 |
-
|
|
|
|
|
2575 |
$price = wc_get_price_including_tax($product,array('price'=> $product->get_price()));
|
2576 |
if($product_data['sale_price'] > 0){
|
2577 |
$price = $product_data['sale_price'];
|
@@ -2582,6 +2714,7 @@ class WooSEA_Get_Products {
|
|
2582 |
$discount = apply_filters('advanced_woo_discount_rules_get_product_discount_price_from_custom_price', false, $product, 1, $product_data['sale_price'], 'discounted_price', true, true);
|
2583 |
if($discount !== false){
|
2584 |
$product_data['sale_price'] = $discount;
|
|
|
2585 |
$price_incl_tax = get_option( 'woocommerce_prices_include_tax' );
|
2586 |
if($price_incl_tax == "yes"){
|
2587 |
$product_data['price_forced'] = $product_data['price']*($fullrate/100);
|
@@ -2697,12 +2830,18 @@ class WooSEA_Get_Products {
|
|
2697 |
$product_data['sale_price'] = wc_format_localized_price($product_data['sale_price']);
|
2698 |
if($product->get_price()){
|
2699 |
$product_data['price_forced'] = wc_format_localized_price($product_data['price_forced']);
|
|
|
|
|
2700 |
}
|
2701 |
if($product->get_regular_price()){
|
2702 |
$product_data['regular_price_forced'] = wc_format_localized_price($product_data['regular_price_forced']);
|
|
|
|
|
2703 |
}
|
2704 |
if($product->get_sale_price()){
|
2705 |
$product_data['sale_price_forced'] = wc_format_localized_price($product_data['sale_price_forced']);
|
|
|
|
|
2706 |
}
|
2707 |
$product_data['net_price'] = wc_format_localized_price($product_data['net_price']);
|
2708 |
|
@@ -2722,9 +2861,12 @@ class WooSEA_Get_Products {
|
|
2722 |
$product_data['system_sale_price'] = wc_format_localized_price($product_data['system_sale_price']);
|
2723 |
|
2724 |
// Add rounded price options
|
2725 |
-
$
|
2726 |
-
$
|
2727 |
-
$
|
|
|
|
|
|
|
2728 |
|
2729 |
// Calculate discount percentage
|
2730 |
if($product_data['sale_price'] > 0){
|
@@ -2742,7 +2884,7 @@ class WooSEA_Get_Products {
|
|
2742 |
}
|
2743 |
}
|
2744 |
|
2745 |
-
if ((array_key_exists('shipping', $project_config['attributes'])) OR (array_key_exists('shipping_price', $project_config['attributes'])) OR ($project_config['fields'] == "trovaprezzi")){
|
2746 |
$product_data['shipping'] = $this->woosea_get_shipping_cost($class_cost_id, $project_config, $product_data['price'], $tax_rates, $shipping_zones, $product_data['id'], $product_data['item_group_id']);
|
2747 |
$shipping_str = $product_data['shipping'];
|
2748 |
}
|
@@ -2750,8 +2892,10 @@ class WooSEA_Get_Products {
|
|
2750 |
// Get only shipping costs
|
2751 |
if(!empty($shipping_str)){
|
2752 |
$product_data['shipping_price'] = 0;
|
|
|
2753 |
}
|
2754 |
-
|
|
|
2755 |
|
2756 |
if(is_array($shipping_arr)){
|
2757 |
foreach($shipping_arr as $akey => $arr){
|
@@ -2838,7 +2982,7 @@ class WooSEA_Get_Products {
|
|
2838 |
|
2839 |
foreach($diff_taxonomies as $taxo){
|
2840 |
$term_value = get_the_terms($product_data['id'], $taxo);
|
2841 |
-
$product_data[$taxo] = "";
|
2842 |
|
2843 |
if(is_array($term_value)){
|
2844 |
// Do not add variation values to the feed when they are out of stock
|
@@ -2848,7 +2992,7 @@ class WooSEA_Get_Products {
|
|
2848 |
$variations = $product_skroutz->get_available_variations();
|
2849 |
$variations_id = wp_list_pluck( $variations, 'variation_id' );
|
2850 |
$skroutz_att_array = array();
|
2851 |
-
|
2852 |
foreach($variations_id as $var_id){
|
2853 |
$stock_value = get_post_meta( $var_id, "_stock_status", true );
|
2854 |
if($stock_value == "instock"){
|
@@ -2862,7 +3006,6 @@ class WooSEA_Get_Products {
|
|
2862 |
$product_data[$taxo] = rtrim($product_data[$taxo],',');
|
2863 |
}
|
2864 |
}
|
2865 |
-
|
2866 |
foreach($skroutz_att_array as $skrtz_value){
|
2867 |
$product_data[$taxo] .= ",". $skrtz_value;
|
2868 |
}
|
@@ -2977,7 +3120,7 @@ class WooSEA_Get_Products {
|
|
2977 |
$data = $wpdb->get_results($sql);
|
2978 |
if (count($data)) {
|
2979 |
foreach ($data as $key => $value) {
|
2980 |
-
|
2981 |
if (preg_match("/_product_attributes/i",$value->name)){
|
2982 |
$product_attr = unserialize($value->type);
|
2983 |
if(!empty($product_attr)){
|
@@ -2995,14 +3138,14 @@ class WooSEA_Get_Products {
|
|
2995 |
|
2996 |
/**
|
2997 |
* Get Product Attributes for Single products
|
|
|
2998 |
*/
|
2999 |
-
if (($product->is_type('simple')) OR ($product->is_type('external')) OR ($product->is_type('mix-and-match')) OR ($product->is_type('bundle')) OR ($product->is_type('composite')) OR ($product->is_type('auction') OR ($product->is_type('subscription')))){
|
3000 |
$single_attributes = $product->get_attributes();
|
3001 |
-
|
3002 |
foreach ($single_attributes as $attribute){
|
3003 |
-
|
3004 |
-
|
3005 |
-
|
3006 |
}
|
3007 |
}
|
3008 |
|
@@ -3028,9 +3171,9 @@ class WooSEA_Get_Products {
|
|
3028 |
$product_variations = new WC_Product_Variation( $product_data['id'] );
|
3029 |
$variations = $product_variations->get_variation_attributes();
|
3030 |
|
3031 |
-
// For Skroutz apparal products we can only append colours to the product name
|
3032 |
// When a product has both a size and color attribute we assume its an apparal product
|
3033 |
-
if($project_config['fields'] == "skroutz"){
|
3034 |
$size_found = "no";
|
3035 |
$color_found = "no";
|
3036 |
|
@@ -3106,23 +3249,27 @@ class WooSEA_Get_Products {
|
|
3106 |
}
|
3107 |
}
|
3108 |
|
3109 |
-
|
3110 |
-
|
3111 |
if((isset($project_config['lowest_price_variations'])) OR (isset($project_config['default_variations']))){
|
3112 |
-
|
3113 |
// Determine the default variation product
|
3114 |
if( ($product_data['item_group_id'] > 0) AND (is_object(wc_get_product( $product_data['item_group_id']))) AND (($product_data['product_type'] == "variation") OR ($product_data['product_type'] == "subscription_variation"))){
|
3115 |
-
|
3116 |
-
|
|
|
3117 |
|
3118 |
if(isset($project_config['lowest_price_variations'])){
|
3119 |
-
|
3120 |
// Determine lowest priced variation
|
3121 |
$variation_min_price = $mother_product->get_variation_price('min');
|
3122 |
$variation_min_price = wc_format_decimal($variation_min_price,2);
|
3123 |
$variation_min_price = wc_format_localized_price($variation_min_price);
|
3124 |
-
|
3125 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
3126 |
$variation_pass = "true";
|
3127 |
} else {
|
3128 |
$variation_pass = "false";
|
@@ -3260,19 +3407,21 @@ class WooSEA_Get_Products {
|
|
3260 |
/**
|
3261 |
* Although this is a product variation we also need to grap the Dynamic attributes belonging to the simple mother prodict
|
3262 |
*/
|
|
|
|
|
3263 |
foreach($diff_taxonomies as $taxo){
|
3264 |
$term_value = get_the_terms($product_data['item_group_id'], $taxo);
|
3265 |
unset($product_data[$taxo]);
|
3266 |
if(is_array($term_value)){
|
3267 |
foreach($term_value as $term){
|
3268 |
if(empty($product_data[$taxo])){
|
3269 |
-
|
3270 |
} else {
|
3271 |
-
|
3272 |
}
|
3273 |
}
|
3274 |
}
|
3275 |
-
|
3276 |
|
3277 |
/**
|
3278 |
* Add product tags to the product data array
|
@@ -3292,6 +3441,7 @@ class WooSEA_Get_Products {
|
|
3292 |
|
3293 |
// Add attribute values to the variation product names to make them unique
|
3294 |
$product_data['title_hyphen'] = $product_data['title']." - ";
|
|
|
3295 |
|
3296 |
foreach($variations as $kk => $vv){
|
3297 |
$custom_key = $kk;
|
@@ -3440,6 +3590,8 @@ class WooSEA_Get_Products {
|
|
3440 |
* we will add CDATA brackets to the title and description attributes
|
3441 |
*/
|
3442 |
$product_data['title_lc'] = ucfirst(strtolower($product_data['title']));
|
|
|
|
|
3443 |
//$product_data['description'] = $this->woosea_append_cdata ( $product_data['description'] );
|
3444 |
//$product_data['short_description'] = $this->woosea_append_cdata ( $product_data['short_description'] );
|
3445 |
|
@@ -3448,6 +3600,17 @@ class WooSEA_Get_Products {
|
|
3448 |
*/
|
3449 |
$product_data['reviews'] = $this->woosea_get_reviews( $product_data, $product );
|
3450 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3451 |
/**
|
3452 |
* Check if individual products need to be excluded
|
3453 |
*/
|
@@ -3513,16 +3676,19 @@ class WooSEA_Get_Products {
|
|
3513 |
// For these channels parent products are allowed
|
3514 |
$allowed_channel_parents = array(
|
3515 |
"skroutz",
|
|
|
3516 |
"google_dsa",
|
3517 |
"google_product_review",
|
3518 |
);
|
3519 |
|
3520 |
-
if
|
3521 |
-
if(($
|
3522 |
-
$product_data
|
3523 |
-
|
3524 |
-
|
3525 |
-
|
|
|
|
|
3526 |
|
3527 |
/**
|
3528 |
* Remove variation products that are not THE default variation product
|
@@ -3535,7 +3701,7 @@ class WooSEA_Get_Products {
|
|
3535 |
/**
|
3536 |
* And item_group_id is not allowed for simple products, prevent users from adding this to the feedd
|
3537 |
*/
|
3538 |
-
if($product->is_type('simple') OR ($product->is_type('auction'))){
|
3539 |
unset($product_data['item_group_id']);
|
3540 |
}
|
3541 |
|
@@ -3549,6 +3715,51 @@ class WooSEA_Get_Products {
|
|
3549 |
}
|
3550 |
}
|
3551 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3552 |
/**
|
3553 |
* When product has passed the filter rules it can continue with the rest
|
3554 |
*/
|
@@ -3582,7 +3793,7 @@ class WooSEA_Get_Products {
|
|
3582 |
}
|
3583 |
} else {
|
3584 |
if((strlen($attr_value['mapfrom'])) AND (array_key_exists($attr_value['mapfrom'], $product_data))){
|
3585 |
-
if(($attr_value['attribute'] == "g:link") OR ($attr_value['attribute'] == "g:link_template") OR ($attr_value['attribute'] == "g:image_link") OR ($attr_value['attribute'] == "link") OR ($attr_value['attribute'] == "Final URL") OR ($attr_value['attribute'] == "SKU")){
|
3586 |
$attr_line = "'".$attr_value['prefix']."".$product_data[$attr_value['mapfrom']]."".$attr_value['suffix']."'";
|
3587 |
} else {
|
3588 |
$attr_line = "'".$attr_value['prefix']. "".$product_data[$attr_value['mapfrom']]."" .$attr_value['suffix']."'";
|
@@ -3654,7 +3865,7 @@ class WooSEA_Get_Products {
|
|
3654 |
}
|
3655 |
} else {
|
3656 |
if(strlen($product_data[$attr_value['mapfrom']])){
|
3657 |
-
if(($attr_value['attribute'] == "g:link") OR ($attr_value['attribute'] == "g:link_template") OR ($attr_value['attribute'] == "g:image_link") OR ($attr_value['attribute'] == "link") OR ($attr_value['attribute'] == "Final URL") OR ($attr_value['attribute'] == "SKU")){
|
3658 |
if(($product_data['product_type'] == "variation") AND (preg_match("/aelia_cs_currency/", $attr_value['suffix']))){
|
3659 |
$attr_value['suffix'] = str_replace("?","&",$attr_value['suffix']);
|
3660 |
$attr_line .= ",'".$attr_value['prefix']."".$product_data[$attr_value['mapfrom']]."".$attr_value['suffix']."'";
|
@@ -3838,6 +4049,7 @@ class WooSEA_Get_Products {
|
|
3838 |
$shipping_str .= ":WOOSEA_POSTAL_CODE##$v";
|
3839 |
} elseif ($k == "price"){
|
3840 |
$shipping_str .= ":WOOSEA_PRICE##$attr_value[prefix] $v $attr_value[suffix]";
|
|
|
3841 |
} else {
|
3842 |
// UNKNOWN, DO NOT ADD
|
3843 |
}
|
@@ -3874,7 +4086,7 @@ class WooSEA_Get_Products {
|
|
3874 |
}
|
3875 |
} else {
|
3876 |
if(strlen($product_data[$attr_value['mapfrom']])){
|
3877 |
-
if(($attr_value['attribute'] == "g:link") OR ($attr_value['attribute'] == "link") OR ($attr_value['attribute'] == "g:link_template")){
|
3878 |
if(($product_data['product_type'] == "variation") AND (preg_match("/aelia_cs_currency/", $attr_value['suffix']))){
|
3879 |
$attr_value['suffix'] = str_replace("?","&",$attr_value['suffix']);
|
3880 |
$xml_product[$attr_value['attribute']] = "$attr_value[prefix]". $product_data[$attr_value['mapfrom']] ."$attr_value[suffix]";
|
@@ -4404,479 +4616,482 @@ class WooSEA_Get_Products {
|
|
4404 |
return $product_data;
|
4405 |
}
|
4406 |
|
4407 |
-
|
4408 |
-
|
4409 |
-
|
4410 |
private function woocommerce_sea_rules( $project_rules2, $product_data ){
|
4411 |
-
|
4412 |
-
|
4413 |
|
4414 |
-
|
4415 |
|
4416 |
-
|
4417 |
|
4418 |
-
|
4419 |
-
|
4420 |
|
4421 |
-
|
4422 |
-
|
4423 |
-
|
4424 |
-
|
4425 |
|
4426 |
// Check if a rule has been set for Google categories
|
4427 |
if (!empty($product_data['categories']) AND ($pr_array['than_attribute'] == "google_category") AND ($product_data[$pr_array['attribute']] == $pr_array['criteria'])){
|
4428 |
-
|
4429 |
-
|
4430 |
$category_id = explode("-", $pr_array['newvalue']);
|
4431 |
$pr_array['newvalue'] = $category_id[0];
|
4432 |
-
|
4433 |
-
|
4434 |
|
4435 |
-
|
4436 |
-
|
4437 |
-
|
4438 |
-
|
4439 |
|
4440 |
|
4441 |
-
|
4442 |
-
|
4443 |
-
|
4444 |
-
|
4445 |
|
4446 |
-
|
4447 |
|
4448 |
-
|
4449 |
-
|
4450 |
-
|
4451 |
-
|
4452 |
-
|
4453 |
-
|
4454 |
-
|
4455 |
-
|
4456 |
-
|
4457 |
-
|
4458 |
-
|
4459 |
-
|
4460 |
-
|
4461 |
-
|
4462 |
-
|
4463 |
-
|
4464 |
-
|
4465 |
-
|
4466 |
-
|
4467 |
-
|
4468 |
-
|
4469 |
-
|
4470 |
-
|
4471 |
-
|
4472 |
-
|
4473 |
-
|
4474 |
-
|
4475 |
-
|
4476 |
-
|
4477 |
-
|
4478 |
-
|
4479 |
-
|
4480 |
-
|
4481 |
-
|
4482 |
-
|
4483 |
-
|
4484 |
-
|
4485 |
-
|
4486 |
-
|
4487 |
-
|
4488 |
-
|
4489 |
-
|
4490 |
-
|
4491 |
-
|
4492 |
-
|
4493 |
-
|
4494 |
-
|
4495 |
-
|
4496 |
-
|
4497 |
-
|
4498 |
-
|
4499 |
-
|
4500 |
-
|
4501 |
-
|
4502 |
-
|
4503 |
-
|
4504 |
-
|
4505 |
-
|
4506 |
-
|
4507 |
-
|
4508 |
-
|
4509 |
-
|
4510 |
-
|
4511 |
-
|
4512 |
-
|
4513 |
-
|
4514 |
-
|
4515 |
-
|
4516 |
-
|
4517 |
-
|
4518 |
-
|
4519 |
-
|
4520 |
-
|
4521 |
-
|
4522 |
-
|
4523 |
-
|
4524 |
-
|
4525 |
-
|
4526 |
-
|
4527 |
-
|
4528 |
-
|
4529 |
-
|
4530 |
// Make sure that a new value has been set
|
4531 |
-
|
4532 |
-
|
4533 |
if($pr_array['attribute'] == $pr_array['than_attribute']){
|
4534 |
$newvalue = str_replace($pr_array['criteria'],$pr_array['newvalue'], $pd_value);
|
4535 |
$product_data[$pr_array['than_attribute']] = ucfirst($newvalue);
|
4536 |
}
|
4537 |
-
|
4538 |
-
|
4539 |
-
|
4540 |
-
|
4541 |
-
|
4542 |
-
|
4543 |
-
|
4544 |
-
|
4545 |
-
|
4546 |
-
|
4547 |
-
|
4548 |
-
|
4549 |
-
|
4550 |
-
|
4551 |
-
|
4552 |
-
|
4553 |
-
|
4554 |
-
|
4555 |
-
|
4556 |
-
|
4557 |
-
|
4558 |
-
|
4559 |
-
|
4560 |
-
|
4561 |
-
|
4562 |
-
|
4563 |
-
|
4564 |
-
|
4565 |
-
|
4566 |
-
|
4567 |
-
|
4568 |
-
|
4569 |
-
|
4570 |
-
|
4571 |
-
|
4572 |
-
|
4573 |
-
|
4574 |
-
|
4575 |
-
|
4576 |
-
|
4577 |
-
|
4578 |
-
|
4579 |
-
|
4580 |
-
|
4581 |
-
|
4582 |
-
|
4583 |
-
|
4584 |
-
|
4585 |
-
|
4586 |
-
|
4587 |
-
|
4588 |
-
|
4589 |
-
|
4590 |
-
|
4591 |
-
|
4592 |
-
|
4593 |
-
|
4594 |
-
|
4595 |
-
|
4596 |
-
|
4597 |
-
|
4598 |
-
|
4599 |
-
|
4600 |
-
|
4601 |
-
|
4602 |
-
|
4603 |
-
|
4604 |
-
|
4605 |
-
|
4606 |
-
|
4607 |
-
|
4608 |
-
|
4609 |
-
|
4610 |
-
|
4611 |
-
|
4612 |
-
|
4613 |
-
|
4614 |
-
|
4615 |
-
|
4616 |
-
|
4617 |
-
|
4618 |
-
|
4619 |
-
|
4620 |
-
|
4621 |
-
|
4622 |
-
|
4623 |
-
|
4624 |
-
|
4625 |
-
|
4626 |
-
|
4627 |
-
|
4628 |
-
|
4629 |
-
|
4630 |
-
|
4631 |
-
|
4632 |
-
|
4633 |
-
|
4634 |
-
|
4635 |
-
|
4636 |
-
|
4637 |
-
|
4638 |
-
|
4639 |
-
|
4640 |
-
|
4641 |
-
|
4642 |
-
|
4643 |
-
|
4644 |
-
|
4645 |
-
|
4646 |
-
|
4647 |
-
|
4648 |
-
|
4649 |
-
|
4650 |
-
|
4651 |
-
|
4652 |
-
|
4653 |
-
|
4654 |
-
|
4655 |
-
|
4656 |
-
|
4657 |
-
|
4658 |
-
|
4659 |
-
|
4660 |
-
|
4661 |
-
|
4662 |
-
|
4663 |
-
|
4664 |
-
|
4665 |
-
|
4666 |
-
|
4667 |
-
|
4668 |
-
|
4669 |
-
|
4670 |
-
|
4671 |
-
|
4672 |
-
|
4673 |
-
|
4674 |
-
|
4675 |
-
|
4676 |
-
|
4677 |
-
|
4678 |
-
|
4679 |
-
|
4680 |
-
|
4681 |
-
|
4682 |
-
|
4683 |
-
|
4684 |
-
|
4685 |
-
|
4686 |
-
|
4687 |
-
|
4688 |
-
|
4689 |
-
|
4690 |
-
|
4691 |
-
|
4692 |
-
|
4693 |
-
|
4694 |
-
|
4695 |
-
|
4696 |
-
|
4697 |
-
|
4698 |
-
|
4699 |
-
|
4700 |
-
|
4701 |
-
|
4702 |
-
|
4703 |
-
|
4704 |
-
|
4705 |
-
|
4706 |
-
|
4707 |
-
|
4708 |
-
|
4709 |
-
|
4710 |
-
|
4711 |
-
|
4712 |
-
|
4713 |
-
if (!array_key_exists('cs', $pr_array)){
|
4714 |
-
$
|
4715 |
-
|
4716 |
-
|
4717 |
-
|
4718 |
-
|
4719 |
-
case($pr_array['condition'] = "contains"):
|
4720 |
-
if ((preg_match('/'.$pr_array['criteria'].'/', $pd_value))){
|
4721 |
-
// Specifically for shipping price rules
|
4722 |
-
if(!empty($product_data[$pr_array['than_attribute']])){
|
4723 |
-
if(is_array($product_data[$pr_array['than_attribute']])){
|
4724 |
-
$arr_size = (count($product_data[$pr_array['than_attribute']])-1);
|
4725 |
-
for ($x = 0; $x <= $arr_size; $x++) {
|
4726 |
-
$product_data[$pr_array['than_attribute']][$x]['price'] = $pr_array['newvalue'];
|
4727 |
-
}
|
4728 |
-
} else {
|
4729 |
-
$product_data[$pr_array['than_attribute']] = $pr_array['newvalue'];
|
4730 |
-
}
|
4731 |
-
} else {
|
4732 |
-
// This attribute value is empty for this product
|
4733 |
-
$product_data[$pr_array['than_attribute']] = $pr_array['newvalue'];
|
4734 |
-
}
|
4735 |
-
}
|
4736 |
-
break;
|
4737 |
-
case($pr_array['condition'] = "containsnot"):
|
4738 |
-
if ((!preg_match('/'.$pr_array['criteria'].'/', $pd_value))){
|
4739 |
-
// Specifically for shipping price rules
|
4740 |
-
if(is_array($product_data[$pr_array['than_attribute']])){
|
4741 |
-
$arr_size = (count($product_data[$pr_array['than_attribute']])-1);
|
4742 |
-
for ($x = 0; $x <= $arr_size; $x++) {
|
4743 |
-
$product_data[$pr_array['than_attribute']][$x]['price'] = $pr_array['newvalue'];
|
4744 |
-
}
|
4745 |
-
} else {
|
4746 |
-
$product_data[$pr_array['than_attribute']] = $pr_array['newvalue'];
|
4747 |
-
}
|
4748 |
-
}
|
4749 |
-
break;
|
4750 |
-
case($pr_array['condition'] = "="):
|
4751 |
-
if (($pr_array['criteria'] == "$pd_value")){
|
4752 |
-
// Specifically for shipping price rules
|
4753 |
-
if(is_array($product_data[$pr_array['than_attribute']])){
|
4754 |
-
$arr_size = (count($product_data[$pr_array['than_attribute']])-1);
|
4755 |
-
for ($x = 0; $x <= $arr_size; $x++) {
|
4756 |
-
$product_data[$pr_array['than_attribute']][$x]['price'] = $pr_array['newvalue'];
|
4757 |
-
}
|
4758 |
-
} else {
|
4759 |
-
$product_data[$pr_array['than_attribute']] = $pr_array['newvalue'];
|
4760 |
-
}
|
4761 |
-
}
|
4762 |
-
$ship = $product_data['shipping'];
|
4763 |
-
break;
|
4764 |
-
case($pr_array['condition'] = "!="):
|
4765 |
-
if (($pr_array['criteria'] != "$pd_value")){
|
4766 |
-
// Specifically for shipping price rules
|
4767 |
-
if(is_array($product_data[$pr_array['than_attribute']])){
|
4768 |
-
$arr_size = (count($product_data[$pr_array['than_attribute']])-1);
|
4769 |
-
for ($x = 0; $x <= $arr_size; $x++) {
|
4770 |
-
$product_data[$pr_array['than_attribute']][$x]['price'] = $pr_array['newvalue'];
|
4771 |
-
}
|
4772 |
-
} else {
|
4773 |
-
$product_data[$pr_array['than_attribute']] = $pr_array['newvalue'];
|
4774 |
-
}
|
4775 |
-
}
|
4776 |
-
break;
|
4777 |
-
case($pr_array['condition'] = ">"):
|
4778 |
-
// Use a lexical order on relational string operators
|
4779 |
-
if (($pd_value > $pr_array['criteria'])){
|
4780 |
-
// Specifically for shipping price rules
|
4781 |
-
if(is_array($product_data[$pr_array['than_attribute']])){
|
4782 |
-
$arr_size = (count($product_data[$pr_array['than_attribute']])-1);
|
4783 |
-
for ($x = 0; $x <= $arr_size; $x++) {
|
4784 |
-
$product_data[$pr_array['than_attribute']][$x]['price'] = $pr_array['newvalue'];
|
4785 |
-
}
|
4786 |
-
} else {
|
4787 |
-
$product_data[$pr_array['than_attribute']] = $pr_array['newvalue'];
|
4788 |
-
}
|
4789 |
-
}
|
4790 |
-
break;
|
4791 |
-
case($pr_array['condition'] = ">="):
|
4792 |
-
// Use a lexical order on relational string operators
|
4793 |
-
if (($pd_value >= $pr_array['criteria'])){
|
4794 |
-
// Specifically for shipping price rules
|
4795 |
-
if(is_array($product_data[$pr_array['than_attribute']])){
|
4796 |
-
$arr_size = (count($product_data[$pr_array['than_attribute']])-1);
|
4797 |
-
for ($x = 0; $x <= $arr_size; $x++) {
|
4798 |
-
$product_data[$pr_array['than_attribute']][$x]['price'] = $pr_array['newvalue'];
|
4799 |
-
}
|
4800 |
-
} else {
|
4801 |
-
$product_data[$pr_array['than_attribute']] = $pr_array['newvalue'];
|
4802 |
-
}
|
4803 |
-
}
|
4804 |
-
break;
|
4805 |
-
case($pr_array['condition'] = "<"):
|
4806 |
-
// Use a lexical order on relational string operators
|
4807 |
-
if (($pd_value < $pr_array['criteria'])){
|
4808 |
-
// Specifically for shipping price rules
|
4809 |
-
if(isset($product_data[$pr_array['than_attribute']]) AND (is_array($product_data[$pr_array['than_attribute']]))){
|
4810 |
-
$arr_size = (count($product_data[$pr_array['than_attribute']])-1);
|
4811 |
-
for ($x = 0; $x <= $arr_size; $x++) {
|
4812 |
-
$product_data[$pr_array['than_attribute']][$x]['price'] = $pr_array['newvalue'];
|
4813 |
-
}
|
4814 |
-
} else {
|
4815 |
-
$product_data[$pr_array['than_attribute']] = $pr_array['newvalue'];
|
4816 |
-
}
|
4817 |
-
}
|
4818 |
-
break;
|
4819 |
-
case($pr_array['condition'] = "=<"):
|
4820 |
-
// Use a lexical order on relational string operators
|
4821 |
-
if (($pd_value <= $pr_array['criteria'])){
|
4822 |
-
// Specifically for shipping price rules
|
4823 |
-
if(is_array($product_data[$pr_array['than_attribute']])){
|
4824 |
-
$arr_size = (count($product_data[$pr_array['than_attribute']])-1);
|
4825 |
-
for ($x = 0; $x <= $arr_size; $x++) {
|
4826 |
-
$product_data[$pr_array['than_attribute']][$x]['price'] = $pr_array['newvalue'];
|
4827 |
-
}
|
4828 |
-
} else {
|
4829 |
-
$product_data[$pr_array['than_attribute']] = $pr_array['newvalue'];
|
4830 |
-
}
|
4831 |
-
}
|
4832 |
-
break;
|
4833 |
|
4834 |
-
|
4835 |
-
|
4836 |
-
|
4837 |
-
|
4838 |
-
|
4839 |
-
|
4840 |
-
|
4841 |
-
|
4842 |
-
|
4843 |
-
|
4844 |
-
|
4845 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4846 |
case($pr_array['condition'] = "findreplace"):
|
4847 |
if (strpos($pd_value, $pr_array['criteria']) !== false){
|
4848 |
-
|
4849 |
-
|
4850 |
-
|
4851 |
if($pr_array['attribute'] == $pr_array['than_attribute']){
|
4852 |
-
|
4853 |
-
|
4854 |
-
|
4855 |
-
|
4856 |
-
|
|
|
4857 |
break;
|
4858 |
-
|
4859 |
-
|
4860 |
-
|
4861 |
-
|
4862 |
-
|
4863 |
-
|
4864 |
-
|
4865 |
-
|
4866 |
-
|
4867 |
-
|
4868 |
-
|
4869 |
-
|
4870 |
-
|
4871 |
-
|
4872 |
-
|
4873 |
-
|
4874 |
-
|
4875 |
-
|
4876 |
-
|
4877 |
-
|
4878 |
-
|
4879 |
-
|
4880 |
|
4881 |
/**
|
4882 |
* Function to exclude products based on individual product exclusions
|
@@ -4899,525 +5114,530 @@ class WooSEA_Get_Products {
|
|
4899 |
}
|
4900 |
}
|
4901 |
|
4902 |
-
|
4903 |
-
|
4904 |
-
|
|
|
4905 |
private function woocommerce_sea_filters( $project_rules, $product_data ){
|
4906 |
-
|
4907 |
|
4908 |
-
|
4909 |
-
|
4910 |
|
4911 |
-
|
4912 |
-
|
4913 |
-
|
4914 |
|
4915 |
-
|
4916 |
|
4917 |
-
|
4918 |
-
|
4919 |
-
|
4920 |
|
4921 |
-
|
4922 |
|
4923 |
-
|
4924 |
-
|
4925 |
-
|
4926 |
|
4927 |
-
|
4928 |
-
|
|
|
4929 |
|
4930 |
-
|
|
|
|
|
|
|
4931 |
|
4932 |
-
|
4933 |
-
|
4934 |
-
|
4935 |
-
|
4936 |
-
|
4937 |
-
|
4938 |
-
|
4939 |
-
|
4940 |
-
|
4941 |
-
|
4942 |
-
|
4943 |
-
|
4944 |
-
|
4945 |
-
|
4946 |
-
|
4947 |
-
|
4948 |
-
|
4949 |
-
|
4950 |
-
|
4951 |
-
|
4952 |
-
|
4953 |
-
|
4954 |
-
$allowed = 0;
|
4955 |
-
} elseif ((preg_match('/'.$pr_array['criteria'].'/', $pd_value)) && ($pr_array['than'] == "include_only")){
|
4956 |
-
$allowed = 0;
|
4957 |
-
}
|
4958 |
-
break;
|
4959 |
case($pr_array['condition'] = "="):
|
4960 |
-
|
4961 |
-
|
4962 |
-
|
4963 |
-
|
4964 |
-
}
|
4965 |
-
break;
|
4966 |
-
case($pr_array['condition'] = "!="):
|
4967 |
-
if (($old_value == $pr_array['criteria']) && ($pr_array['than'] == "exclude")){
|
4968 |
-
if($allowed <> 0){
|
4969 |
-
$allowed = 1;
|
4970 |
-
}
|
4971 |
-
} elseif (($old_value == $pr_array['criteria']) && ($pr_array['than'] == "include_only")){
|
4972 |
-
$allowed = 0;
|
4973 |
-
}
|
4974 |
-
break;
|
4975 |
-
case($pr_array['condition'] = ">"):
|
4976 |
-
if (($old_value > $pr_array['criteria']) && ($pr_array['than'] == "exclude")){
|
4977 |
-
$allowed = 0;
|
4978 |
-
} elseif (($old_value <= $pr_array['criteria']) && ($pr_array['than'] == "include_only")){
|
4979 |
-
$allowed = 0;
|
4980 |
-
}
|
4981 |
-
break;
|
4982 |
-
case($pr_array['condition'] = ">="):
|
4983 |
-
if (($old_value >= $pr_array['criteria']) && ($pr_array['than'] == "exclude")){
|
4984 |
-
$allowed = 0;
|
4985 |
-
} elseif (($old_value < $pr_array['criteria']) && ($pr_array['than'] == "include_only")){
|
4986 |
-
$allowed = 0;
|
4987 |
-
}
|
4988 |
-
break;
|
4989 |
-
case($pr_array['condition'] = "<"):
|
4990 |
-
if (($old_value < $pr_array['criteria']) && ($pr_array['than'] == "exclude")){
|
4991 |
-
$allowed = 0;
|
4992 |
-
} elseif (($old_value > $pr_array['criteria']) && ($pr_array['than'] == "include_only")){
|
4993 |
-
$allowed = 0;
|
4994 |
-
}
|
4995 |
-
break;
|
4996 |
-
case($pr_array['condition'] = "=<"):
|
4997 |
-
if (($old_value <= $pr_array['criteria']) && ($pr_array['than'] == "exclude")){
|
4998 |
-
$allowed = 0;
|
4999 |
-
} elseif (($old_value > $pr_array['criteria']) && ($pr_array['than'] == "include_only")){
|
5000 |
-
$allowed = 0;
|
5001 |
-
}
|
5002 |
-
break;
|
5003 |
-
case($pr_array['condition'] = "empty"):
|
5004 |
-
if ((strlen($pd_value) < 1) && ($pr_array['than'] == "exclude")){
|
5005 |
-
$allowed = 0;
|
5006 |
-
} elseif ((strlen($pd_value > 0)) && ($pr_array['than'] == "include_only")){
|
5007 |
-
$allowed = 0;
|
5008 |
-
}
|
5009 |
-
break;
|
5010 |
-
default:
|
5011 |
-
break;
|
5012 |
-
}
|
5013 |
-
} elseif (is_array($pd_value)){
|
5014 |
-
// Tis can either be a shipping or product_tag array
|
5015 |
-
if($pr_array['attribute'] == "product_tag"){
|
5016 |
-
$in_tag_array = "not";
|
5017 |
-
|
5018 |
-
foreach($pd_value as $pt_key => $pt_value){
|
5019 |
-
// Rules for string values
|
5020 |
-
if (!array_key_exists('cs', $pr_array)){
|
5021 |
-
$pt_value = strtolower($pt_value);
|
5022 |
-
$pr_array['criteria'] = strtolower($pr_array['criteria']);
|
5023 |
-
}
|
5024 |
-
|
5025 |
-
if(preg_match('/'.$pr_array['criteria'].'/', $pt_value)){
|
5026 |
-
$in_tag_array = "yes";
|
5027 |
}
|
5028 |
-
|
5029 |
-
|
5030 |
-
|
5031 |
-
|
5032 |
-
|
5033 |
-
|
5034 |
-
|
5035 |
-
|
5036 |
-
|
5037 |
-
|
5038 |
-
|
5039 |
-
|
5040 |
-
|
5041 |
-
|
5042 |
-
|
5043 |
-
|
5044 |
-
|
5045 |
-
|
5046 |
-
|
5047 |
-
|
5048 |
-
|
5049 |
-
|
5050 |
-
|
5051 |
-
|
5052 |
-
|
5053 |
-
|
5054 |
-
|
5055 |
-
|
5056 |
-
|
5057 |
-
|
5058 |
-
|
5059 |
-
|
5060 |
-
|
5061 |
-
|
5062 |
-
|
5063 |
-
|
5064 |
-
|
5065 |
-
|
5066 |
-
|
5067 |
-
|
5068 |
-
|
5069 |
-
|
5070 |
-
|
5071 |
-
|
5072 |
-
|
5073 |
-
|
5074 |
-
|
5075 |
-
|
5076 |
-
|
5077 |
-
|
5078 |
-
|
5079 |
-
|
5080 |
-
|
5081 |
-
|
5082 |
-
|
5083 |
-
|
5084 |
-
|
5085 |
-
|
5086 |
-
|
5087 |
-
if($pr_array['than'] == "include_only"){
|
5088 |
-
if($allowed <> 0){
|
5089 |
-
$allowed = 1;
|
5090 |
-
}
|
5091 |
-
} else {
|
5092 |
-
$allowed = 0;
|
5093 |
-
}
|
5094 |
-
}
|
5095 |
-
break;
|
5096 |
-
case($pr_array['condition'] = ">="):
|
5097 |
-
if (($v >= $pr_array['criteria'])){
|
5098 |
-
if($pr_array['than'] == "include_only"){
|
5099 |
-
if($allowed <> 0){
|
5100 |
-
$allowed = 1;
|
5101 |
-
}
|
5102 |
-
} else {
|
5103 |
-
$allowed = 0;
|
5104 |
-
}
|
5105 |
-
}
|
5106 |
-
break;
|
5107 |
-
case($pr_array['condition'] = "<"):
|
5108 |
-
if (($v < $pr_array['criteria'])){
|
5109 |
-
if($pr_array['than'] == "include_only"){
|
5110 |
-
if($allowed <> 0){
|
5111 |
-
$allowed = 1;
|
5112 |
-
}
|
5113 |
-
} else {
|
5114 |
-
$allowed = 0;
|
5115 |
-
}
|
5116 |
-
}
|
5117 |
-
break;
|
5118 |
-
case($pr_array['condition'] = "=<"):
|
5119 |
-
if (($v <= $pr_array['criteria'])){
|
5120 |
-
if($pr_array['than'] == "include_only"){
|
5121 |
-
if($allowed <> 0){
|
5122 |
-
$allowed = 1;
|
5123 |
-
}
|
5124 |
-
} else {
|
5125 |
-
$allowed = 0;
|
5126 |
-
}
|
5127 |
-
}
|
5128 |
-
break;
|
5129 |
-
case($pr_array['condition'] = "empty"):
|
5130 |
-
if (strlen($v) < 1){
|
5131 |
-
if($pr_array['than'] == "include_only"){
|
5132 |
-
if($allowed <> 0){
|
5133 |
-
$allowed = 1;
|
5134 |
-
}
|
5135 |
-
} else {
|
5136 |
-
$allowed = 0;
|
5137 |
-
}
|
5138 |
-
}
|
5139 |
-
break;
|
5140 |
-
default:
|
5141 |
-
break;
|
5142 |
-
}
|
5143 |
-
} else {
|
5144 |
-
switch ($pr_array['condition']) {
|
5145 |
-
case($pr_array['condition'] = "contains"):
|
5146 |
-
if($pr_array['than'] == "include_only"){
|
5147 |
-
$allowed = 0;
|
5148 |
-
} else {
|
5149 |
-
if($allowed <> 0){
|
5150 |
-
$allowed = 1;
|
5151 |
-
}
|
5152 |
-
}
|
5153 |
-
break;
|
5154 |
-
case($pr_array['condition'] = "containsnot"):
|
5155 |
-
if($pr_array['than'] == "include_only"){
|
5156 |
-
if($allowed <> 0){
|
5157 |
-
$allowed = 1;
|
5158 |
-
}
|
5159 |
-
} else {
|
5160 |
-
$allowed = 0;
|
5161 |
-
}
|
5162 |
-
break;
|
5163 |
-
case($pr_array['condition'] = "="):
|
5164 |
-
if($pr_array['than'] == "include_only"){
|
5165 |
-
$allowed = 0;
|
5166 |
-
} else {
|
5167 |
-
if($allowed <> 0){
|
5168 |
-
$allowed = 1;
|
5169 |
-
}
|
5170 |
-
}
|
5171 |
-
break;
|
5172 |
-
case($pr_array['condition'] = "!="):
|
5173 |
-
if($pr_array['than'] == "include_only"){
|
5174 |
-
if($allowed <> 0){
|
5175 |
-
$allowed = 1;
|
5176 |
-
}
|
5177 |
-
} else {
|
5178 |
-
$allowed = 0;
|
5179 |
-
}
|
5180 |
-
break;
|
5181 |
-
case($pr_array['condition'] = ">"):
|
5182 |
-
if($pr_array['than'] == "include_only"){
|
5183 |
-
$allowed = 0;
|
5184 |
-
} else {
|
5185 |
-
$allowed = 0;
|
5186 |
-
}
|
5187 |
-
break;
|
5188 |
-
case($pr_array['condition'] = ">="):
|
5189 |
-
if($pr_array['than'] == "include_only"){
|
5190 |
-
$allowed = 0;
|
5191 |
-
} else {
|
5192 |
-
$allowed = 0;
|
5193 |
-
}
|
5194 |
-
break;
|
5195 |
-
case($pr_array['condition'] = "<"):
|
5196 |
-
if($pr_array['than'] == "include_only"){
|
5197 |
-
$allowed = 0;
|
5198 |
-
} else {
|
5199 |
-
$allowed = 0;
|
5200 |
-
}
|
5201 |
-
break;
|
5202 |
-
case($pr_array['condition'] = "=<"):
|
5203 |
-
if($pr_array['than'] == "include_only"){
|
5204 |
-
$allowed = 0;
|
5205 |
-
} else {
|
5206 |
-
$allowed = 0;
|
5207 |
-
}
|
5208 |
-
break;
|
5209 |
-
case($pr_array['condition'] = "empty"):
|
5210 |
-
if($pr_array['than'] == "include_only"){
|
5211 |
-
if($allowed <> 0){
|
5212 |
-
$allowed = 1;
|
5213 |
-
}
|
5214 |
-
} else {
|
5215 |
-
$allowed = 0;
|
5216 |
-
}
|
5217 |
-
break;
|
5218 |
-
default:
|
5219 |
-
break;
|
5220 |
-
}
|
5221 |
-
}
|
5222 |
-
} else {
|
5223 |
-
// For now only shipping details are in an array
|
5224 |
-
foreach ($pd_value as $k => $v){
|
5225 |
-
foreach ($v as $kk => $vv){
|
5226 |
-
// Only shipping detail rule can be on price for now
|
5227 |
-
if($kk == "price"){
|
5228 |
-
switch ($pr_array['condition']) {
|
5229 |
-
case($pr_array['condition'] = "contains"):
|
5230 |
-
if ((preg_match('/'.$pr_array['criteria'].'/', $vv))){
|
5231 |
-
$allowed = 0;
|
5232 |
-
}
|
5233 |
-
break;
|
5234 |
-
case($pr_array['condition'] = "containsnot"):
|
5235 |
-
if ((!preg_match('/'.$pr_array['criteria'].'/', $vv))){
|
5236 |
-
$allowed = 0;
|
5237 |
-
}
|
5238 |
-
break;
|
5239 |
-
case($pr_array['condition'] = "="):
|
5240 |
-
if (($vv == $pr_array['criteria'])){
|
5241 |
-
$allowed = 0;
|
5242 |
-
}
|
5243 |
-
break;
|
5244 |
-
case($pr_array['condition'] = "!="):
|
5245 |
-
if (($vv != $pr_array['criteria'])){
|
5246 |
-
$allowed = 0;
|
5247 |
-
}
|
5248 |
-
break;
|
5249 |
-
case($pr_array['condition'] = ">"):
|
5250 |
-
if (($vv > $pr_array['criteria'])){
|
5251 |
-
$allowed = 0;
|
5252 |
-
}
|
5253 |
-
break;
|
5254 |
-
case($pr_array['condition'] = ">="):
|
5255 |
-
if (($vv >= $pr_array['criteria'])){
|
5256 |
-
$allowed = 0;
|
5257 |
-
}
|
5258 |
-
break;
|
5259 |
-
case($pr_array['condition'] = "<"):
|
5260 |
-
if (($vv < $pr_array['criteria'])){
|
5261 |
-
$allowed = 0;
|
5262 |
-
}
|
5263 |
-
break;
|
5264 |
-
case($pr_array['condition'] = "=<"):
|
5265 |
-
if (($vv <= $pr_array['criteria'])){
|
5266 |
-
$allowed = 0;
|
5267 |
-
}
|
5268 |
-
break;
|
5269 |
-
case($pr_array['condition'] = "empty"):
|
5270 |
-
if (strlen($vv) < 1){
|
5271 |
-
$allowed = 0;
|
5272 |
-
}
|
5273 |
-
break;
|
5274 |
-
default:
|
5275 |
-
break;
|
5276 |
-
}
|
5277 |
-
}
|
5278 |
-
}
|
5279 |
-
}
|
5280 |
-
}
|
5281 |
-
} else {
|
5282 |
-
// Filters for string values
|
5283 |
-
// If case-sensitve is off than lowercase both the criteria and attribute value
|
5284 |
-
if (array_key_exists('cs', $pr_array)){
|
5285 |
-
if ($pr_array['cs'] != "on"){
|
5286 |
-
$pd_value = strtolower($pd_value);
|
5287 |
-
$pr_array['criteria'] = strtolower($pr_array['criteria']);
|
5288 |
-
}
|
5289 |
-
}
|
5290 |
-
$pos = strpos($pd_value, '&');
|
5291 |
-
$pos_slash = strpos($pr_array['criteria'], '\\');
|
5292 |
-
if($pos !== false){
|
5293 |
-
$pd_value = str_replace("&","&",$pd_value);
|
5294 |
-
}
|
5295 |
-
if($pos_slash !== false){
|
5296 |
-
$pr_array['criteria'] = str_replace("\\","",$pr_array['criteria']);
|
5297 |
-
}
|
5298 |
|
5299 |
-
|
5300 |
-
|
5301 |
-
|
5302 |
-
|
5303 |
-
|
5304 |
-
|
5305 |
-
|
5306 |
-
|
5307 |
-
|
5308 |
-
|
5309 |
-
|
5310 |
-
|
5311 |
-
|
5312 |
-
|
5313 |
-
|
5314 |
-
|
5315 |
-
|
5316 |
-
|
5317 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5318 |
case($pr_array['condition'] = "="):
|
5319 |
-
|
5320 |
-
$allowed = 0;
|
5321 |
-
} elseif (($pr_array['criteria'] != "$pd_value") && ($pr_array['than'] == "include_only")){
|
5322 |
-
$found = strpos($pd_value,$pr_array['criteria']);
|
5323 |
-
if ($found !== false) {
|
5324 |
-
//for category mapping check if its an array
|
5325 |
-
if($pr_array['attribute'] == "raw_categories"){
|
5326 |
-
$raw_cats_arr = explode("||",$pd_value);
|
5327 |
-
if(is_array($raw_cats_arr)){
|
5328 |
-
if(in_array($pr_array['criteria'],$raw_cats_arr, TRUE)){
|
5329 |
-
if($allowed <> 0){
|
5330 |
-
$allowed = 1;
|
5331 |
-
}
|
5332 |
-
} else {
|
5333 |
-
$allowed = 0;
|
5334 |
-
}
|
5335 |
-
}
|
5336 |
-
} else {
|
5337 |
-
if($allowed <> 0){
|
5338 |
-
$allowed = 1;
|
5339 |
-
}
|
5340 |
-
}
|
5341 |
-
} else {
|
5342 |
-
$allowed = 0;
|
5343 |
-
}
|
5344 |
-
} elseif (($pr_array['criteria'] == "$pd_value") && ($pr_array['than'] == "include_only")){
|
5345 |
-
if($allowed <> 0){
|
5346 |
-
$allowed = 1;
|
5347 |
-
}
|
5348 |
-
} elseif ((preg_match('/'.$pr_array['criteria'].'/', $pd_value)) && ($pr_array['than'] == "exclude")){
|
5349 |
$allowed = 0;
|
5350 |
-
|
5351 |
-
|
5352 |
-
|
5353 |
-
|
5354 |
-
|
5355 |
-
|
5356 |
-
|
5357 |
-
|
5358 |
-
|
5359 |
-
|
5360 |
-
|
5361 |
-
|
5362 |
-
|
5363 |
-
|
5364 |
-
|
5365 |
-
|
5366 |
-
|
5367 |
-
|
5368 |
-
|
5369 |
-
|
5370 |
-
|
5371 |
-
|
5372 |
-
|
5373 |
-
|
5374 |
-
|
5375 |
-
|
5376 |
-
|
5377 |
-
|
5378 |
-
|
5379 |
-
|
5380 |
-
|
5381 |
-
|
5382 |
-
|
5383 |
-
|
5384 |
-
|
5385 |
-
|
5386 |
-
|
5387 |
-
|
5388 |
-
|
5389 |
-
|
5390 |
-
|
5391 |
-
|
5392 |
-
|
5393 |
-
|
5394 |
-
|
5395 |
-
|
5396 |
-
|
5397 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5398 |
if ((strlen($pd_value) < 1) && ($pr_array['than'] == "exclude")){
|
5399 |
-
|
5400 |
-
|
5401 |
-
|
5402 |
-
|
5403 |
-
|
5404 |
-
|
5405 |
-
|
5406 |
-
|
5407 |
-
|
5408 |
-
|
5409 |
-
|
5410 |
-
|
5411 |
-
|
5412 |
-
|
5413 |
-
|
5414 |
-
|
5415 |
|
5416 |
-
|
5417 |
-
|
5418 |
-
|
5419 |
-
|
5420 |
-
|
5421 |
-
|
5422 |
-
|
5423 |
}
|
26 |
return "<![CDATA[ $string ]]>";
|
27 |
}
|
28 |
|
|
|
29 |
/**
|
30 |
* Check if a plugin is active
|
31 |
*/
|
56 |
* Get all approved product review comments for Google's Product Review Feeds
|
57 |
*/
|
58 |
public function woosea_get_reviews ( $product_data, $product ) {
|
59 |
+
// Rwviews for the parent variable product itself can be skipped, the review is added for the variation
|
60 |
+
if($product_data['product_type'] == "variable"){
|
61 |
+
return;
|
62 |
+
}
|
63 |
+
|
64 |
$approved_reviews = array();
|
65 |
$prod_id = $product_data['id'];
|
66 |
|
77 |
|
78 |
// Loop through all product reviews for this specific products (ternary operators)
|
79 |
foreach($reviews as $review_raw){
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
80 |
|
81 |
+
// Only reviews that are approved will make it to the feed
|
82 |
+
if($review_raw->comment_approved == 1){
|
83 |
+
|
84 |
+
$review = array();
|
85 |
+
$review['review_reviewer_image'] = empty($product_data['reviewer_image']) ? '' : $product_data['reviewer_image'];
|
86 |
+
$review['review_ratings'] = get_comment_meta( $review_raw->comment_ID, 'rating', true);
|
87 |
+
$review['review_id'] = $review_raw->comment_ID;
|
88 |
+
|
89 |
+
// Names need to be anonomyzed
|
90 |
+
$name_pieces = explode(" ", $review_raw->comment_author);
|
91 |
+
$nr_name_pieces = count($name_pieces);
|
92 |
+
$cnt = 0;
|
93 |
+
$name = "";
|
94 |
+
foreach($name_pieces as $n_piece){
|
95 |
+
$n_piece = str_replace("&", "", $n_piece);
|
96 |
+
|
97 |
+
if($cnt > 0){
|
98 |
+
$n_piece = ucfirst(substr($n_piece, 0, 1));
|
99 |
+
}
|
100 |
+
$name .= $n_piece." ";
|
101 |
+
$cnt++;
|
102 |
+
}
|
103 |
+
|
104 |
+
// Remove strange charachters from reviewer name
|
105 |
+
$review['reviewer_name'] = $this->rip_tags(trim(ucfirst($name)));
|
106 |
+
$review['reviewer_name'] = html_entity_decode((str_replace("\r", "", $review['reviewer_name'])), ENT_QUOTES | ENT_XML1, 'UTF-8');
|
107 |
+
$review['reviewer_name'] = preg_replace( '/\[(.*?)\]/', ' ', $review['reviewer_name'] );
|
108 |
+
$review['reviewer_name'] = str_replace(" ", "", $review['reviewer_name']);
|
109 |
+
$review['reviewer_name'] = $this->woosea_utf8_for_xml( $review['reviewer_name'] );
|
110 |
+
|
111 |
+
$review['reviewer_id'] = $review_raw->user_id;
|
112 |
+
$review['review_timestamp'] = $review_raw->comment_date;
|
113 |
+
|
114 |
+
// Remove strange characters from review title
|
115 |
+
$review['title'] = empty($product_data['title']) ? '' : $product_data['title'];
|
116 |
+
$review['title'] = $this->rip_tags($review['title']);
|
117 |
+
$review['title'] = html_entity_decode((str_replace("\r", "", $review['title'])), ENT_QUOTES | ENT_XML1, 'UTF-8');
|
118 |
+
$review['title'] = preg_replace( '/\[(.*?)\]/', ' ', $review['title'] );
|
119 |
+
$review['title'] = str_replace(" ", "", $review['title']);
|
120 |
+
$review['title'] = $this->woosea_utf8_for_xml( $review['title'] );
|
121 |
+
|
122 |
+
// Remove strange charchters from review content
|
123 |
+
$review['content'] = $review_raw->comment_content;
|
124 |
+
$review['content'] = $this->rip_tags($review['content']);
|
125 |
+
$review['content'] = html_entity_decode((str_replace("\r", "", $review['content'])), ENT_QUOTES | ENT_XML1, 'UTF-8');
|
126 |
+
$review['content'] = preg_replace( '/\[(.*?)\]/', ' ', $review['content'] );
|
127 |
+
$review['content'] = str_replace(" ", "", $review['content']);
|
128 |
+
$review['content'] = $this->woosea_utf8_for_xml( $review['content'] );
|
129 |
+
|
130 |
+
$review['review_product_name'] = $product_data['title'];
|
131 |
+
$review['review_url'] = $product_data['link'];
|
132 |
+
$review['review_product_url'] = $product_data['link'];
|
133 |
+
array_push($approved_reviews, $review);
|
134 |
+
}
|
135 |
}
|
136 |
$review_count = $product->get_review_count();
|
137 |
$review_average = $product->get_average_rating();
|
185 |
if($feed_config['fields'] == "google_drm"){
|
186 |
$utm_part .= "&$key=$value";
|
187 |
} else {
|
188 |
+
$utm_part .= "&$key=$value";
|
189 |
}
|
190 |
}
|
191 |
|
211 |
if($parentId > 0){
|
212 |
# Even though variation products always have parameters in the URL we still need to check and make sure they are there
|
213 |
if(strpos($link, '?') !== false){
|
214 |
+
$utm_part = "&".ltrim($utm_part, '&');
|
215 |
} else {
|
216 |
$utm_part = "?".ltrim($utm_part, '&');
|
217 |
}
|
335 |
/**
|
336 |
* Get category path (needed for Prisjakt)
|
337 |
*/
|
338 |
+
public function woosea_get_term_parents( $id, $taxonomy, string $link = null, $project_taxonomy, $nicename = false, $visited = array() ) {
|
339 |
// Only add Home to the beginning of the chain when we start buildin the chain
|
340 |
if(empty($visited)){
|
341 |
$chain = 'Home';
|
374 |
return $chain;
|
375 |
}
|
376 |
|
377 |
+
/**
|
378 |
+
* Create a floatval for prices
|
379 |
+
*/
|
380 |
+
public function woosea_floatvalue($val){
|
381 |
+
$val = str_replace(",",".",$val);
|
382 |
+
$val = preg_replace('/\.(?=.*\.)/', '', $val);
|
383 |
+
return floatval($val);
|
384 |
+
}
|
385 |
+
|
386 |
/**
|
387 |
* Get all configured shipping zones
|
388 |
*/
|
732 |
$shipping_methods = $zone['shipping_methods'];
|
733 |
|
734 |
foreach ($shipping_methods as $k => $v){
|
735 |
+
$method = $v->method_title;
|
736 |
+
$shipping_rate_id = $v->instance_id;
|
737 |
|
738 |
if($v->enabled == "yes"){
|
739 |
if(empty($zone_details['country'])){
|
776 |
}
|
777 |
}
|
778 |
|
779 |
+
// WooCommerce Table Rate - Bolder Elements
|
780 |
+
if($method == "Table Rate"){
|
781 |
+
if($this->woosea_is_plugin_active( 'woocommerce-table-rate-shipping/woocommerce-table-rate-shipping.php' )) {
|
782 |
+
// Set shipping cost
|
783 |
+
$shipping_cost = 0;
|
784 |
+
if(!empty($product_id)){
|
785 |
+
// Add product to cart
|
786 |
+
if ((isset($product_id)) AND ($product_id > 0)){
|
787 |
+
$quantity = 1;
|
788 |
+
if(!empty($code_from_config)){
|
789 |
+
defined( 'WC_ABSPATH' ) || exit;
|
790 |
+
|
791 |
+
// Load cart functions which are loaded only on the front-end.
|
792 |
+
include_once WC_ABSPATH . 'includes/wc-cart-functions.php';
|
793 |
+
include_once WC_ABSPATH . 'includes/class-wc-cart.php';
|
794 |
+
|
795 |
wc_load_cart();
|
796 |
|
797 |
WC()->customer->set_shipping_country( $code_from_config );
|
809 |
// Read cart and get schipping costs
|
810 |
foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
|
811 |
$total_cost = WC()->cart->get_total();
|
812 |
+
$shipping_cost = WC()->cart->get_shipping_total();
|
813 |
+
$shipping_tax = WC()->cart->get_shipping_tax();
|
814 |
+
$shipping_cost = ($shipping_cost+$shipping_tax);
|
815 |
$shipping_cost = wc_format_localized_price($shipping_cost);
|
816 |
+
}
|
|
|
817 |
// Make sure to empty the cart again
|
818 |
WC()->cart->empty_cart();
|
819 |
+
}
|
820 |
+
}
|
821 |
+
}
|
822 |
+
}
|
823 |
+
}
|
824 |
+
|
825 |
+
// Official WooCommerce Table Rate plugin
|
826 |
+
if($method == "Table rates"){
|
827 |
+
if($this->woosea_is_plugin_active( 'woocommerce-table-rate-shipping/woocommerce-table-rate-shipping.php' )) {
|
828 |
+
// Set shipping cost
|
829 |
+
$shipping_cost = 0;
|
830 |
+
if(!empty($product_id)){
|
831 |
+
// Add product to cart
|
832 |
+
if ((isset($product_id)) AND ($product_id > 0)){
|
833 |
+
$quantity = 1;
|
834 |
+
if(!empty($code_from_config)){
|
835 |
+
defined( 'WC_ABSPATH' ) || exit;
|
836 |
+
|
837 |
+
// Load cart functions which are loaded only on the front-end.
|
838 |
+
include_once WC_ABSPATH . 'includes/wc-cart-functions.php';
|
839 |
+
include_once WC_ABSPATH . 'includes/class-wc-cart.php';
|
840 |
+
|
841 |
+
wc_load_cart();
|
842 |
+
|
843 |
+
WC()->shipping()->reset_shipping();
|
844 |
+
WC()->customer->set_shipping_country( $code_from_config );
|
845 |
+
|
846 |
+
if(isset($zone_details['region'])){
|
847 |
+
WC()->customer->set_shipping_state(wc_clean( $zone_details['region'] ));
|
848 |
+
}
|
849 |
+
|
850 |
+
if(isset($zone_details['postal_code'])){
|
851 |
+
WC()->customer->set_shipping_postcode(wc_clean( $zone_details['postal_code'] ));
|
852 |
+
}
|
853 |
+
WC()->cart->add_to_cart( $product_id, $quantity );
|
854 |
+
|
855 |
+
// Read cart and get schipping costs
|
856 |
+
foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
|
857 |
+
// Loop though shipping packages
|
858 |
+
foreach ( WC()->shipping->get_packages() as $key => $package ) {
|
859 |
+
// Loop through Shipping rates
|
860 |
+
foreach($package['rates'] as $rate_id => $rate ){
|
861 |
+
|
862 |
+
if($rate->instance_id == $shipping_rate_id){
|
863 |
+
$shipping_cost = $rate->cost;
|
864 |
+
}
|
865 |
+
}
|
866 |
+
}
|
867 |
+
$shipping_tax = WC()->cart->get_shipping_tax();
|
868 |
+
$shipping_cost = ($shipping_cost+$shipping_tax);
|
869 |
+
$shipping_cost = wc_format_localized_price($shipping_cost);
|
870 |
+
}
|
871 |
+
|
872 |
+
if($taxable == "taxable"){
|
873 |
+
foreach ($tax_rates as $k_inner => $w){
|
874 |
+
if((isset($w['shipping'])) and ($w['shipping'] == "yes")){
|
875 |
+
$rate = (($w['rate']+100)/100);
|
876 |
+
|
877 |
+
$shipping_cost = str_replace(",", ".", $shipping_cost);
|
878 |
+
$shipping_cost = $shipping_cost*$rate;
|
879 |
+
$shipping_cost = round($shipping_cost, 2);
|
880 |
+
$shipping_cost = wc_format_localized_price($shipping_cost);
|
881 |
+
}
|
882 |
+
}
|
883 |
+
}
|
884 |
+
|
885 |
+
// Make sure to empty the cart again
|
886 |
+
WC()->cart->empty_cart();
|
887 |
+
}
|
888 |
+
}
|
889 |
+
}
|
890 |
+
}
|
891 |
+
}
|
892 |
|
893 |
// CLASS SHIPPING COSTS
|
894 |
if((isset($v->instance_settings[$class_cost_id])) AND ($class_cost_id != "no_class_cost")){
|
1022 |
unset($shipping_cost);
|
1023 |
}
|
1024 |
}
|
1025 |
+
|
1026 |
+
// User do not want to have free shipping in their feed
|
1027 |
+
$remove_free_shipping = "no";
|
1028 |
+
$remove_free_shipping = get_option ('remove_free_shipping');
|
1029 |
+
|
1030 |
+
if($remove_free_shipping == "yes"){
|
1031 |
+
unset($zone_details['service']);
|
1032 |
+
unset($zone_details['price']);
|
1033 |
+
unset($shipping_cost);
|
1034 |
+
}
|
1035 |
}
|
1036 |
|
1037 |
if(isset($zone_details)){
|
1049 |
}
|
1050 |
}
|
1051 |
}
|
1052 |
+
|
1053 |
+
// For Heureka remove currency
|
1054 |
+
if($project_config['fields'] == "heureka"){
|
1055 |
+
$currency = "";
|
1056 |
+
}
|
1057 |
+
|
1058 |
if(isset($shipping_cost)){
|
1059 |
if(strlen($shipping_cost) > 0){
|
1060 |
if($project_config['ship_suffix'] == "false"){
|
1063 |
$zone_details['price'] = trim($shipping_cost);
|
1064 |
}
|
1065 |
} else {
|
|
|
1066 |
if(isset($shipping_cost)){
|
1067 |
$zone_details['price'] = trim($currency." ".$shipping_cost);
|
1068 |
}
|
|
|
|
|
1069 |
}
|
1070 |
}
|
1071 |
}
|
1095 |
|
1096 |
// Remove other shipping classes when free shipping is relevant
|
1097 |
$free_check = "yes";
|
|
|
1098 |
|
1099 |
if(in_array($free_check, array_column($shipping_arr, 'free'))) { // search value in the array
|
1100 |
foreach($shipping_arr as $k => $v) {
|
1101 |
if(!in_array($free_check, $v)){
|
1102 |
+
|
1103 |
+
// User do not want to have free shipping in their feed
|
1104 |
+
// Only remove the other shipping classes when free shipping is not being removed
|
1105 |
+
$remove_free_shipping = "no";
|
1106 |
+
$remove_free_shipping = get_option ('remove_free_shipping');
|
1107 |
+
|
1108 |
+
if($remove_free_shipping == "no"){
|
1109 |
+
unset($shipping_arr[$k]);
|
1110 |
+
}
|
1111 |
}
|
1112 |
}
|
1113 |
}
|
1115 |
// Fix empty services
|
1116 |
foreach($shipping_arr as $k => $v){
|
1117 |
if(empty($v['service'])){
|
|
|
|
|
1118 |
unset($shipping_arr[$k]);
|
1119 |
}
|
1120 |
}
|
1253 |
} elseif (preg_match("/g:product_detail/i",$k)){
|
1254 |
if(!empty($v)){
|
1255 |
$product_detail_split = explode("#", $v);
|
1256 |
+
$detail_complete = count($product_detail_split);
|
1257 |
+
if($detail_complete == 2){
|
1258 |
+
$product_detail = $product->addChild('g:product_detail', '', $namespace['g']);
|
1259 |
+
$name = str_replace("_", " ", $product_detail_split[0]);
|
1260 |
+
|
1261 |
+
$section_name = explode(":", $name);
|
1262 |
+
$section_name_start = ucfirst($section_name[0]);
|
1263 |
+
$name = ucfirst(trim($section_name[1]));
|
1264 |
+
|
1265 |
+
$section_name = $product_detail->addChild('g:section_name', "General", $namespace['g']);
|
1266 |
+
$product_detail_name = $product_detail->addChild('g:attribute_name', $section_name_start, $namespace['g']);
|
1267 |
+
$product_detail_value = $product_detail->addChild('g:attribute_value', $product_detail_split[1], $namespace['g']);
|
1268 |
+
}
|
1269 |
}
|
1270 |
} elseif ($k == "g:installment"){
|
1271 |
if(!empty($v)){
|
1466 |
|
1467 |
// For Google Product review template
|
1468 |
if (($feed_config['name'] == "Google Product Review") AND (empty($xml->channel))) {
|
1469 |
+
|
1470 |
+
if(!is_bool($xml)){
|
1471 |
+
$product = $xml->addChild('reviews');
|
1472 |
|
1473 |
+
foreach ($products as $key => $value){
|
1474 |
|
1475 |
+
$expl = "||";
|
1476 |
+
if(strpos($value['reviews'], $expl)) {
|
1477 |
+
$review_data = explode("||", $value['reviews']);
|
1478 |
+
foreach($review_data as $rk => $rv){
|
1479 |
|
1480 |
+
$review_comp = explode(":::", $rv);
|
1481 |
+
$nr_reviews = count($review_comp);
|
1482 |
|
1483 |
+
if($nr_reviews > 1){
|
1484 |
+
$productz = $xml->reviews->addChild('review');
|
1485 |
|
1486 |
+
foreach($review_comp as $rck => $rcv){
|
1487 |
+
$nodes = explode("##", $rcv);
|
1488 |
+
$nodes = str_replace("::", "", $nodes);
|
1489 |
|
1490 |
+
if($nodes[0] == "REVIEW_RATINGS"){
|
1491 |
+
// Do nothing
|
1492 |
+
} elseif($nodes[0] == "REVIEW_URL"){
|
1493 |
+
$rev_url = $productz->addChild(strtolower($nodes[0]), htmlspecialchars($nodes[1]));
|
1494 |
+
$rev_url->addAttribute('type', 'singleton');
|
1495 |
+
} elseif(($nodes[0] == "REVIEWER_NAME") OR ($nodes[0] == "REVIEWER_ID")){
|
1496 |
+
if(isset($productz->reviewer)){
|
1497 |
+
if($nodes[0] == "REVIEWER_NAME"){
|
1498 |
+
$name = $nodes[1];
|
1499 |
+
if(empty($name)){
|
1500 |
+
$reviewer->addChild('name','Anonymous');
|
1501 |
+
$reviewer->name->addAttribute('is_anonymous', 'true');
|
1502 |
+
} else {
|
1503 |
+
$reviewer->addChild('name',$name);
|
1504 |
+
}
|
1505 |
} else {
|
1506 |
+
if(is_numeric($nodes[1])){
|
1507 |
+
$reviewer->addChild('reviewer_id',$nodes[1]);
|
1508 |
+
}
|
1509 |
}
|
1510 |
} else {
|
1511 |
+
$reviewer = $productz->addChild('reviewer');
|
1512 |
+
if($nodes[0] == "REVIEWER_NAME"){
|
1513 |
+
$name = $nodes[1];
|
1514 |
+
if(empty($name)){
|
1515 |
+
$reviewer->addChild('name','Anonymous');
|
1516 |
+
$reviewer->name->addAttribute('is_anonymous', 'true');
|
1517 |
+
} else {
|
1518 |
+
$reviewer->addChild('name',$name);
|
1519 |
+
}
|
1520 |
} else {
|
1521 |
+
if(is_numeric($nodes[1])){
|
1522 |
+
$reviewer->addChild('reviewer_id',$nodes[1]);
|
1523 |
+
}
|
1524 |
}
|
|
|
|
|
1525 |
}
|
1526 |
+
} else {
|
1527 |
+
if(isset($nodes[1])){
|
1528 |
+
$content = html_entity_decode($nodes[1]);
|
1529 |
+
$content = htmlspecialchars($content);
|
1530 |
+
$rev = $productz->addChild(strtolower($nodes[0]), $content);
|
1531 |
+
}
|
1532 |
}
|
1533 |
}
|
|
|
1534 |
|
1535 |
+
foreach($review_comp as $rck => $rcv){
|
1536 |
+
$nodes = explode("##", $rcv);
|
1537 |
+
$nodes = str_replace("::", "", $nodes);
|
1538 |
|
1539 |
+
if($nodes[0] == "REVIEW_RATINGS"){
|
1540 |
+
$rev = $productz->addChild('ratings');
|
1541 |
+
$over = $productz->ratings->addChild('overall', $nodes[1]);
|
1542 |
+
$over->addAttribute('min', '1');
|
1543 |
+
$over->addAttribute('max', '5');
|
1544 |
+
}
|
1545 |
}
|
|
|
|
|
1546 |
|
1547 |
+
$yo = $productz->addChild('products');
|
1548 |
+
$po = $yo->addChild('product');
|
1549 |
|
1550 |
+
$identifiers = array("gtin","mpn","sku","brand");
|
1551 |
|
1552 |
+
// Start determining order of product_ids in the Google review feed
|
1553 |
+
$proper_order = array("product_name","gtin","mpn","sku","brand","product_url","review_url","reviews");
|
1554 |
+
$order_sorted = array();
|
1555 |
+
foreach ($proper_order as &$order_value){
|
1556 |
+
if(isset($value[$order_value])){
|
1557 |
+
$order_sorted[$order_value] = $value[$order_value];
|
1558 |
+
}
|
1559 |
}
|
1560 |
+
// End
|
1561 |
+
|
1562 |
+
foreach($order_sorted as $k => $v) {
|
1563 |
+
if(($k != "product_name") AND ($k != "product_url")){
|
1564 |
+
if(!in_array($k, $identifiers)){
|
1565 |
+
if(($k != "reviews") AND ($k != "review_url")){
|
1566 |
+
$v = str_replace("&", "and", $v);
|
1567 |
+
$poa = $po->addChild($k,htmlspecialchars($v));
|
1568 |
+
}
|
1569 |
+
} else {
|
1570 |
+
if(isset($po->product_ids)){
|
1571 |
+
if ($k == "gtin"){
|
1572 |
+
$poig = $poi->addChild('gtins');
|
1573 |
+
$poig->$k = $v;
|
1574 |
+
} elseif ($k == "mpn"){
|
1575 |
+
$poim = $poi->addChild('mpns');
|
1576 |
+
$poim->$k = $v;
|
1577 |
+
} elseif ($k == "sku"){
|
1578 |
+
$poix = $poi->addChild('skus');
|
1579 |
+
$poix->$k = $v;
|
1580 |
+
} elseif($k == "brand"){
|
1581 |
+
$poib = $poi->addChild('brands');
|
1582 |
+
$poib->$k = $v;
|
1583 |
+
} else {
|
1584 |
+
// Do nothing
|
1585 |
+
}
|
1586 |
+
} else {
|
1587 |
+
$poi = $po->addChild('product_ids');
|
1588 |
+
if ($k == "gtin"){
|
1589 |
+
$poig = $poi->addChild('gtins');
|
1590 |
+
$poig->$k = $v;
|
1591 |
+
} elseif ($k == "mpn"){
|
1592 |
+
$poim = $poi->addChild('mpns');
|
1593 |
+
$poim->$k = $v;
|
1594 |
+
} elseif ($k == "sku"){
|
1595 |
+
$poix = $poi->addChild('skus');
|
1596 |
+
$poix->$k = $v;
|
1597 |
+
} elseif($k == "brand"){
|
1598 |
+
$poib = $poi->addChild('brands');
|
1599 |
+
$poib->$k = $v;
|
1600 |
+
} else {
|
1601 |
+
// Do nothing
|
1602 |
+
}
|
1603 |
}
|
1604 |
+
}
|
1605 |
+
}
|
1606 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1607 |
|
1608 |
+
// foreach for product name and product url as order seems to mather to Google
|
1609 |
+
foreach($value as $k => $v) {
|
1610 |
+
if(($k == "product_name") OR ($k == "product_url")){
|
1611 |
+
if(!in_array($k, $identifiers)){
|
1612 |
+
if(($k != "reviews") AND ($k != "review_url")){
|
1613 |
+
$v = str_replace("&", "and", $v);
|
1614 |
+
$poa = $po->addChild($k,htmlspecialchars($v));
|
1615 |
+
}
|
1616 |
+
} else {
|
1617 |
+
if(isset($po->product_ids)){
|
1618 |
+
if ($k == "gtin"){
|
1619 |
+
$poig = $poi->addChild('gtins');
|
1620 |
+
$poig->$k = $v;
|
1621 |
+
} elseif ($k == "mpn"){
|
1622 |
+
$poim = $poi->addChild('mpns');
|
1623 |
+
$poim->$k = $v;
|
1624 |
+
} elseif($k == "sku"){
|
1625 |
+
$poix = $poi->addChild('skus');
|
1626 |
+
$poix->$k = $v;
|
1627 |
+
} elseif($k == "brand"){
|
1628 |
+
$poib = $poi->addChild('brands');
|
1629 |
+
$poib->$k = $v;
|
1630 |
+
} else {
|
1631 |
+
// Do nothing
|
1632 |
+
}
|
1633 |
+
} else {
|
1634 |
+
$poi = $po->addChild('product_ids');
|
1635 |
+
if ($k == "gtin"){
|
1636 |
+
$poig = $poi->addChild('gtins');
|
1637 |
+
$poig->$k = $v;
|
1638 |
+
} elseif ($k == "mpn"){
|
1639 |
+
$poim = $poi->addChild('mpns');
|
1640 |
+
$poim->$k = $v;
|
1641 |
+
} elseif ($k == "sku"){
|
1642 |
+
$poix = $poi->addChild('skus');
|
1643 |
+
$poix->$k = $v;
|
1644 |
+
} elseif($k == "brand"){
|
1645 |
+
$poib = $poi->addChild('brands');
|
1646 |
+
$poib->$k = $v;
|
1647 |
+
} else {
|
1648 |
+
// Do nothing
|
1649 |
+
}
|
1650 |
}
|
1651 |
+
}
|
1652 |
+
}
|
1653 |
+
}
|
1654 |
+
}
|
1655 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1656 |
}
|
1657 |
}
|
1658 |
}
|
2110 |
$xml_piece = "";
|
2111 |
|
2112 |
// Get taxonomies
|
2113 |
+
$no_taxonomies = array("element_category","template_category","portfolio_category","portfolio_skills","portfolio_tags","faq_category","slide-page","category","post_tag","nav_menu","link_category","post_format","product_type","product_visibility","product_cat","product_shipping_class","product_tag");
|
2114 |
$taxonomies = get_taxonomies();
|
2115 |
$diff_taxonomies = array_diff($taxonomies, $no_taxonomies);
|
2116 |
|
2365 |
// Check if there are mother categories
|
2366 |
if(!empty($product_cat)){
|
2367 |
$category_path = $this->woosea_get_term_parents( $product_cat->term_id, 'product_cat', $link = false, $project_taxonomy = $project_config['taxonomy'], $nicename = false, $visited = array() );
|
|
|
|
|
2368 |
|
2369 |
+
if(!is_object($category_path)){
|
2370 |
+
$category_path_skroutz = preg_replace('/>/', '>', $category_path);
|
2371 |
$product_data['category_path'] = $category_path;
|
2372 |
$product_data['category_path_skroutz'] = $category_path_skroutz;
|
2373 |
$product_data['category_path_skroutz'] = str_replace("Home >","",$product_data['category_path_skroutz']);
|
2441 |
$product_data['raw_description'] = substr($product_data['raw_description'], 0, 5000);
|
2442 |
$product_data['raw_short_description'] = substr($product_data['raw_short_description'], 0, 5000);
|
2443 |
|
2444 |
+
// Parent variable description
|
2445 |
+
$product_data['mother_description'] = $product_data['description'];
|
2446 |
+
$product_data['mother_short_description'] = $product_data['short_description'];
|
2447 |
+
|
2448 |
/**
|
2449 |
* Check of we need to add Google Analytics UTM parameters
|
2450 |
*/
|
2470 |
if(empty($product_data['condition']) || $product_data['condition'] == "Array"){
|
2471 |
$product_data['condition'] = "New";
|
2472 |
}
|
2473 |
+
|
2474 |
+
// get_stock only works as of WC 5 and higher?
|
2475 |
$product_data['availability'] = $this->get_stock( $this->childID );
|
2476 |
|
2477 |
/**
|
2480 |
* Therefor, we need to check the stock_status and overwrite te availability value
|
2481 |
*/
|
2482 |
$stock_status = $product->get_stock_status();
|
2483 |
+
$product_data['stock_status'] = $stock_status;
|
2484 |
if ($stock_status == "outofstock"){
|
2485 |
$product_data['availability'] = "out of stock";
|
2486 |
} elseif ($stock_status == "onbackorder") {
|
2562 |
}
|
2563 |
|
2564 |
$product_data['shipping_label'] = $product->get_shipping_class();
|
2565 |
+
$term = get_term_by( 'slug', $product->get_shipping_class(), 'product_shipping_class' );
|
2566 |
+
if(is_object($term)){
|
2567 |
+
$product_data['shipping_label_name'] = $term->name;
|
2568 |
+
}
|
2569 |
|
2570 |
// Get product prices
|
2571 |
$product_data['price'] = wc_get_price_including_tax($product, array('price'=> $product->get_price()));
|
2576 |
$product_data['regular_price'] = wc_format_decimal($product_data['regular_price'],2);
|
2577 |
|
2578 |
// Untouched raw system pricing - DO NOT CHANGE THESE
|
2579 |
+
$float_system_net_price = floatval(wc_get_price_excluding_tax( $product ));
|
2580 |
+
$product_data['system_net_price'] = round($float_system_net_price, 2);
|
2581 |
+
$product_data['system_net_price'] = wc_format_decimal($product_data['system_net_price'],2);
|
2582 |
+
$float_system_regular_price = floatval($product->get_regular_price());
|
2583 |
+
$product_data['system_regular_price'] = round($float_system_regular_price,2);
|
2584 |
$product_data['system_regular_price'] = wc_format_decimal($product_data['system_regular_price'],2);
|
2585 |
|
2586 |
$product_data['system_price'] = wc_get_price_including_tax($product, array('price'=> $product->get_price()));
|
2614 |
if($product->get_type() == "bundle"){
|
2615 |
if ($this->woosea_is_plugin_active('woocommerce-product-bundles/woocommerce-product-bundles.php')){
|
2616 |
$product_data['price'] = get_post_meta($product_data['id'], '_price', true);
|
2617 |
+
$product_data['sale_price'] = get_post_meta($product_data['id'], '_sale_price', true);
|
2618 |
if(is_numeric($tax_rates[1]['rate'])){
|
2619 |
$product_data['price_forced'] = round(get_post_meta($product_data['id'], '_price', true) * (100+$tax_rates[1]['rate'])/100,2);
|
2620 |
$product_data['regular_price'] = round(get_post_meta($product_data['id'], '_regular_price', true) * (100+$tax_rates[1]['rate'])/100,2);
|
2700 |
$product_data['net_sale_price'] = "";
|
2701 |
}
|
2702 |
}
|
2703 |
+
$float_net_price = floatval(wc_get_price_excluding_tax( $product ));
|
2704 |
+
$product_data['net_price'] = round($float_net_price, 2);
|
2705 |
+
$product_data['net_price'] = wc_format_decimal($product_data['net_price'],2);
|
2706 |
+
|
2707 |
$price = wc_get_price_including_tax($product,array('price'=> $product->get_price()));
|
2708 |
if($product_data['sale_price'] > 0){
|
2709 |
$price = $product_data['sale_price'];
|
2714 |
$discount = apply_filters('advanced_woo_discount_rules_get_product_discount_price_from_custom_price', false, $product, 1, $product_data['sale_price'], 'discounted_price', true, true);
|
2715 |
if($discount !== false){
|
2716 |
$product_data['sale_price'] = $discount;
|
2717 |
+
$product_data['price'] = $discount;
|
2718 |
$price_incl_tax = get_option( 'woocommerce_prices_include_tax' );
|
2719 |
if($price_incl_tax == "yes"){
|
2720 |
$product_data['price_forced'] = $product_data['price']*($fullrate/100);
|
2830 |
$product_data['sale_price'] = wc_format_localized_price($product_data['sale_price']);
|
2831 |
if($product->get_price()){
|
2832 |
$product_data['price_forced'] = wc_format_localized_price($product_data['price_forced']);
|
2833 |
+
//$product_data['price_forced'] = (float)$product_data['price_forced'];
|
2834 |
+
//$product_data['price_forced_rounded'] = round($product_data['price_forced'],0);
|
2835 |
}
|
2836 |
if($product->get_regular_price()){
|
2837 |
$product_data['regular_price_forced'] = wc_format_localized_price($product_data['regular_price_forced']);
|
2838 |
+
//$product_data['regular_price_forced'] = (float)$product_data['regular_price_forced'];
|
2839 |
+
//$product_data['regular_price_forced_rounded'] = round($product_data['regular_price_forced'],0);
|
2840 |
}
|
2841 |
if($product->get_sale_price()){
|
2842 |
$product_data['sale_price_forced'] = wc_format_localized_price($product_data['sale_price_forced']);
|
2843 |
+
//$product_data['sale_price_forced_rounded'] = round($product_data['sale_price_forced'],0);
|
2844 |
+
|
2845 |
}
|
2846 |
$product_data['net_price'] = wc_format_localized_price($product_data['net_price']);
|
2847 |
|
2861 |
$product_data['system_sale_price'] = wc_format_localized_price($product_data['system_sale_price']);
|
2862 |
|
2863 |
// Add rounded price options
|
2864 |
+
$float_price = floatval($product_data['price']);
|
2865 |
+
$float_regular_price = floatval($product_data['regular_price']);
|
2866 |
+
$float_sale_price = floatval($product_data['sale_price']);
|
2867 |
+
$product_data['rounded_price'] = round($float_price,0);
|
2868 |
+
$product_data['rounded_regular_price'] = round($float_regular_price,0);
|
2869 |
+
$product_data['rounded_sale_price'] = round($float_sale_price,0);
|
2870 |
|
2871 |
// Calculate discount percentage
|
2872 |
if($product_data['sale_price'] > 0){
|
2884 |
}
|
2885 |
}
|
2886 |
|
2887 |
+
if ((array_key_exists('shipping', $project_config['attributes'])) OR (array_key_exists('shipping_price', $project_config['attributes'])) OR ($project_config['fields'] == "trovaprezzi") OR ($project_config['fields'] == "customfeed")){
|
2888 |
$product_data['shipping'] = $this->woosea_get_shipping_cost($class_cost_id, $project_config, $product_data['price'], $tax_rates, $shipping_zones, $product_data['id'], $product_data['item_group_id']);
|
2889 |
$shipping_str = $product_data['shipping'];
|
2890 |
}
|
2892 |
// Get only shipping costs
|
2893 |
if(!empty($shipping_str)){
|
2894 |
$product_data['shipping_price'] = 0;
|
2895 |
+
$product_data['shipping_price_lowest'] = 0;
|
2896 |
}
|
2897 |
+
$shipping_arr = $product_data['shipping'];
|
2898 |
+
//$min = min(array_column($shipping_arr, 'price'));
|
2899 |
|
2900 |
if(is_array($shipping_arr)){
|
2901 |
foreach($shipping_arr as $akey => $arr){
|
2982 |
|
2983 |
foreach($diff_taxonomies as $taxo){
|
2984 |
$term_value = get_the_terms($product_data['id'], $taxo);
|
2985 |
+
$product_data["$taxo"] = "";
|
2986 |
|
2987 |
if(is_array($term_value)){
|
2988 |
// Do not add variation values to the feed when they are out of stock
|
2992 |
$variations = $product_skroutz->get_available_variations();
|
2993 |
$variations_id = wp_list_pluck( $variations, 'variation_id' );
|
2994 |
$skroutz_att_array = array();
|
2995 |
+
|
2996 |
foreach($variations_id as $var_id){
|
2997 |
$stock_value = get_post_meta( $var_id, "_stock_status", true );
|
2998 |
if($stock_value == "instock"){
|
3006 |
$product_data[$taxo] = rtrim($product_data[$taxo],',');
|
3007 |
}
|
3008 |
}
|
|
|
3009 |
foreach($skroutz_att_array as $skrtz_value){
|
3010 |
$product_data[$taxo] .= ",". $skrtz_value;
|
3011 |
}
|
3120 |
$data = $wpdb->get_results($sql);
|
3121 |
if (count($data)) {
|
3122 |
foreach ($data as $key => $value) {
|
3123 |
+
$value_display = str_replace("_", " ",$value->name);
|
3124 |
if (preg_match("/_product_attributes/i",$value->name)){
|
3125 |
$product_attr = unserialize($value->type);
|
3126 |
if(!empty($product_attr)){
|
3138 |
|
3139 |
/**
|
3140 |
* Get Product Attributes for Single products
|
3141 |
+
* These are the attributes users create themselves in WooCommerce
|
3142 |
*/
|
3143 |
+
if (($product->is_type('simple')) OR ($product->is_type('external')) OR ($product->is_type('mix-and-match')) OR ($product->is_type('bundle')) OR ($product->is_type('composite')) OR ($product->is_type('auction') OR ($product->is_type('subscription')) OR ($product->is_type('variable')))){
|
3144 |
$single_attributes = $product->get_attributes();
|
|
|
3145 |
foreach ($single_attributes as $attribute){
|
3146 |
+
$attr_name = strtolower($attribute->get_name());
|
3147 |
+
$attr_value = $product->get_attribute($attr_name);
|
3148 |
+
$product_data[$attr_name] = $attr_value;
|
3149 |
}
|
3150 |
}
|
3151 |
|
3171 |
$product_variations = new WC_Product_Variation( $product_data['id'] );
|
3172 |
$variations = $product_variations->get_variation_attributes();
|
3173 |
|
3174 |
+
// For Skroutz and Bestprice apparal products we can only append colours to the product name
|
3175 |
// When a product has both a size and color attribute we assume its an apparal product
|
3176 |
+
if(($project_config['fields'] == "skroutz") OR ($project_config['fields'] == "bestprice")){
|
3177 |
$size_found = "no";
|
3178 |
$color_found = "no";
|
3179 |
|
3249 |
}
|
3250 |
}
|
3251 |
|
|
|
|
|
3252 |
if((isset($project_config['lowest_price_variations'])) OR (isset($project_config['default_variations']))){
|
|
|
3253 |
// Determine the default variation product
|
3254 |
if( ($product_data['item_group_id'] > 0) AND (is_object(wc_get_product( $product_data['item_group_id']))) AND (($product_data['product_type'] == "variation") OR ($product_data['product_type'] == "subscription_variation"))){
|
3255 |
+
$mother_product = new WC_Product_Variable($product_data['item_group_id']);
|
3256 |
+
//$mother_product = wc_get_product($product_data['item_group_id']);
|
3257 |
+
$def_attributes = $mother_product->get_default_attributes();
|
3258 |
|
3259 |
if(isset($project_config['lowest_price_variations'])){
|
3260 |
+
|
3261 |
// Determine lowest priced variation
|
3262 |
$variation_min_price = $mother_product->get_variation_price('min');
|
3263 |
$variation_min_price = wc_format_decimal($variation_min_price,2);
|
3264 |
$variation_min_price = wc_format_localized_price($variation_min_price);
|
3265 |
+
$var_price = get_post_meta($product_data['id'], '_price', true);
|
3266 |
+
$var_price = wc_format_decimal($var_price,2);
|
3267 |
+
$var_price = wc_format_localized_price($var_price);
|
3268 |
+
$variation_prices = $mother_product->get_variation_prices();
|
3269 |
+
$variation_prices_price = array_values($variation_prices['price']);
|
3270 |
+
$lowest_price = min($variation_prices_price);
|
3271 |
+
|
3272 |
+
if(($var_price == $lowest_price) OR ($var_price == $variation_min_price) OR ($product_data['system_regular_price'] == $variation_min_price) OR ($product_data['system_net_price'] == $variation_min_price)){
|
3273 |
$variation_pass = "true";
|
3274 |
} else {
|
3275 |
$variation_pass = "false";
|
3407 |
/**
|
3408 |
* Although this is a product variation we also need to grap the Dynamic attributes belonging to the simple mother prodict
|
3409 |
*/
|
3410 |
+
$stock_value = get_post_meta( $product_data['id'], "_stock_status", true );
|
3411 |
+
//if($stock_value == "instock"){
|
3412 |
foreach($diff_taxonomies as $taxo){
|
3413 |
$term_value = get_the_terms($product_data['item_group_id'], $taxo);
|
3414 |
unset($product_data[$taxo]);
|
3415 |
if(is_array($term_value)){
|
3416 |
foreach($term_value as $term){
|
3417 |
if(empty($product_data[$taxo])){
|
3418 |
+
$product_data[$taxo] = $term->name;
|
3419 |
} else {
|
3420 |
+
$product_data[$taxo] .= " ".$term->name;
|
3421 |
}
|
3422 |
}
|
3423 |
}
|
3424 |
+
}
|
3425 |
|
3426 |
/**
|
3427 |
* Add product tags to the product data array
|
3441 |
|
3442 |
// Add attribute values to the variation product names to make them unique
|
3443 |
$product_data['title_hyphen'] = $product_data['title']." - ";
|
3444 |
+
$product_data['mother_title_hyphen'] = $product_data['mother_title']." - ";
|
3445 |
|
3446 |
foreach($variations as $kk => $vv){
|
3447 |
$custom_key = $kk;
|
3590 |
* we will add CDATA brackets to the title and description attributes
|
3591 |
*/
|
3592 |
$product_data['title_lc'] = ucfirst(strtolower($product_data['title']));
|
3593 |
+
$product_data['title_lcw'] = ucwords(strtolower($product_data['title']));
|
3594 |
+
|
3595 |
//$product_data['description'] = $this->woosea_append_cdata ( $product_data['description'] );
|
3596 |
//$product_data['short_description'] = $this->woosea_append_cdata ( $product_data['short_description'] );
|
3597 |
|
3600 |
*/
|
3601 |
$product_data['reviews'] = $this->woosea_get_reviews( $product_data, $product );
|
3602 |
|
3603 |
+
/**
|
3604 |
+
* Filter out reviews that do not have text
|
3605 |
+
*/
|
3606 |
+
if(!empty($product_data['reviews'])){
|
3607 |
+
foreach($product_data['reviews'] as $review_id => $review_details){
|
3608 |
+
if(empty($review_details['content'])){
|
3609 |
+
unset($product_data['reviews'][$review_id]);
|
3610 |
+
}
|
3611 |
+
}
|
3612 |
+
}
|
3613 |
+
|
3614 |
/**
|
3615 |
* Check if individual products need to be excluded
|
3616 |
*/
|
3676 |
// For these channels parent products are allowed
|
3677 |
$allowed_channel_parents = array(
|
3678 |
"skroutz",
|
3679 |
+
"bestprice",
|
3680 |
"google_dsa",
|
3681 |
"google_product_review",
|
3682 |
);
|
3683 |
|
3684 |
+
if(array_key_exists('fields', $project_config)){
|
3685 |
+
if (!in_array($project_config['fields'], $allowed_channel_parents)){
|
3686 |
+
if(($product->is_type('variable')) AND ($product_data['item_group_id'] == 0)){
|
3687 |
+
$product_data = array();
|
3688 |
+
$product_data = null;
|
3689 |
+
}
|
3690 |
+
}
|
3691 |
+
}
|
3692 |
|
3693 |
/**
|
3694 |
* Remove variation products that are not THE default variation product
|
3701 |
/**
|
3702 |
* And item_group_id is not allowed for simple products, prevent users from adding this to the feedd
|
3703 |
*/
|
3704 |
+
if($product->is_type('simple') OR ($product->is_type('auction') OR ($product->is_type('external') OR ($product->is_type('bundle')) OR ($product->is_type('composite'))))){
|
3705 |
unset($product_data['item_group_id']);
|
3706 |
}
|
3707 |
|
3715 |
}
|
3716 |
}
|
3717 |
|
3718 |
+
/**
|
3719 |
+
* Do final check on Skroutz out of stock sizes
|
3720 |
+
* When a size is not on stock remove it
|
3721 |
+
*/
|
3722 |
+
if($project_config['fields'] == "skroutz"){
|
3723 |
+
if(isset($product_data['id'])){
|
3724 |
+
foreach($project_config['attributes'] as $ky => $vy){
|
3725 |
+
if(isset($vy['attribute'])){
|
3726 |
+
if($vy['attribute'] == "size"){
|
3727 |
+
$size_found = "yes";
|
3728 |
+
$sz_attribute = $vy['mapfrom'];
|
3729 |
+
}
|
3730 |
+
if($vy['attribute'] == "color"){
|
3731 |
+
$color_found = "yes";
|
3732 |
+
$clr_attribute = $vy['mapfrom'];
|
3733 |
+
}
|
3734 |
+
}
|
3735 |
+
}
|
3736 |
+
|
3737 |
+
$stock_value = get_post_meta( $product_data['id'], "_stock_status", true );
|
3738 |
+
$sz_attr_value = get_post_meta( $product_data['id'], $sz_attribute, true );
|
3739 |
+
$clr_attr_value = get_post_meta( $product_data['id'], "attribute_".$clr_attribute, true );
|
3740 |
+
if(isset($product_data['item_group_id']) AND ($product_data['item_group_id'] > 0)){
|
3741 |
+
$product_skroutz = wc_get_product($product_data['item_group_id']);
|
3742 |
+
$variations = $product_skroutz->get_available_variations();
|
3743 |
+
$variations_id = wp_list_pluck( $variations, 'variation_id' );
|
3744 |
+
|
3745 |
+
foreach($variations_id as $var_id){
|
3746 |
+
$clr_variation = get_post_meta( $var_id, "attribute_".$clr_attribute, true );
|
3747 |
+
$size_variation = get_post_meta( $var_id, "attribute_".$sz_attribute, true );
|
3748 |
+
$stock_variation = get_post_meta( $var_id, "_stock_status", true );
|
3749 |
+
|
3750 |
+
if($clr_variation == $clr_attr_value){
|
3751 |
+
if($stock_variation == "outofstock"){
|
3752 |
+
// Remove this size as it is not on stock
|
3753 |
+
if(array_key_exists($sz_attribute, $product_data)){
|
3754 |
+
$product_data[$sz_attribute] = str_replace(ucfirst($size_variation),"",$product_data[$sz_attribute]);
|
3755 |
+
}
|
3756 |
+
}
|
3757 |
+
}
|
3758 |
+
}
|
3759 |
+
}
|
3760 |
+
}
|
3761 |
+
}
|
3762 |
+
|
3763 |
/**
|
3764 |
* When product has passed the filter rules it can continue with the rest
|
3765 |
*/
|
3793 |
}
|
3794 |
} else {
|
3795 |
if((strlen($attr_value['mapfrom'])) AND (array_key_exists($attr_value['mapfrom'], $product_data))){
|
3796 |
+
if(($attr_value['attribute'] == "URL") OR ($attr_value['attribute'] == "g:link") OR ($attr_value['attribute'] == "g:link_template") OR ($attr_value['attribute'] == "g:image_link") OR ($attr_value['attribute'] == "link") OR ($attr_value['attribute'] == "Final URL") OR ($attr_value['attribute'] == "SKU")){
|
3797 |
$attr_line = "'".$attr_value['prefix']."".$product_data[$attr_value['mapfrom']]."".$attr_value['suffix']."'";
|
3798 |
} else {
|
3799 |
$attr_line = "'".$attr_value['prefix']. "".$product_data[$attr_value['mapfrom']]."" .$attr_value['suffix']."'";
|
3865 |
}
|
3866 |
} else {
|
3867 |
if(strlen($product_data[$attr_value['mapfrom']])){
|
3868 |
+
if(($attr_value['attribute'] == "URL") OR ($attr_value['attribute'] == "g:link") OR ($attr_value['attribute'] == "g:link_template") OR ($attr_value['attribute'] == "g:image_link") OR ($attr_value['attribute'] == "link") OR ($attr_value['attribute'] == "Final URL") OR ($attr_value['attribute'] == "SKU")){
|
3869 |
if(($product_data['product_type'] == "variation") AND (preg_match("/aelia_cs_currency/", $attr_value['suffix']))){
|
3870 |
$attr_value['suffix'] = str_replace("?","&",$attr_value['suffix']);
|
3871 |
$attr_line .= ",'".$attr_value['prefix']."".$product_data[$attr_value['mapfrom']]."".$attr_value['suffix']."'";
|
4049 |
$shipping_str .= ":WOOSEA_POSTAL_CODE##$v";
|
4050 |
} elseif ($k == "price"){
|
4051 |
$shipping_str .= ":WOOSEA_PRICE##$attr_value[prefix] $v $attr_value[suffix]";
|
4052 |
+
//$shipping_str .= ":WOOSEA_PRICE##$v";
|
4053 |
} else {
|
4054 |
// UNKNOWN, DO NOT ADD
|
4055 |
}
|
4086 |
}
|
4087 |
} else {
|
4088 |
if(strlen($product_data[$attr_value['mapfrom']])){
|
4089 |
+
if(($attr_value['attribute'] == "URL") OR ($attr_value['attribute'] == "g:link") OR ($attr_value['attribute'] == "link") OR ($attr_value['attribute'] == "g:link_template")){
|
4090 |
if(($product_data['product_type'] == "variation") AND (preg_match("/aelia_cs_currency/", $attr_value['suffix']))){
|
4091 |
$attr_value['suffix'] = str_replace("?","&",$attr_value['suffix']);
|
4092 |
$xml_product[$attr_value['attribute']] = "$attr_value[prefix]". $product_data[$attr_value['mapfrom']] ."$attr_value[suffix]";
|
4616 |
return $product_data;
|
4617 |
}
|
4618 |
|
4619 |
+
/**
|
4620 |
+
* Execute project rules
|
4621 |
+
*/
|
4622 |
private function woocommerce_sea_rules( $project_rules2, $product_data ){
|
4623 |
+
$aantal_prods = count($product_data);
|
4624 |
+
if($aantal_prods > 0){
|
4625 |
|
4626 |
+
foreach ($project_rules2 as $pr_key => $pr_array){
|
4627 |
|
4628 |
+
foreach ($product_data as $pd_key => $pd_value){
|
4629 |
|
4630 |
+
// Check is there is a rule on specific attributes
|
4631 |
+
if($pd_key == $pr_array['attribute']){
|
4632 |
|
4633 |
+
// This is because for data manipulation the than attribute is empty
|
4634 |
+
if(!array_key_exists('than_attribute', $pr_array)){
|
4635 |
+
$pr_array['than_attribute'] = $pd_key;
|
4636 |
+
}
|
4637 |
|
4638 |
// Check if a rule has been set for Google categories
|
4639 |
if (!empty($product_data['categories']) AND ($pr_array['than_attribute'] == "google_category") AND ($product_data[$pr_array['attribute']] == $pr_array['criteria'])){
|
4640 |
+
|
4641 |
+
$pr_array['than_attribute'] = "categories";
|
4642 |
$category_id = explode("-", $pr_array['newvalue']);
|
4643 |
$pr_array['newvalue'] = $category_id[0];
|
4644 |
+
$product_data['categories'] = $pr_array['newvalue'];
|
4645 |
+
}
|
4646 |
|
4647 |
+
// Make sure that rules on numerics are on true numerics
|
4648 |
+
if (!is_array($pd_value) AND (!preg_match('/[A-Za-z]/', $pd_value))){
|
4649 |
+
$pd_value = strtr($pd_value, ',', '.');
|
4650 |
+
}
|
4651 |
|
4652 |
|
4653 |
+
// Make sure the price or sale price is numeric
|
4654 |
+
if(($pr_array['attribute'] == "sale_price") OR ($pr_array['attribute'] == "price")){
|
4655 |
+
settype($pd_value, "double");
|
4656 |
+
}
|
4657 |
|
4658 |
+
if (((is_numeric($pd_value)) AND ($pr_array['than_attribute'] != "shipping"))){
|
4659 |
|
4660 |
+
// Rules for numeric values
|
4661 |
+
switch ($pr_array['condition']) {
|
4662 |
+
case($pr_array['condition'] = "contains"):
|
4663 |
+
if ((preg_match('/'.$pr_array['criteria'].'/', $pd_value))){
|
4664 |
+
$product_data[$pr_array['than_attribute']] = str_replace($pr_array['criteria'], $pr_array['newvalue'], $pd_value);
|
4665 |
+
}
|
4666 |
+
break;
|
4667 |
+
case($pr_array['condition'] = "containsnot"):
|
4668 |
+
if ((!preg_match('/'.$pr_array['criteria'].'/', $pd_value))){
|
4669 |
+
$product_data[$pr_array['than_attribute']] = $pr_array['newvalue'];
|
4670 |
+
}
|
4671 |
+
break;
|
4672 |
+
case($pr_array['condition'] = "="):
|
4673 |
+
if (($pd_value == $pr_array['criteria'])){
|
4674 |
+
$product_data[$pr_array['than_attribute']] = $pr_array['newvalue'];
|
4675 |
+
}
|
4676 |
+
break;
|
4677 |
+
case($pr_array['condition'] = "!="):
|
4678 |
+
if (($pd_value != $pr_array['criteria'])){
|
4679 |
+
$product_data[$pr_array['than_attribute']] = $pr_array['newvalue'];
|
4680 |
+
}
|
4681 |
+
break;
|
4682 |
+
case($pr_array['condition'] = ">"):
|
4683 |
+
if (($pd_value > $pr_array['criteria'])){
|
4684 |
+
$product_data[$pr_array['than_attribute']] = $pr_array['newvalue'];
|
4685 |
+
}
|
4686 |
+
break;
|
4687 |
+
case($pr_array['condition'] = ">="):
|
4688 |
+
if (($pd_value >= $pr_array['criteria'])){
|
4689 |
+
$product_data[$pr_array['than_attribute']] = $pr_array['newvalue'];
|
4690 |
+
}
|
4691 |
+
break;
|
4692 |
+
case($pr_array['condition'] = "<"):
|
4693 |
+
if (($pd_value < $pr_array['criteria'])){
|
4694 |
+
$product_data[$pr_array['than_attribute']] = $pr_array['newvalue'];
|
4695 |
+
}
|
4696 |
+
break;
|
4697 |
+
case($pr_array['condition'] = "=<"):
|
4698 |
+
if (($pd_value <= $pr_array['criteria'])){
|
4699 |
+
$product_data[$pr_array['than_attribute']] = $pr_array['newvalue'];
|
4700 |
+
}
|
4701 |
+
break;
|
4702 |
+
case($pr_array['condition'] = "empty"):
|
4703 |
+
if(empty($product_data[$pr_array['attribute']])){
|
4704 |
+
if ((strlen($pd_value) < 1)){
|
4705 |
+
$product_data[$pr_array['than_attribute']] = $pr_array['newvalue'];
|
4706 |
+
} else {
|
4707 |
+
$product_data[$pr_array['attribute']] = $product_data[$pr_array['than_attribute']];
|
4708 |
+
}
|
4709 |
+
}
|
4710 |
+
break;
|
4711 |
+
case($pr_array['condition'] = "multiply"):
|
4712 |
+
$pr_array['criteria'] = strtr($pr_array['criteria'], ',', '.');
|
4713 |
+
$convert_back = "false";
|
4714 |
+
$pos = strpos($pd_value, ',');
|
4715 |
+
if($pos !== false){
|
4716 |
+
$convert_back = "true";
|
4717 |
+
}
|
4718 |
+
$pd_value = strtr($pd_value, ',', '.');
|
4719 |
+
$newvalue = $pd_value*$pr_array['criteria'];
|
4720 |
+
$newvalue = round($newvalue, 2);
|
4721 |
+
if($convert_back == "true"){
|
4722 |
+
$newvalue = strtr($newvalue, '.',',');
|
4723 |
+
}
|
4724 |
+
$product_data[$pr_array['attribute']] = $newvalue;
|
4725 |
+
break;
|
4726 |
+
case($pr_array['condition'] = "divide"):
|
4727 |
+
$newvalue = ($pd_value / $pr_array['criteria']);
|
4728 |
+
$newvalue = round($newvalue, 2);
|
4729 |
+
$newvalue = strtr($newvalue, '.',',');
|
4730 |
+
$product_data[$pr_array['attribute']] = $newvalue;
|
4731 |
+
break;
|
4732 |
+
case($pr_array['condition'] = "plus"):
|
4733 |
+
$newvalue = ($pd_value + $pr_array['criteria']);
|
4734 |
+
$product_data[$pr_array['attribute']] = $newvalue;
|
4735 |
+
break;
|
4736 |
+
case($pr_array['condition'] = "minus"):
|
4737 |
+
$newvalue = ($pd_value - $pr_array['criteria']);
|
4738 |
+
$product_data[$pr_array['attribute']] = $newvalue;
|
4739 |
+
break;
|
4740 |
+
case($pr_array['condition'] = "findreplace"):
|
4741 |
+
if (strpos($pd_value, $pr_array['criteria']) !== false){
|
4742 |
// Make sure that a new value has been set
|
4743 |
+
if(!empty($pr_array['newvalue'])){
|
4744 |
+
// Find and replace only work on same attribute field, otherwise create a contains rule
|
4745 |
if($pr_array['attribute'] == $pr_array['than_attribute']){
|
4746 |
$newvalue = str_replace($pr_array['criteria'],$pr_array['newvalue'], $pd_value);
|
4747 |
$product_data[$pr_array['than_attribute']] = ucfirst($newvalue);
|
4748 |
}
|
4749 |
+
}
|
4750 |
+
}
|
4751 |
+
break;
|
4752 |
+
default:
|
4753 |
+
break;
|
4754 |
+
}
|
4755 |
+
} elseif (is_array($pd_value)) {
|
4756 |
+
|
4757 |
+
// For now only shipping details are in an array
|
4758 |
+
foreach ($pd_value as $k => $v){
|
4759 |
+
if(is_array($v)){
|
4760 |
+
foreach ($v as $kk => $vv){
|
4761 |
+
// Only shipping detail rule can be on price for now
|
4762 |
+
if($kk == "price"){
|
4763 |
+
switch ($pr_array['condition']) {
|
4764 |
+
case($pr_array['condition'] = "contains"):
|
4765 |
+
if ((preg_match('/'.$pr_array['criteria'].'/', $vv))){
|
4766 |
+
$pd_value[$k]['price'] = str_replace($pr_array['criteria'], $pr_array['newvalue'], $vv);
|
4767 |
+
$product_data[$pr_array['than_attribute']] = $pd_value;
|
4768 |
+
}
|
4769 |
+
break;
|
4770 |
+
case($pr_array['condition'] = "containsnot"):
|
4771 |
+
if ((!preg_match('/'.$pr_array['criteria'].'/', $vv))){
|
4772 |
+
$pd_value[$k]['price'] = $pr_array['newvalue'];
|
4773 |
+
$product_data[$pr_array['than_attribute']] = $pd_value;
|
4774 |
+
}
|
4775 |
+
break;
|
4776 |
+
case($pr_array['condition'] = "="):
|
4777 |
+
if (($vv == $pr_array['criteria'])){
|
4778 |
+
$pd_value[$k]['price'] = $pr_array['newvalue'];
|
4779 |
+
$product_data[$pr_array['than_attribute']] = $pd_value;
|
4780 |
+
}
|
4781 |
+
break;
|
4782 |
+
case($pr_array['condition'] = "!="):
|
4783 |
+
if (($vv != $pr_array['criteria'])){
|
4784 |
+
$pd_value[$k]['price'] = $pr_array['newvalue'];
|
4785 |
+
$product_data[$pr_array['than_attribute']] = $pd_value;
|
4786 |
+
}
|
4787 |
+
break;
|
4788 |
+
case($pr_array['condition'] = ">"):
|
4789 |
+
if (($vv > $pr_array['criteria'])){
|
4790 |
+
$pd_value[$k]['price'] = $pr_array['newvalue'];
|
4791 |
+
$product_data[$pr_array['than_attribute']] = $pd_value;
|
4792 |
+
}
|
4793 |
+
break;
|
4794 |
+
case($pr_array['condition'] = ">="):
|
4795 |
+
if (($vv >= $pr_array['criteria'])){
|
4796 |
+
$pd_value[$k]['price'] = $pr_array['newvalue'];
|
4797 |
+
$product_data[$pr_array['than_attribute']] = $pd_value;
|
4798 |
+
}
|
4799 |
+
break;
|
4800 |
+
case($pr_array['condition'] = "<"):
|
4801 |
+
if (($vv < $pr_array['criteria'])){
|
4802 |
+
$pd_value[$k]['price'] = $pr_array['newvalue'];
|
4803 |
+
$product_data[$pr_array['than_attribute']] = $pd_value;
|
4804 |
+
}
|
4805 |
+
break;
|
4806 |
+
case($pr_array['condition'] = "=<"):
|
4807 |
+
if (($vv <= $pr_array['criteria'])){
|
4808 |
+
$pd_value[$k]['price'] = $pr_array['newvalue'];
|
4809 |
+
$product_data[$pr_array['than_attribute']] = $pd_value;
|
4810 |
+
}
|
4811 |
+
break;
|
4812 |
+
case($pr_array['condition'] = "empty"):
|
4813 |
+
if ((strlen($vv) < 1)){
|
4814 |
+
$pd_value[$k]['price'] = $pr_array['newvalue'];
|
4815 |
+
$product_data[$pr_array['than_attribute']] = $pd_value;
|
4816 |
+
}
|
4817 |
+
break;
|
4818 |
+
case($pr_array['condition'] = "multiply"):
|
4819 |
+
// Only shipping array
|
4820 |
+
if(is_array($pd_value)){
|
4821 |
+
$pr_array['criteria'] = strtr($pr_array['criteria'], ',', '.');
|
4822 |
+
foreach ($pd_value as $ship_a_key => $shipping_arr){
|
4823 |
+
foreach($shipping_arr as $ship_key => $ship_value){
|
4824 |
+
if($ship_key == "price"){
|
4825 |
+
$ship_pieces = explode(" ", $ship_value);
|
4826 |
+
$pd_value = strtr($ship_pieces[1], ',', '.');
|
4827 |
+
$newvalue = $pd_value*$pr_array['criteria'];
|
4828 |
+
$newvalue = round($newvalue, 2);
|
4829 |
+
$newvalue = strtr($newvalue, '.',',');
|
4830 |
+
$newvalue = $ship_pieces[0]." ".$newvalue;
|
4831 |
+
$product_data[$pr_array['than_attribute']][$ship_a_key]['price'] = $newvalue;
|
4832 |
+
}
|
4833 |
+
}
|
4834 |
+
}
|
4835 |
+
}
|
4836 |
+
break;
|
4837 |
+
default:
|
4838 |
+
break;
|
4839 |
+
}
|
4840 |
+
}
|
4841 |
+
}
|
4842 |
+
} else {
|
4843 |
+
// Rules on product tags
|
4844 |
+
foreach ($pd_value as $k => $v){
|
4845 |
+
|
4846 |
+
// Rules for string values
|
4847 |
+
if (!array_key_exists('cs', $pr_array)){
|
4848 |
+
$v = strtolower($v);
|
4849 |
+
$pr_array['criteria'] = strtolower($pr_array['criteria']);
|
4850 |
+
}
|
4851 |
+
|
4852 |
+
switch ($pr_array['condition']) {
|
4853 |
+
case($pr_array['condition'] = "contains"):
|
4854 |
+
if ((preg_match('/'.$pr_array['criteria'].'/', $v))){
|
4855 |
+
$product_data[$pr_array['than_attribute']] = $pr_array['newvalue'];
|
4856 |
+
}
|
4857 |
+
break;
|
4858 |
+
case($pr_array['condition'] = "containsnot"):
|
4859 |
+
if ((!preg_match('/'.$pr_array['criteria'].'/', $v))){
|
4860 |
+
$product_data[$pr_array['than_attribute']] = $pr_array['newvalue'];
|
4861 |
+
}
|
4862 |
+
break;
|
4863 |
+
case($pr_array['condition'] = "="):
|
4864 |
+
if (($v == $pr_array['criteria'])){
|
4865 |
+
$product_data[$pr_array['than_attribute']] = $pr_array['newvalue'];
|
4866 |
+
}
|
4867 |
+
break;
|
4868 |
+
case($pr_array['condition'] = "!="):
|
4869 |
+
if (($v != $pr_array['criteria'])){
|
4870 |
+
$product_data[$pr_array['than_attribute']] = $pr_array['newvalue'];
|
4871 |
+
}
|
4872 |
+
break;
|
4873 |
+
case($pr_array['condition'] = ">"):
|
4874 |
+
if (($v > $pr_array['criteria'])){
|
4875 |
+
$product_data[$pr_array['than_attribute']] = $pr_array['newvalue'];
|
4876 |
+
}
|
4877 |
+
break;
|
4878 |
+
case($pr_array['condition'] = ">="):
|
4879 |
+
if (($v >= $pr_array['criteria'])){
|
4880 |
+
$product_data[$pr_array['than_attribute']] = $pr_array['newvalue'];
|
4881 |
+
}
|
4882 |
+
break;
|
4883 |
+
case($pr_array['condition'] = "<"):
|
4884 |
+
if (($v < $pr_array['criteria'])){
|
4885 |
+
$product_data[$pr_array['than_attribute']] = $pr_array['newvalue'];
|
4886 |
+
}
|
4887 |
+
break;
|
4888 |
+
case($pr_array['condition'] = "=<"):
|
4889 |
+
if (($v <= $pr_array['criteria'])){
|
4890 |
+
$product_data[$pr_array['than_attribute']] = $pr_array['newvalue'];
|
4891 |
+
}
|
4892 |
+
break;
|
4893 |
+
case($pr_array['condition'] = "empty"):
|
4894 |
+
if ((strlen($v) < 1)){
|
4895 |
+
$product_data[$pr_array['than_attribute']] = $pr_array['newvalue'];
|
4896 |
+
}
|
4897 |
+
break;
|
4898 |
+
case($pr_array['condition'] = "multiply"):
|
4899 |
+
// Only shipping array
|
4900 |
+
if(is_array($v)){
|
4901 |
+
$pr_array['criteria'] = strtr($pr_array['criteria'], ',', '.');
|
4902 |
+
foreach ($v as $ship_a_key => $shipping_arr){
|
4903 |
+
foreach($shipping_arr as $ship_key => $ship_value){
|
4904 |
+
if($ship_key == "price"){
|
4905 |
+
$ship_pieces = explode(" ", $ship_value);
|
4906 |
+
$pd_value = strtr($ship_pieces[1], ',', '.');
|
4907 |
+
$newvalue = $pd_value*$pr_array['criteria'];
|
4908 |
+
$newvalue = round($newvalue, 2);
|
4909 |
+
$newvalue = strtr($newvalue, '.',',');
|
4910 |
+
$newvalue = $ship_pieces[0]." ".$newvalue;
|
4911 |
+
$product_data[$pr_array['than_attribute']][$ship_a_key]['price'] = $newvalue;
|
4912 |
+
}
|
4913 |
+
}
|
4914 |
+
}
|
4915 |
+
}
|
4916 |
+
break;
|
4917 |
+
default:
|
4918 |
+
break;
|
4919 |
+
}
|
4920 |
+
}
|
4921 |
+
}
|
4922 |
+
}
|
4923 |
+
} else {
|
4924 |
+
// Rules for string values
|
4925 |
+
if (!array_key_exists('cs', $pr_array)){
|
4926 |
+
if($pr_array['attribute'] != "image"){
|
4927 |
+
$pd_value = strtolower($pd_value);
|
4928 |
+
$pr_array['criteria'] = strtolower($pr_array['criteria']);
|
4929 |
+
}
|
4930 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4931 |
|
4932 |
+
switch ($pr_array['condition']) {
|
4933 |
+
case($pr_array['condition'] = "contains"):
|
4934 |
+
if ((preg_match('/'.$pr_array['criteria'].'/', $pd_value))){
|
4935 |
+
// Specifically for shipping price rules
|
4936 |
+
if(!empty($product_data[$pr_array['than_attribute']])){
|
4937 |
+
if(is_array($product_data[$pr_array['than_attribute']])){
|
4938 |
+
$arr_size = (count($product_data[$pr_array['than_attribute']])-1);
|
4939 |
+
for ($x = 0; $x <= $arr_size; $x++) {
|
4940 |
+
$product_data[$pr_array['than_attribute']][$x]['price'] = $pr_array['newvalue'];
|
4941 |
+
}
|
4942 |
+
} else {
|
4943 |
+
$product_data[$pr_array['than_attribute']] = $pr_array['newvalue'];
|
4944 |
+
}
|
4945 |
+
} else {
|
4946 |
+
// This attribute value is empty for this product
|
4947 |
+
$product_data[$pr_array['than_attribute']] = $pr_array['newvalue'];
|
4948 |
+
}
|
4949 |
+
}
|
4950 |
+
break;
|
4951 |
+
case($pr_array['condition'] = "containsnot"):
|
4952 |
+
if ((!preg_match('/'.$pr_array['criteria'].'/', $pd_value))){
|
4953 |
+
// Specifically for shipping price rules
|
4954 |
+
if(is_array($product_data[$pr_array['than_attribute']])){
|
4955 |
+
$arr_size = (count($product_data[$pr_array['than_attribute']])-1);
|
4956 |
+
for ($x = 0; $x <= $arr_size; $x++) {
|
4957 |
+
$product_data[$pr_array['than_attribute']][$x]['price'] = $pr_array['newvalue'];
|
4958 |
+
}
|
4959 |
+
} else {
|
4960 |
+
$product_data[$pr_array['than_attribute']] = $pr_array['newvalue'];
|
4961 |
+
}
|
4962 |
+
}
|
4963 |
+
break;
|
4964 |
+
case($pr_array['condition'] = "="):
|
4965 |
+
if (($pr_array['criteria'] == "$pd_value")){
|
4966 |
+
// Specifically for shipping price rules
|
4967 |
+
if(is_array($product_data[$pr_array['than_attribute']])){
|
4968 |
+
$arr_size = (count($product_data[$pr_array['than_attribute']])-1);
|
4969 |
+
for ($x = 0; $x <= $arr_size; $x++) {
|
4970 |
+
$product_data[$pr_array['than_attribute']][$x]['price'] = $pr_array['newvalue'];
|
4971 |
+
}
|
4972 |
+
} else {
|
4973 |
+
$product_data[$pr_array['than_attribute']] = $pr_array['newvalue'];
|
4974 |
+
}
|
4975 |
+
}
|
4976 |
+
$ship = $product_data['shipping'];
|
4977 |
+
break;
|
4978 |
+
case($pr_array['condition'] = "!="):
|
4979 |
+
if (($pr_array['criteria'] != "$pd_value")){
|
4980 |
+
// Specifically for shipping price rules
|
4981 |
+
if(is_array($product_data[$pr_array['than_attribute']])){
|
4982 |
+
$arr_size = (count($product_data[$pr_array['than_attribute']])-1);
|
4983 |
+
for ($x = 0; $x <= $arr_size; $x++) {
|
4984 |
+
$product_data[$pr_array['than_attribute']][$x]['price'] = $pr_array['newvalue'];
|
4985 |
+
}
|
4986 |
+
} else {
|
4987 |
+
$product_data[$pr_array['than_attribute']] = $pr_array['newvalue'];
|
4988 |
+
}
|
4989 |
+
}
|
4990 |
+
break;
|
4991 |
+
case($pr_array['condition'] = ">"):
|
4992 |
+
// Use a lexical order on relational string operators
|
4993 |
+
if (($pd_value > $pr_array['criteria'])){
|
4994 |
+
// Specifically for shipping price rules
|
4995 |
+
if(is_array($product_data[$pr_array['than_attribute']])){
|
4996 |
+
$arr_size = (count($product_data[$pr_array['than_attribute']])-1);
|
4997 |
+
for ($x = 0; $x <= $arr_size; $x++) {
|
4998 |
+
$product_data[$pr_array['than_attribute']][$x]['price'] = $pr_array['newvalue'];
|
4999 |
+
}
|
5000 |
+
} else {
|
5001 |
+
$product_data[$pr_array['than_attribute']] = $pr_array['newvalue'];
|
5002 |
+
}
|
5003 |
+
}
|
5004 |
+
break;
|
5005 |
+
case($pr_array['condition'] = ">="):
|
5006 |
+
// Use a lexical order on relational string operators
|
5007 |
+
if (($pd_value >= $pr_array['criteria'])){
|
5008 |
+
// Specifically for shipping price rules
|
5009 |
+
if(is_array($product_data[$pr_array['than_attribute']])){
|
5010 |
+
$arr_size = (count($product_data[$pr_array['than_attribute']])-1);
|
5011 |
+
for ($x = 0; $x <= $arr_size; $x++) {
|
5012 |
+
$product_data[$pr_array['than_attribute']][$x]['price'] = $pr_array['newvalue'];
|
5013 |
+
}
|
5014 |
+
} else {
|
5015 |
+
$product_data[$pr_array['than_attribute']] = $pr_array['newvalue'];
|
5016 |
+
}
|
5017 |
+
}
|
5018 |
+
break;
|
5019 |
+
case($pr_array['condition'] = "<"):
|
5020 |
+
// Use a lexical order on relational string operators
|
5021 |
+
if (($pd_value < $pr_array['criteria'])){
|
5022 |
+
// Specifically for shipping price rules
|
5023 |
+
if(isset($product_data[$pr_array['than_attribute']]) AND (is_array($product_data[$pr_array['than_attribute']]))){
|
5024 |
+
$arr_size = (count($product_data[$pr_array['than_attribute']])-1);
|
5025 |
+
for ($x = 0; $x <= $arr_size; $x++) {
|
5026 |
+
$product_data[$pr_array['than_attribute']][$x]['price'] = $pr_array['newvalue'];
|
5027 |
+
}
|
5028 |
+
} else {
|
5029 |
+
$product_data[$pr_array['than_attribute']] = $pr_array['newvalue'];
|
5030 |
+
}
|
5031 |
+
}
|
5032 |
+
break;
|
5033 |
+
case($pr_array['condition'] = "=<"):
|
5034 |
+
// Use a lexical order on relational string operators
|
5035 |
+
if (($pd_value <= $pr_array['criteria'])){
|
5036 |
+
// Specifically for shipping price rules
|
5037 |
+
if(is_array($product_data[$pr_array['than_attribute']])){
|
5038 |
+
$arr_size = (count($product_data[$pr_array['than_attribute']])-1);
|
5039 |
+
for ($x = 0; $x <= $arr_size; $x++) {
|
5040 |
+
$product_data[$pr_array['than_attribute']][$x]['price'] = $pr_array['newvalue'];
|
5041 |
+
}
|
5042 |
+
} else {
|
5043 |
+
$product_data[$pr_array['than_attribute']] = $pr_array['newvalue'];
|
5044 |
+
}
|
5045 |
+
}
|
5046 |
+
break;
|
5047 |
+
|
5048 |
+
case($pr_array['condition'] = "empty"):
|
5049 |
+
if(empty($product_data[$pr_array['attribute']])){
|
5050 |
+
if(empty($product_data[$pr_array['than_attribute']])){
|
5051 |
+
$product_data[$pr_array['than_attribute']] = $pr_array['newvalue'];
|
5052 |
+
} else {
|
5053 |
+
$product_data[$pr_array['attribute']] = $product_data[$pr_array['than_attribute']];
|
5054 |
+
}
|
5055 |
+
}
|
5056 |
+
break;
|
5057 |
+
case($pr_array['condition'] = "replace"):
|
5058 |
+
$product_data[$pr_array['than_attribute']] = str_replace($pr_array['criteria'], $pr_array['newvalue'], $product_data[$pr_array['than_attribute']]);
|
5059 |
+
break;
|
5060 |
case($pr_array['condition'] = "findreplace"):
|
5061 |
if (strpos($pd_value, $pr_array['criteria']) !== false){
|
5062 |
+
// Make sure that a new value has been set
|
5063 |
+
if(!empty($pr_array['newvalue'])){
|
5064 |
+
// Find and replace only work on same attribute field, otherwise create a contains rule
|
5065 |
if($pr_array['attribute'] == $pr_array['than_attribute']){
|
5066 |
+
$newvalue = str_replace($pr_array['criteria'],$pr_array['newvalue'], $pd_value);
|
5067 |
+
//$product_data[$pr_array['than_attribute']] = ucfirst($newvalue);
|
5068 |
+
$product_data[$pr_array['than_attribute']] = $newvalue;
|
5069 |
+
}
|
5070 |
+
}
|
5071 |
+
}
|
5072 |
break;
|
5073 |
+
default:
|
5074 |
+
break;
|
5075 |
+
}
|
5076 |
+
}
|
5077 |
+
} else {
|
5078 |
+
// When a rule has been set on an attribute that is not in product_data
|
5079 |
+
// Add the newvalue to product_data
|
5080 |
+
if (!array_key_exists($pr_array['attribute'], $product_data)){
|
5081 |
+
if(!empty($pr_array['newvalue'])){
|
5082 |
+
$product_data[$pr_array['than_attribute']] = $pr_array['newvalue'];
|
5083 |
+
} else {
|
5084 |
+
if(array_key_exists($pr_array['than_attribute'], $product_data)){
|
5085 |
+
$product_data[$pr_array['attribute']] = $product_data[$pr_array['than_attribute']];
|
5086 |
+
}
|
5087 |
+
}
|
5088 |
+
}
|
5089 |
+
}
|
5090 |
+
}
|
5091 |
+
}
|
5092 |
+
}
|
5093 |
+
return $product_data;
|
5094 |
+
}
|
5095 |
|
5096 |
/**
|
5097 |
* Function to exclude products based on individual product exclusions
|
5114 |
}
|
5115 |
}
|
5116 |
|
5117 |
+
|
5118 |
+
/**
|
5119 |
+
* Execute project filters (include / exclude)
|
5120 |
+
*/
|
5121 |
private function woocommerce_sea_filters( $project_rules, $product_data ){
|
5122 |
+
$allowed = 1;
|
5123 |
|
5124 |
+
// Check if product was already excluded from the feed
|
5125 |
+
$product_excluded = ucfirst( get_post_meta( $product_data['id'], '_woosea_exclude_product', true ) );
|
5126 |
|
5127 |
+
if( $product_excluded == "Yes"){
|
5128 |
+
$allowed = 0;
|
5129 |
+
}
|
5130 |
|
5131 |
+
foreach ($project_rules as $pr_key => $pr_array){
|
5132 |
|
5133 |
+
if($pr_array['attribute'] == "categories"){
|
5134 |
+
$pr_array['attribute'] = "raw_categories";
|
5135 |
+
}
|
5136 |
|
5137 |
+
//if(array_key_exists($pr_array['attribute'], $product_data)){
|
5138 |
|
5139 |
+
if(!array_key_exists($pr_array['attribute'], $product_data)) {
|
5140 |
+
$product_data[$pr_array['attribute']] = ""; // Sets an empty postmeta value in place of a missing one.
|
5141 |
+
}
|
5142 |
|
5143 |
+
foreach ($product_data as $pd_key => $pd_value){
|
5144 |
+
// Check is there is a rule on specific attributes
|
5145 |
+
if(in_array($pd_key, $pr_array, TRUE)){
|
5146 |
|
5147 |
+
if($pd_key == "price"){
|
5148 |
+
//$pd_value = @number_format($pd_value,2);
|
5149 |
+
$pd_value = wc_format_decimal($pd_value);
|
5150 |
+
}
|
5151 |
|
5152 |
+
if (is_numeric($pd_value)){
|
5153 |
+
$old_value = $pd_value;
|
5154 |
+
if($pd_key == "price"){
|
5155 |
+
$pd_value = @number_format($pd_value,2);
|
5156 |
+
}
|
5157 |
+
|
5158 |
+
// Rules for numeric values
|
5159 |
+
switch ($pr_array['condition']) {
|
5160 |
+
case($pr_array['condition'] = "contains"):
|
5161 |
+
if ((preg_match('/'.$pr_array['criteria'].'/', $pd_value)) && ($pr_array['than'] == "exclude")){
|
5162 |
+
$allowed = 0;
|
5163 |
+
} elseif ((!preg_match('/'.$pr_array['criteria'].'/', $pd_value)) && ($pr_array['than'] == "include_only")){
|
5164 |
+
$allowed = 0;
|
5165 |
+
}
|
5166 |
+
break;
|
5167 |
+
case($pr_array['condition'] = "containsnot"):
|
5168 |
+
if ((!preg_match('/'.$pr_array['criteria'].'/', $pd_value)) && ($pr_array['than'] == "exclude")){
|
5169 |
+
$allowed = 0;
|
5170 |
+
} elseif ((preg_match('/'.$pr_array['criteria'].'/', $pd_value)) && ($pr_array['than'] == "include_only")){
|
5171 |
+
$allowed = 0;
|
5172 |
+
}
|
5173 |
+
break;
|
|
|
|
|
|
|
|
|
|
|
5174 |
case($pr_array['condition'] = "="):
|
5175 |
+
if (($old_value == $pr_array['criteria']) && ($pr_array['than'] == "exclude")){
|
5176 |
+
$allowed = 0;
|
5177 |
+
} elseif (($old_value != $pr_array['criteria']) && ($pr_array['than'] == "include_only")){
|
5178 |
+
$allowed = 0;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5179 |
}
|
5180 |
+
break;
|
5181 |
+
case($pr_array['condition'] = "!="):
|
5182 |
+
if (($old_value == $pr_array['criteria']) && ($pr_array['than'] == "exclude")){
|
5183 |
+
if($allowed <> 0){
|
5184 |
+
$allowed = 1;
|
5185 |
+
}
|
5186 |
+
} elseif (($old_value == $pr_array['criteria']) && ($pr_array['than'] == "include_only")){
|
5187 |
+
$allowed = 0;
|
5188 |
+
}
|
5189 |
+
break;
|
5190 |
+
case($pr_array['condition'] = ">"):
|
5191 |
+
if (($old_value > $pr_array['criteria']) && ($pr_array['than'] == "exclude")){
|
5192 |
+
$allowed = 0;
|
5193 |
+
} elseif (($old_value <= $pr_array['criteria']) && ($pr_array['than'] == "include_only")){
|
5194 |
+
$allowed = 0;
|
5195 |
+
}
|
5196 |
+
break;
|
5197 |
+
case($pr_array['condition'] = ">="):
|
5198 |
+
if (($old_value >= $pr_array['criteria']) && ($pr_array['than'] == "exclude")){
|
5199 |
+
$allowed = 0;
|
5200 |
+
} elseif (($old_value < $pr_array['criteria']) && ($pr_array['than'] == "include_only")){
|
5201 |
+
$allowed = 0;
|
5202 |
+
}
|
5203 |
+
break;
|
5204 |
+
case($pr_array['condition'] = "<"):
|
5205 |
+
if (($old_value < $pr_array['criteria']) && ($pr_array['than'] == "exclude")){
|
5206 |
+
$allowed = 0;
|
5207 |
+
} elseif (($old_value > $pr_array['criteria']) && ($pr_array['than'] == "include_only")){
|
5208 |
+
$allowed = 0;
|
5209 |
+
}
|
5210 |
+
break;
|
5211 |
+
case($pr_array['condition'] = "=<"):
|
5212 |
+
if (($old_value <= $pr_array['criteria']) && ($pr_array['than'] == "exclude")){
|
5213 |
+
$allowed = 0;
|
5214 |
+
} elseif (($old_value > $pr_array['criteria']) && ($pr_array['than'] == "include_only")){
|
5215 |
+
$allowed = 0;
|
5216 |
+
}
|
5217 |
+
break;
|
5218 |
+
case($pr_array['condition'] = "empty"):
|
5219 |
+
if ((strlen($pd_value) < 1) && ($pr_array['than'] == "exclude")){
|
5220 |
+
$allowed = 0;
|
5221 |
+
} elseif ((strlen($pd_value > 0)) && ($pr_array['than'] == "include_only")){
|
5222 |
+
$allowed = 0;
|
5223 |
+
}
|
5224 |
+
break;
|
5225 |
+
default:
|
5226 |
+
break;
|
5227 |
+
}
|
5228 |
+
} elseif (is_array($pd_value)){
|
5229 |
+
// Tis can either be a shipping or product_tag array
|
5230 |
+
if($pr_array['attribute'] == "product_tag"){
|
5231 |
+
$in_tag_array = "not";
|
5232 |
+
|
5233 |
+
foreach($pd_value as $pt_key => $pt_value){
|
5234 |
+
// Rules for string values
|
5235 |
+
if (!array_key_exists('cs', $pr_array)){
|
5236 |
+
$pt_value = strtolower($pt_value);
|
5237 |
+
$pr_array['criteria'] = strtolower($pr_array['criteria']);
|
5238 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5239 |
|
5240 |
+
if(preg_match('/'.$pr_array['criteria'].'/', $pt_value)){
|
5241 |
+
$in_tag_array = "yes";
|
5242 |
+
}
|
5243 |
+
}
|
5244 |
+
|
5245 |
+
if($in_tag_array == "yes"){
|
5246 |
+
//if(in_array($pr_array['criteria'], $pd_value, TRUE)) {
|
5247 |
+
$v = $pr_array['criteria'];
|
5248 |
+
switch ($pr_array['condition']) {
|
5249 |
+
case($pr_array['condition'] = "contains"):
|
5250 |
+
if ((preg_match('/'.$pr_array['criteria'].'/', $v))){
|
5251 |
+
if($pr_array['than'] == "include_only"){
|
5252 |
+
if($allowed <> 0){
|
5253 |
+
$allowed = 1;
|
5254 |
+
}
|
5255 |
+
} else {
|
5256 |
+
$allowed = 0;
|
5257 |
+
}
|
5258 |
+
} else {
|
5259 |
+
$allowed = 0;
|
5260 |
+
}
|
5261 |
+
break;
|
5262 |
+
case($pr_array['condition'] = "containsnot"):
|
5263 |
+
if ((!preg_match('/'.$pr_array['criteria'].'/', $v))){
|
5264 |
+
if($pr_array['than'] == "include_only"){
|
5265 |
+
if($allowed <> 0){
|
5266 |
+
$allowed = 1;
|
5267 |
+
}
|
5268 |
+
} else {
|
5269 |
+
$allowed = 0;
|
5270 |
+
}
|
5271 |
+
} else {
|
5272 |
+
$allowed = 0;
|
5273 |
+
}
|
5274 |
+
break;
|
5275 |
+
case($pr_array['condition'] = "="):
|
5276 |
+
if (($v == $pr_array['criteria'])){
|
5277 |
+
if($pr_array['than'] == "include_only"){
|
5278 |
+
if($allowed <> 0){
|
5279 |
+
$allowed = 1;
|
5280 |
+
}
|
5281 |
+
} else {
|
5282 |
+
$allowed = 0;
|
5283 |
+
}
|
5284 |
+
} else {
|
5285 |
+
$allowed = 0;
|
5286 |
+
}
|
5287 |
+
break;
|
5288 |
+
case($pr_array['condition'] = "!="):
|
5289 |
+
if (($v != $pr_array['criteria'])){
|
5290 |
+
if($pr_array['than'] == "include_only"){
|
5291 |
+
if($allowed <> 0){
|
5292 |
+
$allowed = 1;
|
5293 |
+
}
|
5294 |
+
} else {
|
5295 |
+
$allowed = 0;
|
5296 |
+
}
|
5297 |
+
}
|
5298 |
+
break;
|
5299 |
+
case($pr_array['condition'] = ">"):
|
5300 |
+
if (($v > $pr_array['criteria'])){
|
5301 |
+
if($pr_array['than'] == "include_only"){
|
5302 |
+
if($allowed <> 0){
|
5303 |
+
$allowed = 1;
|
5304 |
+
}
|
5305 |
+
} else {
|
5306 |
+
$allowed = 0;
|
5307 |
+
}
|
5308 |
+
}
|
5309 |
+
break;
|
5310 |
+
case($pr_array['condition'] = ">="):
|
5311 |
+
if (($v >= $pr_array['criteria'])){
|
5312 |
+
if($pr_array['than'] == "include_only"){
|
5313 |
+
if($allowed <> 0){
|
5314 |
+
$allowed = 1;
|
5315 |
+
}
|
5316 |
+
} else {
|
5317 |
+
$allowed = 0;
|
5318 |
+
}
|
5319 |
+
}
|
5320 |
+
break;
|
5321 |
+
case($pr_array['condition'] = "<"):
|
5322 |
+
if (($v < $pr_array['criteria'])){
|
5323 |
+
if($pr_array['than'] == "include_only"){
|
5324 |
+
if($allowed <> 0){
|
5325 |
+
$allowed = 1;
|
5326 |
+
}
|
5327 |
+
} else {
|
5328 |
+
$allowed = 0;
|
5329 |
+
}
|
5330 |
+
}
|
5331 |
+
break;
|
5332 |
+
case($pr_array['condition'] = "=<"):
|
5333 |
+
if (($v <= $pr_array['criteria'])){
|
5334 |
+
if($pr_array['than'] == "include_only"){
|
5335 |
+
if($allowed <> 0){
|
5336 |
+
$allowed = 1;
|
5337 |
+
}
|
5338 |
+
} else {
|
5339 |
+
$allowed = 0;
|
5340 |
+
}
|
5341 |
+
}
|
5342 |
+
break;
|
5343 |
+
case($pr_array['condition'] = "empty"):
|
5344 |
+
if (strlen($v) < 1){
|
5345 |
+
if($pr_array['than'] == "include_only"){
|
5346 |
+
if($allowed <> 0){
|
5347 |
+
$allowed = 1;
|
5348 |
+
}
|
5349 |
+
} else {
|
5350 |
+
if(!empty($pt_value)){
|
5351 |
+
$allowed = 1;
|
5352 |
+
} else {
|
5353 |
+
$allowed = 0;
|
5354 |
+
}
|
5355 |
+
}
|
5356 |
+
}
|
5357 |
+
break;
|
5358 |
+
default:
|
5359 |
+
break;
|
5360 |
+
}
|
5361 |
+
} else {
|
5362 |
+
switch ($pr_array['condition']) {
|
5363 |
+
case($pr_array['condition'] = "contains"):
|
5364 |
+
if($pr_array['than'] == "include_only"){
|
5365 |
+
$allowed = 0;
|
5366 |
+
} else {
|
5367 |
+
if($allowed <> 0){
|
5368 |
+
$allowed = 1;
|
5369 |
+
}
|
5370 |
+
}
|
5371 |
+
break;
|
5372 |
+
case($pr_array['condition'] = "containsnot"):
|
5373 |
+
if($pr_array['than'] == "include_only"){
|
5374 |
+
if($allowed <> 0){
|
5375 |
+
$allowed = 1;
|
5376 |
+
}
|
5377 |
+
} else {
|
5378 |
+
$allowed = 0;
|
5379 |
+
}
|
5380 |
+
break;
|
5381 |
+
case($pr_array['condition'] = "="):
|
5382 |
+
if($pr_array['than'] == "include_only"){
|
5383 |
+
$allowed = 0;
|
5384 |
+
} else {
|
5385 |
+
if($allowed <> 0){
|
5386 |
+
$allowed = 1;
|
5387 |
+
}
|
5388 |
+
}
|
5389 |
+
break;
|
5390 |
+
case($pr_array['condition'] = "!="):
|
5391 |
+
if($pr_array['than'] == "include_only"){
|
5392 |
+
if($allowed <> 0){
|
5393 |
+
$allowed = 1;
|
5394 |
+
}
|
5395 |
+
} else {
|
5396 |
+
$allowed = 0;
|
5397 |
+
}
|
5398 |
+
break;
|
5399 |
+
case($pr_array['condition'] = ">"):
|
5400 |
+
if($pr_array['than'] == "include_only"){
|
5401 |
+
$allowed = 0;
|
5402 |
+
} else {
|
5403 |
+
$allowed = 0;
|
5404 |
+
}
|
5405 |
+
break;
|
5406 |
+
case($pr_array['condition'] = ">="):
|
5407 |
+
if($pr_array['than'] == "include_only"){
|
5408 |
+
$allowed = 0;
|
5409 |
+
} else {
|
5410 |
+
$allowed = 0;
|
5411 |
+
}
|
5412 |
+
break;
|
5413 |
+
case($pr_array['condition'] = "<"):
|
5414 |
+
if($pr_array['than'] == "include_only"){
|
5415 |
+
$allowed = 0;
|
5416 |
+
} else {
|
5417 |
+
$allowed = 0;
|
5418 |
+
}
|
5419 |
+
break;
|
5420 |
+
case($pr_array['condition'] = "=<"):
|
5421 |
+
if($pr_array['than'] == "include_only"){
|
5422 |
+
$allowed = 0;
|
5423 |
+
} else {
|
5424 |
+
$allowed = 0;
|
5425 |
+
}
|
5426 |
+
break;
|
5427 |
+
case($pr_array['condition'] = "empty"):
|
5428 |
+
if($pr_array['than'] == "include_only"){
|
5429 |
+
if($allowed <> 0){
|
5430 |
+
$allowed = 1;
|
5431 |
+
}
|
5432 |
+
} else {
|
5433 |
+
$allowed = 0;
|
5434 |
+
}
|
5435 |
+
break;
|
5436 |
+
default:
|
5437 |
+
break;
|
5438 |
+
}
|
5439 |
+
}
|
5440 |
+
} else {
|
5441 |
+
// For now only shipping details are in an array
|
5442 |
+
foreach ($pd_value as $k => $v){
|
5443 |
+
foreach ($v as $kk => $vv){
|
5444 |
+
// Only shipping detail rule can be on price for now
|
5445 |
+
if($kk == "price"){
|
5446 |
+
switch ($pr_array['condition']) {
|
5447 |
+
case($pr_array['condition'] = "contains"):
|
5448 |
+
if ((preg_match('/'.$pr_array['criteria'].'/', $vv))){
|
5449 |
+
$allowed = 0;
|
5450 |
+
}
|
5451 |
+
break;
|
5452 |
+
case($pr_array['condition'] = "containsnot"):
|
5453 |
+
if ((!preg_match('/'.$pr_array['criteria'].'/', $vv))){
|
5454 |
+
$allowed = 0;
|
5455 |
+
}
|
5456 |
+
break;
|
5457 |
+
case($pr_array['condition'] = "="):
|
5458 |
+
if (($vv == $pr_array['criteria'])){
|
5459 |
+
$allowed = 0;
|
5460 |
+
}
|
5461 |
+
break;
|
5462 |
+
case($pr_array['condition'] = "!="):
|
5463 |
+
if (($vv != $pr_array['criteria'])){
|
5464 |
+
$allowed = 0;
|
5465 |
+
}
|
5466 |
+
break;
|
5467 |
+
case($pr_array['condition'] = ">"):
|
5468 |
+
if (($vv > $pr_array['criteria'])){
|
5469 |
+
$allowed = 0;
|
5470 |
+
}
|
5471 |
+
break;
|
5472 |
+
case($pr_array['condition'] = ">="):
|
5473 |
+
if (($vv >= $pr_array['criteria'])){
|
5474 |
+
$allowed = 0;
|
5475 |
+
}
|
5476 |
+
break;
|
5477 |
+
case($pr_array['condition'] = "<"):
|
5478 |
+
if (($vv < $pr_array['criteria'])){
|
5479 |
+
$allowed = 0;
|
5480 |
+
}
|
5481 |
+
break;
|
5482 |
+
case($pr_array['condition'] = "=<"):
|
5483 |
+
if (($vv <= $pr_array['criteria'])){
|
5484 |
+
$allowed = 0;
|
5485 |
+
}
|
5486 |
+
break;
|
5487 |
+
case($pr_array['condition'] = "empty"):
|
5488 |
+
if (strlen($vv) < 1){
|
5489 |
+
$allowed = 0;
|
5490 |
+
}
|
5491 |
+
break;
|
5492 |
+
default:
|
5493 |
+
break;
|
5494 |
+
}
|
5495 |
+
}
|
5496 |
+
}
|
5497 |
+
}
|
5498 |
+
}
|
5499 |
+
} else {
|
5500 |
+
// Filters for string values
|
5501 |
+
// If case-sensitve is off than lowercase both the criteria and attribute value
|
5502 |
+
if (array_key_exists('cs', $pr_array)){
|
5503 |
+
if ($pr_array['cs'] != "on"){
|
5504 |
+
$pd_value = strtolower($pd_value);
|
5505 |
+
$pr_array['criteria'] = strtolower($pr_array['criteria']);
|
5506 |
+
}
|
5507 |
+
}
|
5508 |
+
$pos = strpos($pd_value, '&');
|
5509 |
+
$pos_slash = strpos($pr_array['criteria'], '\\');
|
5510 |
+
if($pos !== false){
|
5511 |
+
$pd_value = str_replace("&","&",$pd_value);
|
5512 |
+
}
|
5513 |
+
if($pos_slash !== false){
|
5514 |
+
$pr_array['criteria'] = str_replace("\\","",$pr_array['criteria']);
|
5515 |
+
}
|
5516 |
+
|
5517 |
+
switch ($pr_array['condition']) {
|
5518 |
+
case($pr_array['condition'] = "contains"):
|
5519 |
+
if ((preg_match('/'.$pr_array['criteria'].'/', $pd_value)) && ($pr_array['than'] == "exclude")){
|
5520 |
+
$allowed = 0;
|
5521 |
+
} elseif ((!preg_match('/'.$pr_array['criteria'].'/', $pd_value)) && ($pr_array['than'] == "include_only")){
|
5522 |
+
$allowed = 0;
|
5523 |
+
} elseif ((preg_match('/'.$pr_array['criteria'].'/', $pd_value)) && ($pr_array['than'] == "include_only")){
|
5524 |
+
if($allowed <> 0){
|
5525 |
+
$allowed = 1;
|
5526 |
+
}
|
5527 |
+
}
|
5528 |
+
break;
|
5529 |
+
case($pr_array['condition'] = "containsnot"):
|
5530 |
+
if ((!preg_match('/'.$pr_array['criteria'].'/', $pd_value)) && ($pr_array['than'] == "exclude")){
|
5531 |
+
$allowed = 0;
|
5532 |
+
} elseif ((preg_match('/'.$pr_array['criteria'].'/', $pd_value)) && ($pr_array['than'] == "include_only")){
|
5533 |
+
$allowed = 0;
|
5534 |
+
}
|
5535 |
+
break;
|
5536 |
case($pr_array['condition'] = "="):
|
5537 |
+
if (($pr_array['criteria'] == "$pd_value") AND ($pr_array['than'] == "exclude")){
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5538 |
$allowed = 0;
|
5539 |
+
} elseif (($pr_array['criteria'] != "$pd_value") && ($pr_array['than'] == "include_only")){
|
5540 |
+
$found = strpos($pd_value,$pr_array['criteria']);
|
5541 |
+
if ($found !== false) {
|
5542 |
+
//for category mapping check if its an array
|
5543 |
+
if($pr_array['attribute'] == "raw_categories"){
|
5544 |
+
$raw_cats_arr = explode("||",$pd_value);
|
5545 |
+
if(is_array($raw_cats_arr)){
|
5546 |
+
if(in_array($pr_array['criteria'],$raw_cats_arr, TRUE)){
|
5547 |
+
if($allowed <> 0){
|
5548 |
+
$allowed = 1;
|
5549 |
+
}
|
5550 |
+
} else {
|
5551 |
+
$allowed = 0;
|
5552 |
+
}
|
5553 |
+
}
|
5554 |
+
} else {
|
5555 |
+
if($allowed <> 0){
|
5556 |
+
$allowed = 1;
|
5557 |
+
}
|
5558 |
+
}
|
5559 |
+
} else {
|
5560 |
+
$allowed = 0;
|
5561 |
+
}
|
5562 |
+
} elseif (($pr_array['criteria'] == "$pd_value") && ($pr_array['than'] == "include_only")){
|
5563 |
+
if($allowed <> 0){
|
5564 |
+
$allowed = 1;
|
5565 |
+
}
|
5566 |
+
} elseif ((preg_match('/'.$pr_array['criteria'].'/', $pd_value)) && ($pr_array['than'] == "exclude")){
|
5567 |
+
// $allowed = 0;
|
5568 |
+
} elseif ((preg_match('/'.$pr_array['criteria'].'/', $pd_value)) && ($pr_array['than'] == "include_only")){
|
5569 |
+
$allowed = 1;
|
5570 |
+
} else {
|
5571 |
+
// $allowed = 1; // Change made on February 24th 2021
|
5572 |
+
}
|
5573 |
+
break;
|
5574 |
+
case($pr_array['condition'] = "!="):
|
5575 |
+
if (($pr_array['criteria'] == "$pd_value") && ($pr_array['than'] == "exclude")){
|
5576 |
+
if($allowed <> 0){
|
5577 |
+
$allowed = 1;
|
5578 |
+
}
|
5579 |
+
} elseif (($pr_array['criteria'] == "$pd_value") && ($pr_array['than'] == "include_only")){
|
5580 |
+
$allowed = 0;
|
5581 |
+
} elseif (($pr_array['criteria'] != "$pd_value") && ($pr_array['than'] == "exclude")){
|
5582 |
+
$allowed = 0;
|
5583 |
+
}
|
5584 |
+
break;
|
5585 |
+
case($pr_array['condition'] = ">"):
|
5586 |
+
// Use a lexical order on relational string operators
|
5587 |
+
if (($pd_value > $pr_array['criteria']) && ($pr_array['than'] == "exclude")){
|
5588 |
+
$allowed = 0;
|
5589 |
+
} elseif (($pd_value < $pr_array['criteria']) && ($pr_array['than'] == "include_only")){
|
5590 |
+
$allowed = 0;
|
5591 |
+
}
|
5592 |
+
break;
|
5593 |
+
case($pr_array['condition'] = ">="):
|
5594 |
+
// Use a lexical order on relational string operators
|
5595 |
+
if (($pd_value >= $pr_array['criteria']) && ($pr_array['than'] == "exclude")){
|
5596 |
+
$allowed = 0;
|
5597 |
+
} elseif (($pd_value < $pr_array['criteria']) && ($pr_array['than'] == "include_only")){
|
5598 |
+
$allowed = 0;
|
5599 |
+
}
|
5600 |
+
break;
|
5601 |
+
case($pr_array['condition'] = "<"):
|
5602 |
+
// Use a lexical order on relational string operators
|
5603 |
+
if (($pd_value < $pr_array['criteria']) && ($pr_array['than'] == "exclude")){
|
5604 |
+
$allowed = 0;
|
5605 |
+
} elseif (($pd_value > $pr_array['criteria']) && ($pr_array['than'] == "include_only")){
|
5606 |
+
$allowed = 0;
|
5607 |
+
}
|
5608 |
+
break;
|
5609 |
+
case($pr_array['condition'] = "=<"):
|
5610 |
+
// Use a lexical order on relational string operators
|
5611 |
+
if (($pd_value <= $pr_array['criteria']) && ($pr_array['than'] == "exclude")){
|
5612 |
+
$allowed = 0;
|
5613 |
+
} elseif (($pd_value > $pr_array['criteria']) && ($pr_array['than'] == "include_only")){
|
5614 |
+
$allowed = 0;
|
5615 |
+
}
|
5616 |
+
break;
|
5617 |
+
case($pr_array['condition'] = "empty"):
|
5618 |
if ((strlen($pd_value) < 1) && ($pr_array['than'] == "exclude")){
|
5619 |
+
$allowed = 0;
|
5620 |
+
} elseif ((strlen($pd_value) > 0) && ($pr_array['than'] == "exclude")){
|
5621 |
+
if($allowed <> 0){
|
5622 |
+
$allowed = 1;
|
5623 |
+
}
|
5624 |
+
} elseif ((strlen($pd_value) > 0) && ($pr_array['than'] == "include_only")){
|
5625 |
+
$allowed = 0;
|
5626 |
+
}
|
5627 |
+
break;
|
5628 |
+
default:
|
5629 |
+
break;
|
5630 |
+
}
|
5631 |
+
}
|
5632 |
+
}
|
5633 |
+
}
|
5634 |
+
}
|
5635 |
|
5636 |
+
if ($allowed < 1){
|
5637 |
+
$product_data = array();
|
5638 |
+
$product_data = null;
|
5639 |
+
} else {
|
5640 |
+
return $product_data;
|
5641 |
+
}
|
5642 |
+
}
|
5643 |
}
|
js/woosea_autocomplete.js
CHANGED
@@ -5695,8 +5695,10 @@ jQuery(document).ready(function($) {
|
|
5695 |
jQuery(".js-autosuggest").on('click',function(){
|
5696 |
var className = $(this).attr("class").split(' ')[3];
|
5697 |
var rowCount = className.split("_")[1]
|
5698 |
-
|
5699 |
-
|
|
|
|
|
5700 |
input: '.js-autosuggest',
|
5701 |
source: google_taxonomy,
|
5702 |
hint: true,
|
@@ -5708,7 +5710,6 @@ jQuery(document).ready(function($) {
|
|
5708 |
});
|
5709 |
jQuery( ".autocomplete_" + rowCount ).focus();
|
5710 |
|
5711 |
-
|
5712 |
jQuery(this).on('change', function(){ // on change of state
|
5713 |
|
5714 |
var minimum = 1;
|
@@ -5741,7 +5742,6 @@ jQuery(document).ready(function($) {
|
|
5741 |
}
|
5742 |
} else {
|
5743 |
var map_to_category = "";
|
5744 |
-
|
5745 |
jQuery.ajax({
|
5746 |
method: "POST",
|
5747 |
url: ajaxurl,
|
5695 |
jQuery(".js-autosuggest").on('click',function(){
|
5696 |
var className = $(this).attr("class").split(' ')[3];
|
5697 |
var rowCount = className.split("_")[1]
|
5698 |
+
|
5699 |
+
//$('#the-basics-11603 .autocomplete_11603').typeahead({
|
5700 |
+
jQuery("." + className).typeahead({
|
5701 |
+
//jQuery(".autocomplete_" + rowCount ).typeahead({
|
5702 |
input: '.js-autosuggest',
|
5703 |
source: google_taxonomy,
|
5704 |
hint: true,
|
5710 |
});
|
5711 |
jQuery( ".autocomplete_" + rowCount ).focus();
|
5712 |
|
|
|
5713 |
jQuery(this).on('change', function(){ // on change of state
|
5714 |
|
5715 |
var minimum = 1;
|
5742 |
}
|
5743 |
} else {
|
5744 |
var map_to_category = "";
|
|
|
5745 |
jQuery.ajax({
|
5746 |
method: "POST",
|
5747 |
url: ajaxurl,
|
js/woosea_key.js
CHANGED
@@ -27,7 +27,7 @@ jQuery(document).ready(function($) {
|
|
27 |
var license_key = $('#license-key').val();
|
28 |
|
29 |
jQuery.ajax({
|
30 |
-
url: 'https://www.adtribes.io/check/license.php?key=' + license_key + '&email=' + license_email + '&domain=' + root_domain + '&version=9.3
|
31 |
jsonp: 'callback',
|
32 |
dataType: 'jsonp',
|
33 |
type: 'GET',
|
27 |
var license_key = $('#license-key').val();
|
28 |
|
29 |
jQuery.ajax({
|
30 |
+
url: 'https://www.adtribes.io/check/license.php?key=' + license_key + '&email=' + license_email + '&domain=' + root_domain + '&version=9.9.3',
|
31 |
jsonp: 'callback',
|
32 |
dataType: 'jsonp',
|
33 |
type: 'GET',
|
js/woosea_manage.js
CHANGED
@@ -256,6 +256,26 @@ jQuery(function($) {
|
|
256 |
}
|
257 |
})
|
258 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
259 |
// Check if user would like to enable debug logging
|
260 |
$('#add_woosea_logging').on('change', function(){ // on change of state
|
261 |
if(this.checked){
|
256 |
}
|
257 |
})
|
258 |
|
259 |
+
// Check if user would like the plugin to remove the free shipping class
|
260 |
+
$('#remove_free_shipping').on('change', function(){ // on change of state
|
261 |
+
if(this.checked){
|
262 |
+
|
263 |
+
// Checkbox is on
|
264 |
+
jQuery.ajax({
|
265 |
+
method: "POST",
|
266 |
+
url: ajaxurl,
|
267 |
+
data: { 'action': 'woosea_remove_free_shipping', 'status': "on" }
|
268 |
+
})
|
269 |
+
} else {
|
270 |
+
// Checkbox is off
|
271 |
+
jQuery.ajax({
|
272 |
+
method: "POST",
|
273 |
+
url: ajaxurl,
|
274 |
+
data: { 'action': 'woosea_remove_free_shipping', 'status': "off" }
|
275 |
+
})
|
276 |
+
}
|
277 |
+
})
|
278 |
+
|
279 |
// Check if user would like to enable debug logging
|
280 |
$('#add_woosea_logging').on('change', function(){ // on change of state
|
281 |
if(this.checked){
|
pages/admin/woosea-generate-feed-step-1.php
CHANGED
@@ -101,7 +101,7 @@ function woosea_hierarchical_term_tree($category, $prev_mapped){
|
|
101 |
|
102 |
$r .= "<tr class=\"catmapping\">";
|
103 |
$r .= "<td><input type=\"hidden\" name=\"mappings[$x][rowCount]\" value=\"$x\"><input type=\"hidden\" name=\"mappings[$x][categoryId]\" value=\"$woo_category_id\"><input type=\"hidden\" name=\"mappings[$x][criteria]\" class=\"input-field-large\" id=\"$woo_category_id\" value=\"$woo_category\">$woo_category ($sub_category->count)</td>";
|
104 |
-
$r .= "<td><input type=\"search\" name=\"mappings[$x][map_to_category]\" class=\"$mapped_active_class js-typeahead js-autosuggest autocomplete_$x\" value=\"$mapped_category\"></td>";
|
105 |
if(($yo == $nr_categories) AND ($nr_subcats == 0)){
|
106 |
$r .= "<td><span class=\"copy_category_$x\" style=\"display: inline-block;\" title=\"Copy this category to all others\"></span></td>";
|
107 |
} else {
|
@@ -115,7 +115,7 @@ function woosea_hierarchical_term_tree($category, $prev_mapped){
|
|
115 |
} else {
|
116 |
$r .= "<tr class=\"catmapping\">";
|
117 |
$r .= "<td><input type=\"hidden\" name=\"mappings[$x][rowCount]\" value=\"$x\"><input type=\"hidden\" name=\"mappings[$x][categoryId]\" value=\"$woo_category_id\"><input type=\"hidden\" name=\"mappings[$x][criteria]\" class=\"input-field-large\" id=\"$woo_category_id\" value=\"$woo_category\">-- $woo_category ($sub_category->count)</td>";
|
118 |
-
$r .= "<td><input type=\"search\" name=\"mappings[$x][map_to_category]\" class=\"$mapped_active_class js-typeahead js-autosuggest autocomplete_$x mother_$sub_category->parent\" value=\"$mapped_category\"></td>";
|
119 |
$r .= "<td><span class=\"copy_category_$x\" style=\"display: inline-block;\" title=\"Copy this category to all others\"></span></td>";
|
120 |
$r .= "</tr>";
|
121 |
}
|
@@ -227,7 +227,7 @@ function woosea_hierarchical_term_tree($category, $prev_mapped){
|
|
227 |
|
228 |
<table class="woo-product-feed-pro-table">
|
229 |
<tr>
|
230 |
-
<td><strong><?php _e( 'We
|
231 |
</tr>
|
232 |
<tr>
|
233 |
<td>
|
101 |
|
102 |
$r .= "<tr class=\"catmapping\">";
|
103 |
$r .= "<td><input type=\"hidden\" name=\"mappings[$x][rowCount]\" value=\"$x\"><input type=\"hidden\" name=\"mappings[$x][categoryId]\" value=\"$woo_category_id\"><input type=\"hidden\" name=\"mappings[$x][criteria]\" class=\"input-field-large\" id=\"$woo_category_id\" value=\"$woo_category\">$woo_category ($sub_category->count)</td>";
|
104 |
+
$r .= "<td><div id=\"the-basics-$x\"><input type=\"search\" name=\"mappings[$x][map_to_category]\" class=\"$mapped_active_class js-typeahead js-autosuggest autocomplete_$x\" value=\"$mapped_category\"></div></td>";
|
105 |
if(($yo == $nr_categories) AND ($nr_subcats == 0)){
|
106 |
$r .= "<td><span class=\"copy_category_$x\" style=\"display: inline-block;\" title=\"Copy this category to all others\"></span></td>";
|
107 |
} else {
|
115 |
} else {
|
116 |
$r .= "<tr class=\"catmapping\">";
|
117 |
$r .= "<td><input type=\"hidden\" name=\"mappings[$x][rowCount]\" value=\"$x\"><input type=\"hidden\" name=\"mappings[$x][categoryId]\" value=\"$woo_category_id\"><input type=\"hidden\" name=\"mappings[$x][criteria]\" class=\"input-field-large\" id=\"$woo_category_id\" value=\"$woo_category\">-- $woo_category ($sub_category->count)</td>";
|
118 |
+
$r .= "<td><div id=\"the-basics-$x\"><input type=\"search\" name=\"mappings[$x][map_to_category]\" class=\"$mapped_active_class js-typeahead js-autosuggest autocomplete_$x mother_$sub_category->parent\" value=\"$mapped_category\"></div></td>";
|
119 |
$r .= "<td><span class=\"copy_category_$x\" style=\"display: inline-block;\" title=\"Copy this category to all others\"></span></td>";
|
120 |
$r .= "</tr>";
|
121 |
}
|
227 |
|
228 |
<table class="woo-product-feed-pro-table">
|
229 |
<tr>
|
230 |
+
<td><strong><?php _e( 'We have got you covered!','woo-product-feed-pro' );?></strong></td>
|
231 |
</tr>
|
232 |
<tr>
|
233 |
<td>
|
pages/admin/woosea-generate-feed-step-4.php
CHANGED
@@ -77,7 +77,7 @@ if (array_key_exists('project_hash', $_GET)){
|
|
77 |
$criteria = "";
|
78 |
}
|
79 |
?>
|
80 |
-
|
81 |
<td><input type="hidden" name="rules[<?php print "$rule_key";?>][rowCount]" value="<?php print "$rule_key";?>"><input type="checkbox" name="record" class="checkbox-field"></td>
|
82 |
<td><i><?php _e( 'Filter','woo-product-feed-pro' );?></i></td>
|
83 |
<td>
|
@@ -155,7 +155,7 @@ if (array_key_exists('project_hash', $_GET)){
|
|
155 |
</td>
|
156 |
<td>
|
157 |
<div style="display: block;">
|
158 |
-
<input type="text" id="rulevalue" name="rules[<?php print "$rule_key";?>][criteria]" class="input-field-large" value=
|
159 |
</div>
|
160 |
</td>
|
161 |
<td>
|
@@ -314,7 +314,7 @@ if (array_key_exists('project_hash', $_GET)){
|
|
314 |
</td>
|
315 |
<td>
|
316 |
<div style="display: block;">
|
317 |
-
<input type="text" id="rulevalue" name="rules2[<?php print "$rule2_key";?>][criteria]" class="input-field-large" value=
|
318 |
</div>
|
319 |
</td>
|
320 |
<?php
|
77 |
$criteria = "";
|
78 |
}
|
79 |
?>
|
80 |
+
<tr class="rowCount">
|
81 |
<td><input type="hidden" name="rules[<?php print "$rule_key";?>][rowCount]" value="<?php print "$rule_key";?>"><input type="checkbox" name="record" class="checkbox-field"></td>
|
82 |
<td><i><?php _e( 'Filter','woo-product-feed-pro' );?></i></td>
|
83 |
<td>
|
155 |
</td>
|
156 |
<td>
|
157 |
<div style="display: block;">
|
158 |
+
<input type="text" id="rulevalue" name="rules[<?php print "$rule_key";?>][criteria]" class="input-field-large" value='<?php print $criteria;?>'>
|
159 |
</div>
|
160 |
</td>
|
161 |
<td>
|
314 |
</td>
|
315 |
<td>
|
316 |
<div style="display: block;">
|
317 |
+
<input type="text" id="rulevalue" name="rules2[<?php print "$rule2_key";?>][criteria]" class="input-field-large" value='<?php print $criteria;?>'>
|
318 |
</div>
|
319 |
</td>
|
320 |
<?php
|
pages/admin/woosea-manage-feed.php
CHANGED
@@ -67,6 +67,7 @@ if(!empty($license_information)){
|
|
67 |
if (!wp_next_scheduled( 'woosea_cron_hook' ) ) {
|
68 |
$notifications_box = $notifications_obj->get_admin_notifications ( '12', 'false' );
|
69 |
}
|
|
|
70 |
?>
|
71 |
<div class="wrap">
|
72 |
<div class="woo-product-feed-pro-form-style-2">
|
@@ -124,6 +125,18 @@ if (!wp_next_scheduled( 'woosea_cron_hook' ) ) {
|
|
124 |
<?php
|
125 |
}
|
126 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
127 |
?>
|
128 |
|
129 |
<div class="woo-product-feed-pro-form-style-2-heading"><?php _e( 'Manage feeds','woo-product-feed-pro' );?></div>
|
67 |
if (!wp_next_scheduled( 'woosea_cron_hook' ) ) {
|
68 |
$notifications_box = $notifications_obj->get_admin_notifications ( '12', 'false' );
|
69 |
}
|
70 |
+
|
71 |
?>
|
72 |
<div class="wrap">
|
73 |
<div class="woo-product-feed-pro-form-style-2">
|
125 |
<?php
|
126 |
}
|
127 |
}
|
128 |
+
|
129 |
+
|
130 |
+
if ( defined( 'DISABLE_WP_CRON' ) && DISABLE_WP_CRON ) {
|
131 |
+
?>
|
132 |
+
<div class="notice notice-error is-dismissible">
|
133 |
+
<p>
|
134 |
+
<strong><?php _e( 'WARNING: Your WP-Cron is disabled', 'woo-product-feed-pro' );?></strong><br/></br/>
|
135 |
+
We detected that your WP-cron has been disabled in your wp-config.php file. Our plugin heavily depends on the WP-cron being active otherwise it cannot update and generate your product feeds. <a href="https://adtribes.io/help-my-feed-processing-is-stuck/?utm_source=<?php print"$host";?>&utm_medium=manage-feed&utm_campaign=cron-warning&utm_content=notification" target="_blank"><strong>Please enable your WP-cron first</strong></a>.
|
136 |
+
</p>
|
137 |
+
</div>
|
138 |
+
<?php
|
139 |
+
}
|
140 |
?>
|
141 |
|
142 |
<div class="woo-product-feed-pro-form-style-2-heading"><?php _e( 'Manage feeds','woo-product-feed-pro' );?></div>
|
pages/admin/woosea-manage-settings.php
CHANGED
@@ -101,6 +101,20 @@ if(isset($_GET["tab"])) {
|
|
101 |
?>
|
102 |
</span>
|
103 |
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
104 |
|
105 |
<!-- wordpress provides the styling for tabs. -->
|
106 |
<h2 class="nav-tab-wrapper">
|
@@ -290,6 +304,24 @@ if(isset($_GET["tab"])) {
|
|
290 |
</label>
|
291 |
</td>
|
292 |
</tr>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
293 |
<tr>
|
294 |
<td>
|
295 |
<span><?php _e( 'Remove the local pickup shipping zone from feed (Google Shopping / Facebook only)', 'woo-product-feed-pro');?></span>
|
@@ -440,70 +472,89 @@ if(isset($_GET["tab"])) {
|
|
440 |
$external_path_tsv = $external_base . "/woo-product-feed-pro/";
|
441 |
$external_path_logs = $external_base . "/woo-product-feed-pro/";
|
442 |
$test_file = $external_path . "/tesfile.txt";
|
443 |
-
$test_file_xml = $external_path . "
|
444 |
-
$test_file_csv = $external_path . "
|
445 |
-
$test_file_txt = $external_path . "
|
446 |
-
$test_file_tsv = $external_path . "
|
447 |
-
$test_file_logs = $external_path . "
|
448 |
|
449 |
if (is_writable($external_path)) {
|
450 |
-
|
451 |
-
|
452 |
-
|
453 |
-
|
454 |
-
|
455 |
-
|
456 |
-
|
457 |
-
|
458 |
-
|
459 |
-
|
460 |
-
|
461 |
-
|
462 |
-
|
463 |
-
|
464 |
-
|
465 |
-
|
466 |
-
|
467 |
-
|
468 |
-
|
469 |
-
|
470 |
-
|
471 |
-
|
472 |
-
|
473 |
-
|
474 |
-
|
475 |
-
|
476 |
-
|
477 |
-
|
478 |
-
|
479 |
-
|
480 |
-
|
481 |
-
|
482 |
-
|
483 |
-
|
484 |
-
|
485 |
-
|
486 |
-
|
487 |
-
|
488 |
-
|
489 |
-
|
490 |
-
|
491 |
-
|
492 |
-
|
493 |
-
|
494 |
-
|
495 |
-
|
496 |
-
|
497 |
-
|
498 |
-
|
499 |
-
|
500 |
-
|
501 |
-
|
502 |
-
|
503 |
-
|
504 |
-
|
505 |
-
|
506 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
507 |
} else {
|
508 |
$directory_perm = "False";
|
509 |
}
|
@@ -515,6 +566,10 @@ if(isset($_GET["tab"])) {
|
|
515 |
$cron_enabled = "True";
|
516 |
}
|
517 |
|
|
|
|
|
|
|
|
|
518 |
print "<table class=\"woo-product-feed-pro-table\">";
|
519 |
print "<tr><td><strong>System check</strong></td><td><strong>Status</strong></td></tr>";
|
520 |
print "<tr><td>WP-Cron enabled</td><td>$cron_enabled</td></tr>";
|
101 |
?>
|
102 |
</span>
|
103 |
</div>
|
104 |
+
|
105 |
+
<?php
|
106 |
+
if ( defined( 'DISABLE_WP_CRON' ) && DISABLE_WP_CRON ) {
|
107 |
+
?>
|
108 |
+
<div class="notice notice-error is-dismissible">
|
109 |
+
<p>
|
110 |
+
<strong><?php _e( 'WARNING: Your WP-Cron is disabled', 'woo-product-feed-pro' );?></strong><br/></br/>
|
111 |
+
We detected that your WP-cron has been disabled in your wp-config.php file. Our plugin heavily depends on the WP-cron being active for it to be able to update and generate your product feeds. More information on the inner workings of our plugin and instructions on how to enable your WP-Cron can be found here: <a href="https://adtribes.io/help-my-feed-processing-is-stuck/?utm_source=<?php print"$host";?>&utm_medium=manage-feed&utm_campaign=cron-warning&utm_content=notification" target="_blank"><strong>My feed won't update or is stuck processing</strong></a>.
|
112 |
+
</p>
|
113 |
+
</div>
|
114 |
+
<?php
|
115 |
+
}
|
116 |
+
?>
|
117 |
+
|
118 |
|
119 |
<!-- wordpress provides the styling for tabs. -->
|
120 |
<h2 class="nav-tab-wrapper">
|
304 |
</label>
|
305 |
</td>
|
306 |
</tr>
|
307 |
+
<tr>
|
308 |
+
<td>
|
309 |
+
<span><?php _e( 'Remove the free shipping zone from feed (Google Shopping / Facebook only)', 'woo-product-feed-pro');?></span>
|
310 |
+
</td>
|
311 |
+
<td>
|
312 |
+
<label class="woo-product-feed-pro-switch">
|
313 |
+
<?php
|
314 |
+
$remove_free_shipping = get_option ('remove_free_shipping');
|
315 |
+
if($remove_free_shipping == "yes"){
|
316 |
+
print "<input type=\"checkbox\" id=\"remove_free_shipping\" name=\"remove_free_shipping\" class=\"checkbox-field\" checked>";
|
317 |
+
} else {
|
318 |
+
print "<input type=\"checkbox\" id=\"remove_free_shipping\" name=\"remove_free_shipping\" class=\"checkbox-field\">";
|
319 |
+
}
|
320 |
+
?>
|
321 |
+
<div class="woo-product-feed-pro-slider round"></div>
|
322 |
+
</label>
|
323 |
+
</td>
|
324 |
+
</tr>
|
325 |
<tr>
|
326 |
<td>
|
327 |
<span><?php _e( 'Remove the local pickup shipping zone from feed (Google Shopping / Facebook only)', 'woo-product-feed-pro');?></span>
|
472 |
$external_path_tsv = $external_base . "/woo-product-feed-pro/";
|
473 |
$external_path_logs = $external_base . "/woo-product-feed-pro/";
|
474 |
$test_file = $external_path . "/tesfile.txt";
|
475 |
+
$test_file_xml = $external_path . "xml/tesfile.txt";
|
476 |
+
$test_file_csv = $external_path . "csv/tesfile.txt";
|
477 |
+
$test_file_txt = $external_path . "txt/tesfile.txt";
|
478 |
+
$test_file_tsv = $external_path . "tsv/tesfile.txt";
|
479 |
+
$test_file_logs = $external_path . "logs/tesfile.txt";
|
480 |
|
481 |
if (is_writable($external_path)) {
|
482 |
+
// Normal root category
|
483 |
+
$fp = @fopen($test_file, 'w');
|
484 |
+
@fwrite($fp, 'Cats chase mice');
|
485 |
+
@fclose($fp);
|
486 |
+
if(is_file($test_file)){
|
487 |
+
$directory_perm = "True";
|
488 |
+
}
|
489 |
+
|
490 |
+
// XML subcategory
|
491 |
+
$fp = @fopen($test_file_xml, 'w');
|
492 |
+
if(!is_bool($fp)){
|
493 |
+
@fwrite($fp, 'Cats chase mice');
|
494 |
+
@fclose($fp);
|
495 |
+
if(is_file($test_file_xml)){
|
496 |
+
$directory_perm_xml = "True";
|
497 |
+
} else {
|
498 |
+
$directory_perm_xml = "False";
|
499 |
+
}
|
500 |
+
} else {
|
501 |
+
$directory_perm_xml = "Unknown";
|
502 |
+
}
|
503 |
+
|
504 |
+
// CSV subcategory
|
505 |
+
$fp = @fopen($test_file_csv, 'w');
|
506 |
+
if(!is_bool($fp)){
|
507 |
+
@fwrite($fp, 'Cats chase mice');
|
508 |
+
@fclose($fp);
|
509 |
+
if(is_file($test_file_csv)){
|
510 |
+
$directory_perm_csv = "True";
|
511 |
+
} else {
|
512 |
+
$directory_perm_csv = "False";
|
513 |
+
}
|
514 |
+
} else {
|
515 |
+
$directory_perm_csv = "Unknown";
|
516 |
+
}
|
517 |
+
|
518 |
+
// TXT subcategory
|
519 |
+
$fp = @fopen($test_file_txt, 'w');
|
520 |
+
if(!is_bool($fp)){
|
521 |
+
@fwrite($fp, 'Cats chase mice');
|
522 |
+
@fclose($fp);
|
523 |
+
if(is_file($test_file_txt)){
|
524 |
+
$directory_perm_txt = "True";
|
525 |
+
} else {
|
526 |
+
$directory_perm_txt = "False";
|
527 |
+
}
|
528 |
+
} else {
|
529 |
+
$directory_perm_txt = "Unknown";
|
530 |
+
}
|
531 |
+
// TSV subcategory
|
532 |
+
$fp = @fopen($test_file_tsv, 'w');
|
533 |
+
if(!is_bool($fp)){
|
534 |
+
@fwrite($fp, 'Cats chase mice');
|
535 |
+
@fclose($fp);
|
536 |
+
if(is_file($test_file_tsv)){
|
537 |
+
$directory_perm_tsv = "True";
|
538 |
+
} else {
|
539 |
+
$directory_perm_tsv = "False";
|
540 |
+
}
|
541 |
+
} else {
|
542 |
+
$directory_perm_tsv = "Uknown";
|
543 |
+
}
|
544 |
+
|
545 |
+
// Logs subcategory
|
546 |
+
$fp = @fopen($test_file_logs, 'w');
|
547 |
+
if(!is_bool($fp)){
|
548 |
+
@fwrite($fp, 'Cats chase mice');
|
549 |
+
@fclose($fp);
|
550 |
+
if(is_file($test_file_logs)){
|
551 |
+
$directory_perm_logs = "True";
|
552 |
+
} else {
|
553 |
+
$directory_perm_logs = "False";
|
554 |
+
}
|
555 |
+
} else {
|
556 |
+
$directory_perm_logs = "Unknown";
|
557 |
+
}
|
558 |
} else {
|
559 |
$directory_perm = "False";
|
560 |
}
|
566 |
$cron_enabled = "True";
|
567 |
}
|
568 |
|
569 |
+
if ( defined( 'DISABLE_WP_CRON' ) && DISABLE_WP_CRON ) {
|
570 |
+
$cron_enabled = "<strong>False</strong>";
|
571 |
+
}
|
572 |
+
|
573 |
print "<table class=\"woo-product-feed-pro-table\">";
|
574 |
print "<tr><td><strong>System check</strong></td><td><strong>Status</strong></td></tr>";
|
575 |
print "<tr><td>WP-Cron enabled</td><td>$cron_enabled</td></tr>";
|
readme.txt
CHANGED
@@ -4,15 +4,15 @@ License: GPLv3
|
|
4 |
License URI: http://www.gnu.org/licenses/gpl.html
|
5 |
Tags: Product Feed, Google Shopping, Google Shopping Feed, WooCommerce Product Feed, WooCommerce Product Feed PRO, Bing Shopping, Bing product feed, Bing remarking, Google Merchant Feed, Google DRM Feed, Google Dynamic Remarketing Feed, Facebook feed, Google feed, Bing feed, Facebook Product Feed, Facebook Dynamic remarketing, Data Feed, WooCommerce Feed, XML product feed, CSV product feed, TSV, TXT product feed, comparison shopping engines, comparison shopping websites, vergelijk.nl, vergelijk.be, vertaa.fi, beslist.nl, kieskeurig.nl, bol.com, raketten, pricerunner, pricegrabber, Buy, leGuide, Kelkoo, Twenga, Yandex, Etsy, Dealtime, Shopzilla, Billiger, Google Product Review feed
|
6 |
Requires at least: 4.5
|
7 |
-
Tested up to: 5.
|
8 |
-
Stable tag: 9.3
|
9 |
|
10 |
== Description ==
|
11 |
|
12 |
-
Generate WooCommerce product feeds for all your marketing channels, such as Google Shopping (merchant center), Facebook Remarketing, Bing Ads, Billiger.de, Pricerunner,
|
13 |
|
14 |
= Why choose this plugin? =
|
15 |
-
Simply because this is the most complete plugin offering support for an unlimited number of products and feeds, including features such as category- & field-mapping and advanced, rule-based, filtering and product variables support.
|
16 |
|
17 |
= Our mission =
|
18 |
Offer free and advanced, intuitive, tooling and plugins for website owners and marketers to easily set-up and manage their online marketing campaigns.
|
@@ -61,21 +61,24 @@ This plugin enables you to add and configure Google Analytics UTM tracking-codes
|
|
61 |
= Shipping class support =
|
62 |
This plugin enables you to set the shipping zone (and shipping class) so the right shipping cost end up in your product feed. Our plugin uses all shipping zone settings you have configured in WooCommerce (flat rates, classes and free shipping). Our support also supports US and Australian postal codes and regions.
|
63 |
|
|
|
|
|
|
|
64 |
= WooCommerce Shipping Table Rate (Bolder Elements) support =
|
65 |
Our plugin supports the WooCommerce Shipping Table Rate plugin created by Bolder Elements.
|
66 |
|
67 |
= Product variations / Variables =
|
68 |
This plugin supports product variables so all your variations make it to product feeds as individual products too.
|
69 |
|
70 |
-
= Facebook Pixel
|
71 |
This plugin adds the Facebook pixel code on your websites and makes sure it matches the content of your Facebook catalogue product feed
|
72 |
Our plugin add's the following Facebook pixel events:
|
73 |
* on your product pages, both for simple, variable and variations pages
|
74 |
* on your category pages (ViewCategory event)
|
75 |
* on your search result pages (Search event)
|
76 |
* on your cart page (AddToCart event)
|
77 |
-
* on the
|
78 |
-
* on the thank you page (PurChase event)
|
79 |
|
80 |
= Google Dynamic Remarketing Pixel =
|
81 |
This plugin adds the Google Dynamic Remarketing pixel code on your website.
|
@@ -112,6 +115,8 @@ Our plugin supports Polylang
|
|
112 |
* XML, CSV, TSV and TXT formats;
|
113 |
* Supports WPML (version 4.1 and higher)
|
114 |
* Supports WCML, WooCommerce Multilingual
|
|
|
|
|
115 |
* Intuitive interface;
|
116 |
* Supports product variations / variables;
|
117 |
* Scheduled product feed refreshes: daily, twice-daily or every hour;
|
@@ -134,19 +139,19 @@ Our plugin supports Polylang
|
|
134 |
* Supports WooCommerce Dynamic Pricing & Discounts from RightPress
|
135 |
* Supports the Discount Rules for WooCommerce plugin from FlyCart
|
136 |
* Supports WC Fields Factory
|
|
|
137 |
* Supports Table Rate Shipping for WooCommerce from Bolder Elements
|
138 |
* Supports usage of the All In One SEO pack title and description attributes
|
139 |
|
140 |
Some of the above mentioned feature can only be used by users who upgraded to the Elite version of our plugin
|
141 |
|
142 |
=== Elite paid features ===
|
143 |
-
* WPML support
|
144 |
* Aelia currency switcher support
|
145 |
* Polylang support
|
146 |
* Addition of the extra fields on your product edit pages
|
147 |
* Data manipulation feature
|
148 |
* WooCommerce structured data bug fix
|
149 |
-
* Facebook pixel
|
150 |
|
151 |
=== Channels ===
|
152 |
* Custom feeds
|
@@ -160,6 +165,7 @@ Some of the above mentioned feature can only be used by users who upgraded to th
|
|
160 |
* Google Shopping Actions
|
161 |
* Facebook Dynamic Ad’s / remarketing
|
162 |
* Bing Shopping
|
|
|
163 |
* Pinterest
|
164 |
* <a href="https://businesshelp.snapchat.com/en-US/a/product-catalog-specs" target="_blank">Snapchat</a>
|
165 |
* <a href="https://yandex.com/support/market-tech-requirements/index.html" target="_blank">Yandex</a>
|
@@ -175,6 +181,7 @@ Some of the above mentioned feature can only be used by users who upgraded to th
|
|
175 |
* <a href="https://www.beslist.nl" target="_blank" rel="nofollow">Beslist.nl</a>
|
176 |
* <a href="https://www.beslist.be" target="_blank" rel="nofollow">Beslist.be</a>
|
177 |
* <a href="https://www.fashionchick.nl" target="_blank">Fashionchick.nl</a>
|
|
|
178 |
* Bol.com
|
179 |
* Stylight
|
180 |
* Incurvy
|
@@ -229,6 +236,7 @@ Some of the above mentioned feature can only be used by users who upgraded to th
|
|
229 |
* <a href="https://www.guenstiger.de" target="_blank" rel="nofollow">Guenstiger.de</a>
|
230 |
* Hood.de
|
231 |
* Ladenzeile.de
|
|
|
232 |
* Livingo.de
|
233 |
* Medizinfuchs.de
|
234 |
* <a href="https://www.moebel.de" target="_blank">Moebel.de</a>
|
@@ -249,13 +257,13 @@ Some of the above mentioned feature can only be used by users who upgraded to th
|
|
249 |
== Installation ==
|
250 |
|
251 |
=== From within Wordpress ===
|
252 |
-
1. Visit
|
253 |
-
1. Search for
|
254 |
-
1. Activate
|
255 |
|
256 |
=== Manually ===
|
257 |
1. Upload the woo-product-feed-pro folder to your /wp-content/plugins/ directory;
|
258 |
-
1. Activate
|
259 |
|
260 |
== Frequently Asked Questions ==
|
261 |
|
@@ -322,6 +330,182 @@ Questions left or unanswered? Please do not hesitate to contact us at support@ad
|
|
322 |
|
323 |
=== Changelog ===
|
324 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
325 |
= 9.3.7 (2021-01-12) =
|
326 |
* Added the Bestprice.gr template
|
327 |
|
@@ -2988,6 +3172,182 @@ Questions left or unanswered? Please do not hesitate to contact us at support@ad
|
|
2988 |
|
2989 |
== Upgrade Notice ==
|
2990 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2991 |
= 9.3.7 =
|
2992 |
Added the Bestprice.gr template
|
2993 |
|
4 |
License URI: http://www.gnu.org/licenses/gpl.html
|
5 |
Tags: Product Feed, Google Shopping, Google Shopping Feed, WooCommerce Product Feed, WooCommerce Product Feed PRO, Bing Shopping, Bing product feed, Bing remarking, Google Merchant Feed, Google DRM Feed, Google Dynamic Remarketing Feed, Facebook feed, Google feed, Bing feed, Facebook Product Feed, Facebook Dynamic remarketing, Data Feed, WooCommerce Feed, XML product feed, CSV product feed, TSV, TXT product feed, comparison shopping engines, comparison shopping websites, vergelijk.nl, vergelijk.be, vertaa.fi, beslist.nl, kieskeurig.nl, bol.com, raketten, pricerunner, pricegrabber, Buy, leGuide, Kelkoo, Twenga, Yandex, Etsy, Dealtime, Shopzilla, Billiger, Google Product Review feed
|
6 |
Requires at least: 4.5
|
7 |
+
Tested up to: 5.7
|
8 |
+
Stable tag: 9.9.3
|
9 |
|
10 |
== Description ==
|
11 |
|
12 |
+
Generate WooCommerce product feeds for all your marketing channels, such as Google Shopping (merchant center), Facebook Remarketing, Bing Ads, Billiger.de, Pricerunner, Skroutz and many more. Next to custom feeds there are over 100 pre-defined templates included for marketplaces, comparison shopping engines and search engines. This plugin provides high-quality product feed for Google Shopping and many many more.
|
13 |
|
14 |
= Why choose this plugin? =
|
15 |
+
Simply because this is the most complete plugin offering support for an unlimited number of products and feeds, including features such as category- & field-mapping and advanced, rule-based, filtering and product variables support. Next to creating product feeds this plugin also add's the Facebook pixel and Google Dynamic Remarketing pixel to your website and makes sure they are aligned with your feeds.
|
16 |
|
17 |
= Our mission =
|
18 |
Offer free and advanced, intuitive, tooling and plugins for website owners and marketers to easily set-up and manage their online marketing campaigns.
|
61 |
= Shipping class support =
|
62 |
This plugin enables you to set the shipping zone (and shipping class) so the right shipping cost end up in your product feed. Our plugin uses all shipping zone settings you have configured in WooCommerce (flat rates, classes and free shipping). Our support also supports US and Australian postal codes and regions.
|
63 |
|
64 |
+
= WooCommerce Shipping Table Rate (official WooCommerce) support =
|
65 |
+
Our plugin supports the official shipping table rate plugin of WooCommerce
|
66 |
+
|
67 |
= WooCommerce Shipping Table Rate (Bolder Elements) support =
|
68 |
Our plugin supports the WooCommerce Shipping Table Rate plugin created by Bolder Elements.
|
69 |
|
70 |
= Product variations / Variables =
|
71 |
This plugin supports product variables so all your variations make it to product feeds as individual products too.
|
72 |
|
73 |
+
= Facebook Pixel =
|
74 |
This plugin adds the Facebook pixel code on your websites and makes sure it matches the content of your Facebook catalogue product feed
|
75 |
Our plugin add's the following Facebook pixel events:
|
76 |
* on your product pages, both for simple, variable and variations pages
|
77 |
* on your category pages (ViewCategory event)
|
78 |
* on your search result pages (Search event)
|
79 |
* on your cart page (AddToCart event)
|
80 |
+
* on the checkout page (initiateCheckout event)
|
81 |
+
* on the order thank you page (PurChase event)
|
82 |
|
83 |
= Google Dynamic Remarketing Pixel =
|
84 |
This plugin adds the Google Dynamic Remarketing pixel code on your website.
|
115 |
* XML, CSV, TSV and TXT formats;
|
116 |
* Supports WPML (version 4.1 and higher)
|
117 |
* Supports WCML, WooCommerce Multilingual
|
118 |
+
* Supports Aelia Currency Switcher
|
119 |
+
* Supports Polylang
|
120 |
* Intuitive interface;
|
121 |
* Supports product variations / variables;
|
122 |
* Scheduled product feed refreshes: daily, twice-daily or every hour;
|
139 |
* Supports WooCommerce Dynamic Pricing & Discounts from RightPress
|
140 |
* Supports the Discount Rules for WooCommerce plugin from FlyCart
|
141 |
* Supports WC Fields Factory
|
142 |
+
* Supports Table Rate Shipping for WooCommerce from WooCommerce
|
143 |
* Supports Table Rate Shipping for WooCommerce from Bolder Elements
|
144 |
* Supports usage of the All In One SEO pack title and description attributes
|
145 |
|
146 |
Some of the above mentioned feature can only be used by users who upgraded to the Elite version of our plugin
|
147 |
|
148 |
=== Elite paid features ===
|
149 |
+
* WPML / WCML support
|
150 |
* Aelia currency switcher support
|
151 |
* Polylang support
|
152 |
* Addition of the extra fields on your product edit pages
|
153 |
* Data manipulation feature
|
154 |
* WooCommerce structured data bug fix
|
|
|
155 |
|
156 |
=== Channels ===
|
157 |
* Custom feeds
|
165 |
* Google Shopping Actions
|
166 |
* Facebook Dynamic Ad’s / remarketing
|
167 |
* Bing Shopping
|
168 |
+
* Bing Shopping Promotions
|
169 |
* Pinterest
|
170 |
* <a href="https://businesshelp.snapchat.com/en-US/a/product-catalog-specs" target="_blank">Snapchat</a>
|
171 |
* <a href="https://yandex.com/support/market-tech-requirements/index.html" target="_blank">Yandex</a>
|
181 |
* <a href="https://www.beslist.nl" target="_blank" rel="nofollow">Beslist.nl</a>
|
182 |
* <a href="https://www.beslist.be" target="_blank" rel="nofollow">Beslist.be</a>
|
183 |
* <a href="https://www.fashionchick.nl" target="_blank">Fashionchick.nl</a>
|
184 |
+
* <a href="https://www.boetiek.nl" target="_blank">Boetiek.nl</a>
|
185 |
* Bol.com
|
186 |
* Stylight
|
187 |
* Incurvy
|
236 |
* <a href="https://www.guenstiger.de" target="_blank" rel="nofollow">Guenstiger.de</a>
|
237 |
* Hood.de
|
238 |
* Ladenzeile.de
|
239 |
+
* <a href="https://connect.idealo.de/import/en/csv/#_attributes_documentation" target="_blank">Idealo.de</a>
|
240 |
* Livingo.de
|
241 |
* Medizinfuchs.de
|
242 |
* <a href="https://www.moebel.de" target="_blank">Moebel.de</a>
|
257 |
== Installation ==
|
258 |
|
259 |
=== From within Wordpress ===
|
260 |
+
1. Visit Plugins > Add New;
|
261 |
+
1. Search for Product Feed PRO for WooCommerce;
|
262 |
+
1. Activate Product Feed PRO for WooCommerce from your plugins page.
|
263 |
|
264 |
=== Manually ===
|
265 |
1. Upload the woo-product-feed-pro folder to your /wp-content/plugins/ directory;
|
266 |
+
1. Activate Product Feed PRO for WooCommerce from your plugins page.
|
267 |
|
268 |
== Frequently Asked Questions ==
|
269 |
|
330 |
|
331 |
=== Changelog ===
|
332 |
|
333 |
+
= 9.9.3 (2021-03-29) =
|
334 |
+
* Removed currency from shipping costs of Heureka feeds
|
335 |
+
|
336 |
+
= 9.9.2 (2021-03-27) =
|
337 |
+
* Fixed an issue for the shipping table rate plugin, when multiple where configured only one price made it to the feed. Issue is fixed.
|
338 |
+
|
339 |
+
= 9.9.1 (2021-03-25) =
|
340 |
+
* Added support for the official WooCommerce Table Rate plugin (by WooCommerce)
|
341 |
+
|
342 |
+
= 9.9.0 (2021-03-24) =
|
343 |
+
* Added product type field mapping to the Facebook template
|
344 |
+
* Change the default field mapping for title to "product name parent product" so grouping on variable products works better in Facebook
|
345 |
+
|
346 |
+
= 9.8.9 (2021-03-22) =
|
347 |
+
* Fixed a Table Rate shipping issue that overwrote shipping costs for Flat Rates.
|
348 |
+
|
349 |
+
= 9.8.8 (2021-03-22) =
|
350 |
+
* Fixed an UI issue with filters and rules, apostrofs were not showing. Issue is fixed now.
|
351 |
+
|
352 |
+
= 9.8.7 (2021-03-22) =
|
353 |
+
* Bundle and composite products should not get an item group ID in the feed, removed it from the feed.
|
354 |
+
|
355 |
+
= 9.8.6 (2021-03-19) =
|
356 |
+
* Fixed an issue where shipping tax was not added for WooCommerce table rate shipping costs
|
357 |
+
|
358 |
+
= 9.8.5 (2021-03-18) =
|
359 |
+
* Affiliate / external product types got an item_group_id of 0 in the feed whereas it should be empty. Issue is fixed now.
|
360 |
+
|
361 |
+
= 9.8.4 (2021-03-18) =
|
362 |
+
* Added the Idealo.de Germany template, including their Direktkauf fields
|
363 |
+
|
364 |
+
= 9.8.3 (2021-03-15) =
|
365 |
+
* Solved a rounding issue for sale prices including VAT
|
366 |
+
|
367 |
+
= 9.8.2 (2021-03-15) =
|
368 |
+
* Fixed a Facebook Purchase event where only the value of the last product was added to the Facebook pixel instead of the value of all products bought
|
369 |
+
|
370 |
+
= 9.8.1 (2021-03-13) =
|
371 |
+
* The plugin systems check showed a critical error for users that are on PHP 8. Issue is fixed now.
|
372 |
+
|
373 |
+
= 9.8.0 (2021-03-11) =
|
374 |
+
* Only reviews that are approved make it to the review feeds, disapproved reviews are removed
|
375 |
+
|
376 |
+
= 9.7.9 (2021-03-10) =
|
377 |
+
* Checked for compatibility with WordPress 5.7
|
378 |
+
* Checked for compatibility with WooCommerce 5.1
|
379 |
+
|
380 |
+
= 9.7.8 (2021-03-10) =
|
381 |
+
* Added a boolean check on the review feed creation
|
382 |
+
|
383 |
+
= 9.7.7 (2021-03-09) =
|
384 |
+
* Removed the woosea_add_cart.js from the source as it was an empty file
|
385 |
+
|
386 |
+
= 9.7.6 (2021-03-08) =
|
387 |
+
* Fixed an issue with the Facebook Purchase event that did not track the order value correct
|
388 |
+
|
389 |
+
= 9.7.5 (2021-03-07) =
|
390 |
+
* Another recode of the lowest price variation feature
|
391 |
+
|
392 |
+
= 9.7.4 (2021-03-05) =
|
393 |
+
* Added Bing Shopping Promotions template
|
394 |
+
|
395 |
+
= 9.7.3 (2021-03-04) =
|
396 |
+
* Added a new attribute "Stock Status WooCommerce"
|
397 |
+
* Fixed another quote issue with the Facebook pixel
|
398 |
+
|
399 |
+
= 9.7.2 (2021-03-03) =
|
400 |
+
* Fixed an issue with the Facebook pixel. Product names that had an apostrophe in them were not measured.
|
401 |
+
|
402 |
+
= 9.7.1 (2021-03-03) =
|
403 |
+
* Added another fix to take into account prices excluding VAT for filtering out all but the minimum priced variation
|
404 |
+
|
405 |
+
= 9.7.0 (2021-03-03) =
|
406 |
+
* Fixed a bug where lowest priced variations where not making it to feeds
|
407 |
+
|
408 |
+
= 9.6.9 (2021-02-28) =
|
409 |
+
* Added product name parent hyphen attribute
|
410 |
+
|
411 |
+
= 9.6.8 (2021-02-25) =
|
412 |
+
* Added Google category taxonomy mapping for Snapchat feeds
|
413 |
+
|
414 |
+
= 9.6.7 (2021-02-25) =
|
415 |
+
* When suffixes and prefixes are used for the Heureka URL fields spaces are removed
|
416 |
+
|
417 |
+
= 9.6.6 (2021-02-24) =
|
418 |
+
* Added support for PHP 8.0
|
419 |
+
|
420 |
+
= 9.6.5 (2021-02-24) =
|
421 |
+
* Do not add Skroutz variable products to the feed when they do not have item_group_id's
|
422 |
+
|
423 |
+
= 9.6.4 (2021-02-24) =
|
424 |
+
* Fixed an issue with rules and filters
|
425 |
+
* When a rule was set on an image link, no longer lowercase the image link
|
426 |
+
|
427 |
+
= 9.6.3 (2021-02-23) =
|
428 |
+
* Fixed a bug, the Facebook pixel is now also measuing revenue for multiple items in Cart, InititiateCheckout and Purchase events
|
429 |
+
* Reverted back some changes in filters and rules
|
430 |
+
|
431 |
+
= 9.6.2 (2021-02-22) =
|
432 |
+
* For Skroutz feed removing sizes from feeds when they are out-of-stock
|
433 |
+
|
434 |
+
= 9.6.1 (2021-02-19) =
|
435 |
+
* Added attribute that will allow you to uppercase every first character of a string in product names
|
436 |
+
|
437 |
+
= 9.6.0 (2021-02-19) =
|
438 |
+
* Changed g:itemid to g:id for the Google Local Product Feeds
|
439 |
+
|
440 |
+
= 9.5.9 (2021-02-19) =
|
441 |
+
* Added a fail-safe when users do not select a marketing channel which let to PHP notices in logs
|
442 |
+
|
443 |
+
= 9.5.8 (2021-02-18) =
|
444 |
+
* Added shipping class name attribute
|
445 |
+
|
446 |
+
= 9.5.7 (2021-02-17) =
|
447 |
+
* Dynamic attribute values are now also added to parent variable products for Skroutz feeds
|
448 |
+
|
449 |
+
= 9.5.6 (2021-02-17) =
|
450 |
+
* Changed attribute name primary category to Yoast primary category as it caused lots of confussion
|
451 |
+
|
452 |
+
= 9.5.5 (2021-02-11) =
|
453 |
+
* Fixed a PHP notice that showed when creating a new rule
|
454 |
+
* Tested for compatibility with WooCommerce 5.0
|
455 |
+
|
456 |
+
= 9.5.4 (2021-02-09) =
|
457 |
+
* When free shipping zones are removed do not remove the other shipping zones
|
458 |
+
|
459 |
+
= 9.5.3 (2021-02-08) =
|
460 |
+
* Added a feature to remove free shipping zones from Google and Facebook feeds
|
461 |
+
|
462 |
+
= 9.5.2 (2021-02-08) =
|
463 |
+
* Fixed a minor issue in exclude rules for WooCommerce category names
|
464 |
+
|
465 |
+
= 9.5.1 (2021-02-02) =
|
466 |
+
* Dynamic attributes without values that are used for product details should be skipped which not always happened. This is fixed now.
|
467 |
+
|
468 |
+
= 9.5.0 (2021-02-01) =
|
469 |
+
* Discount rules created with the FlyCart plugin did not make it to Skroutz feeds. This has been solved now
|
470 |
+
|
471 |
+
= 9.4.9 (2021-01-31) =
|
472 |
+
* Added a seperate sale price attribute for bundled products
|
473 |
+
* Reviews for parent variable products are removed, the reviews are attached to its variations
|
474 |
+
|
475 |
+
= 9.4.8 (2021-01-30) =
|
476 |
+
* Fixed an issue with the ecomm_prodid on the cart page
|
477 |
+
|
478 |
+
= 9.4.7 (2021-01-29) =
|
479 |
+
* Solved an issue that shipping costs to the first product in a custom feed where empty
|
480 |
+
|
481 |
+
= 9.4.6 (2021-01-28) =
|
482 |
+
* Added a new attribute: product description parent product
|
483 |
+
|
484 |
+
= 9.4.5 (2021-01-28) =
|
485 |
+
* Added a Google Shopping field to their template: g:ship_from_country
|
486 |
+
* Stripping & characters from review names as it breaks the review feeds
|
487 |
+
|
488 |
+
= 9.4.4 (2021-01-27) =
|
489 |
+
* Fixed an issue where reviews without review text caused the feed to be disapproved by Google. We now remove reviews from feeds that have no review texts.
|
490 |
+
|
491 |
+
= 9.4.3 (2021-01-27) =
|
492 |
+
* Fixed an issue with an undefined ecomm_price variable on product variable pages
|
493 |
+
|
494 |
+
= 9.4.2 (2021-01-26) =
|
495 |
+
* Added the Dutch Boetiek.nl template
|
496 |
+
|
497 |
+
= 9.4.1 (2021-01-19) =
|
498 |
+
* Fixed a bug: exclude filters on empty product tags were broken. This is fixed now.
|
499 |
+
|
500 |
+
= 9.4.0 (2021-01-14) =
|
501 |
+
* Added a WP-cron check and notifications
|
502 |
+
|
503 |
+
= 9.3.9 (2021-01-14) =
|
504 |
+
* Bestprice.gr apparel products are now grouped by color
|
505 |
+
|
506 |
+
= 9.3.8 (2021-01-13) =
|
507 |
+
* Tested for compatibility with WooCommerce 4.9
|
508 |
+
|
509 |
= 9.3.7 (2021-01-12) =
|
510 |
* Added the Bestprice.gr template
|
511 |
|
3172 |
|
3173 |
== Upgrade Notice ==
|
3174 |
|
3175 |
+
= 9.9.3 =
|
3176 |
+
Removed currency from shipping costs of Heureka feeds
|
3177 |
+
|
3178 |
+
= 9.9.2 =
|
3179 |
+
Fixed an issue for the shipping table rate plugin, when multiple where configured only one price made it to the feed. Issue is fixed.
|
3180 |
+
|
3181 |
+
= 9.9.1 =
|
3182 |
+
Added support for the official WooCommerce Table Rate plugin (by WooCommerce)
|
3183 |
+
|
3184 |
+
= 9.9.0 =
|
3185 |
+
Added product type field mapping to the Facebook template
|
3186 |
+
Change the default field mapping for title to "product name parent product" so grouping on variable products works better in Facebook
|
3187 |
+
|
3188 |
+
= 9.8.9 =
|
3189 |
+
Fixed a Table Rate shipping issue that overwrote shipping costs for Flat Rates.
|
3190 |
+
|
3191 |
+
= 9.8.8 =
|
3192 |
+
Fixed an UI issue with filters and rules, apostrofs were not showing. Issue is fixed now.
|
3193 |
+
|
3194 |
+
= 9.8.7 =
|
3195 |
+
Bundle and composite products should not get an item group ID in the feed, removed it from the feed.
|
3196 |
+
|
3197 |
+
= 9.8.6 =
|
3198 |
+
Fixed an issue where shipping tax was not added for WooCommerce table rate shipping costs
|
3199 |
+
|
3200 |
+
= 9.8.5 =
|
3201 |
+
Affiliate / external product types got an item_group_id of 0 in the feed whereas it should be empty. Issue is fixed now.
|
3202 |
+
|
3203 |
+
= 9.8.4 =
|
3204 |
+
Added the Idealo.de Germany template, including their Direktkauf fields
|
3205 |
+
|
3206 |
+
= 9.8.3 =
|
3207 |
+
Solved a rounding issue for sale prices including VAT
|
3208 |
+
|
3209 |
+
= 9.8.2 =
|
3210 |
+
Fixed a Facebook Purchase event where only the value of the last product was added to the Facebook pixel instead of the value of all products bought
|
3211 |
+
|
3212 |
+
= 9.8.1 =
|
3213 |
+
The plugin systems check showed a critical error for users that are on PHP 8. Issue is fixed now.
|
3214 |
+
|
3215 |
+
= 9.8.0 =
|
3216 |
+
Only reviews that are approved make it to the review feeds, disapproved reviews are removed
|
3217 |
+
|
3218 |
+
= 9.7.9 =
|
3219 |
+
Checked for compatibility with WordPress 5.7
|
3220 |
+
Checked for compatibility with WooCommerce 5.1.0
|
3221 |
+
|
3222 |
+
= 9.7.8 =
|
3223 |
+
Added a boolean check on the review feed creation
|
3224 |
+
|
3225 |
+
= 9.7.7 =
|
3226 |
+
Removed the woosea_add_cart.js from the source as it was an empty file
|
3227 |
+
|
3228 |
+
= 9.7.6 =
|
3229 |
+
Fixed an issue with the Facebook Purchase event that did not track the order value correct
|
3230 |
+
|
3231 |
+
= 9.7.5 =
|
3232 |
+
Another recode of the lowest price variation feature
|
3233 |
+
|
3234 |
+
= 9.7.4 =
|
3235 |
+
Added Bing Shopping Promotions template
|
3236 |
+
|
3237 |
+
= 9.7.3 =
|
3238 |
+
Added a new attribute "Stock Status WooCommerce"
|
3239 |
+
Fixed another quote issue with the Facebook pixel
|
3240 |
+
|
3241 |
+
= 9.7.2 =
|
3242 |
+
Fixed an issue with the Facebook pixel. Product names that had an apostrophe in them were not measured.
|
3243 |
+
|
3244 |
+
= 9.7.1 =
|
3245 |
+
Added another fix to take into account prices excluding VAT for filtering out all but the minimum priced variation
|
3246 |
+
|
3247 |
+
= 9.7.0 =
|
3248 |
+
Fixed a bug where lowest priced variations where not making it to feeds
|
3249 |
+
|
3250 |
+
= 9.6.9 =
|
3251 |
+
Added product name parent hyphen attribute
|
3252 |
+
|
3253 |
+
= 9.6.8 =
|
3254 |
+
Added Google category taxonomy mapping for Snapchat feeds
|
3255 |
+
|
3256 |
+
= 9.6.7 =
|
3257 |
+
When suffixes and prefixes are used for the Heureka URL fields spaces are removed
|
3258 |
+
|
3259 |
+
= 9.6.6 =
|
3260 |
+
Added support for PHP 8.0
|
3261 |
+
|
3262 |
+
= 9.6.5 =
|
3263 |
+
Do not add Skroutz variable products to the feed when they do not have item_group_id's
|
3264 |
+
|
3265 |
+
= 9.6.4 =
|
3266 |
+
Fixed an issue with rules and filters
|
3267 |
+
When a rule was set on an image link, no longer lowercase the image link
|
3268 |
+
|
3269 |
+
= 9.6.3 =
|
3270 |
+
Fixed a bug, the Facebook pixel is now also measuing revenue for multiple items in Cart, InititiateCheckout and Purchase events
|
3271 |
+
Reverted back some changes in filters and rules
|
3272 |
+
|
3273 |
+
= 9.6.2 =
|
3274 |
+
For Skroutz feed removing sizes from feeds when they are out-of-stock
|
3275 |
+
|
3276 |
+
= 9.6.1 =
|
3277 |
+
Added attribute that will allow you to uppercase every first character of a string in product names
|
3278 |
+
|
3279 |
+
= 9.6.0 =
|
3280 |
+
Changed g:itemid to g:id for the Google Local Product Feeds
|
3281 |
+
|
3282 |
+
= 9.5.9 =
|
3283 |
+
* Added a fail-safe when users do not select a marketing channel which let to PHP notices in logs
|
3284 |
+
|
3285 |
+
= 9.5.8 =
|
3286 |
+
Added shipping class name attribute
|
3287 |
+
|
3288 |
+
= 9.5.7 =
|
3289 |
+
Dynamic attribute values are now also added to parent variable products for Skroutz feeds
|
3290 |
+
|
3291 |
+
= 9.5.6 =
|
3292 |
+
Changed attribute name primary category to Yoast primary category as it caused lots of confussion
|
3293 |
+
|
3294 |
+
= 9.5.5 =
|
3295 |
+
Fixed a PHP notice that showed when creating a new rule
|
3296 |
+
Tested for compatibility with WooCommerce 5.0
|
3297 |
+
|
3298 |
+
= 9.5.4 =
|
3299 |
+
When free shipping zones are removed do not remove the other shipping zones
|
3300 |
+
|
3301 |
+
= 9.5.3 =
|
3302 |
+
Added a feature to remove free shipping zones from Google and Facebook feeds
|
3303 |
+
|
3304 |
+
= 9.5.2 =
|
3305 |
+
Fixed a minor issue in exclude rules for WooCommerce category names
|
3306 |
+
|
3307 |
+
= 9.5.1 =
|
3308 |
+
Dynamic attributes without values that are used for product details should be skipped which not always happened. This is fixed now.
|
3309 |
+
|
3310 |
+
= 9.5.0 =
|
3311 |
+
Discount rules created with the FlyCart plugin did not make it to Skroutz feeds. This has been solved now
|
3312 |
+
|
3313 |
+
= 9.4.9 =
|
3314 |
+
Added a seperate sale price attribute for bundled products
|
3315 |
+
Reviews for parent variable products are removed, the reviews are attached to its variations
|
3316 |
+
|
3317 |
+
= 9.4.8 =
|
3318 |
+
Fixed an issue with the ecomm_prodid on the cart page
|
3319 |
+
|
3320 |
+
= 9.4.7 =
|
3321 |
+
Solved an issue that shipping costs to the first product in a custom feed where empty
|
3322 |
+
|
3323 |
+
= 9.4.6 =
|
3324 |
+
Added a new attribute: product description parent product
|
3325 |
+
|
3326 |
+
= 9.4.5 =
|
3327 |
+
Added a Google Shopping field to their template: g:ship_from_country
|
3328 |
+
Stripping & characters from review names as it breaks the review feeds
|
3329 |
+
|
3330 |
+
= 9.4.4 =
|
3331 |
+
Fixed an issue where reviews without review text caused the feed to be disapproved by Google. We now remove reviews from feeds that have no review texts.
|
3332 |
+
|
3333 |
+
= 9.4.3 =
|
3334 |
+
Fixed an issue with an undefined ecomm_price variable on product variable pages
|
3335 |
+
|
3336 |
+
= 9.4.2 =
|
3337 |
+
Added the Dutch Boetiek.nl template
|
3338 |
+
|
3339 |
+
= 9.4.1 =
|
3340 |
+
Fixed a bug: exclude filters on empty product tags were broken. This is fixed now.
|
3341 |
+
|
3342 |
+
= 9.4.0 =
|
3343 |
+
Added a WP-cron check and notifications
|
3344 |
+
|
3345 |
+
= 9.3.9 =
|
3346 |
+
Bestprice.gr apparel products are now grouped by color
|
3347 |
+
|
3348 |
+
= 9.3.8 =
|
3349 |
+
Tested for compatibility with WooCommerce 4.9
|
3350 |
+
|
3351 |
= 9.3.7 =
|
3352 |
Added the Bestprice.gr template
|
3353 |
|
woocommerce-sea.php
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
<?php
|
2 |
/**
|
3 |
* Plugin Name: Product Feed PRO for WooCommerce
|
4 |
-
* Version: 9.3
|
5 |
* Plugin URI: https://www.adtribes.io/support/?utm_source=wpadmin&utm_medium=plugin&utm_campaign=woosea_product_feed_pro
|
6 |
* Description: Configure and maintain your WooCommerce product feeds for Google Shopping, Facebook, Remarketing, Bing, Yandex, Comparison shopping websites and over a 100 channels more.
|
7 |
* Author: AdTribes.io
|
@@ -11,13 +11,13 @@
|
|
11 |
* License: GPL3
|
12 |
* License URI: https://www.gnu.org/licenses/gpl-3.0.html
|
13 |
* Requires at least: 4.5
|
14 |
-
* Tested up to: 5.
|
15 |
*
|
16 |
* Text Domain: woo-product-feed-pro
|
17 |
* Domain Path: /languages
|
18 |
*
|
19 |
* WC requires at least: 4.4
|
20 |
-
* WC tested up to:
|
21 |
*
|
22 |
* Product Feed PRO for WooCommerce is free software: you can redistribute it and/or modify
|
23 |
* it under the terms of the GNU General Public License as published by
|
@@ -48,7 +48,7 @@ if (!defined('ABSPATH')) {
|
|
48 |
* Plugin versionnumber, please do not override.
|
49 |
* Define some constants
|
50 |
*/
|
51 |
-
define( 'WOOCOMMERCESEA_PLUGIN_VERSION', '9.3
|
52 |
define( 'WOOCOMMERCESEA_PLUGIN_NAME', 'woocommerce-product-feed-pro' );
|
53 |
define( 'WOOCOMMERCESEA_PLUGIN_NAME_SHORT', 'woo-product-feed-pro' );
|
54 |
|
@@ -115,7 +115,7 @@ function woosea_scripts($hook) {
|
|
115 |
wp_enqueue_script( 'typeahead-js' );
|
116 |
|
117 |
// JS for adding input field validation
|
118 |
-
wp_register_script( 'woosea_validation-js', plugin_dir_url( __FILE__ ) . 'js/woosea_validation.js
|
119 |
wp_enqueue_script( 'woosea_validation-js' );
|
120 |
|
121 |
// JS for autocomplete
|
@@ -123,7 +123,7 @@ function woosea_scripts($hook) {
|
|
123 |
wp_enqueue_script( 'woosea_autocomplete-js' );
|
124 |
|
125 |
// JS for adding table rows to the rules page
|
126 |
-
wp_register_script( 'woosea_rules-js', plugin_dir_url( __FILE__ ) . 'js/woosea_rules.js
|
127 |
wp_enqueue_script( 'woosea_rules-js' );
|
128 |
|
129 |
// JS for adding table rows to the field mappings page
|
@@ -279,7 +279,7 @@ add_filter('plugin_action_links', 'woosea_plugin_action_links', 10, 2);
|
|
279 |
/**
|
280 |
* Get category path for Facebook pixel
|
281 |
*/
|
282 |
-
function woosea_get_term_parents( $id, $taxonomy, $link = false, $
|
283 |
// Only add Home to the beginning of the chain when we start buildin the chain
|
284 |
if(empty($visited)){
|
285 |
$chain = 'Home';
|
@@ -302,7 +302,7 @@ function woosea_get_term_parents( $id, $taxonomy, $link = false, $project_taxono
|
|
302 |
|
303 |
if ($parent->parent && ( $parent->parent != $parent->term_id ) && !in_array( $parent->parent, $visited, TRUE )){
|
304 |
$visited[] = $parent->parent;
|
305 |
-
$chain .= woosea_get_term_parents( $parent->parent, $taxonomy, $
|
306 |
}
|
307 |
|
308 |
if ($link){
|
@@ -335,6 +335,9 @@ function woosea_add_facebook_pixel( $product = null ){
|
|
335 |
|
336 |
$fb_prodid = get_the_id();
|
337 |
$product_name = $product->get_name();
|
|
|
|
|
|
|
338 |
$cats = "";
|
339 |
$all_cats = get_the_terms( $fb_prodid, 'product_cat' );
|
340 |
if(!empty($all_cats)){
|
@@ -345,9 +348,10 @@ function woosea_add_facebook_pixel( $product = null ){
|
|
345 |
// strip last comma
|
346 |
$cats = rtrim($cats, ",");
|
347 |
$cats = str_replace("&","&", $cats);
|
|
|
|
|
348 |
|
349 |
if(!empty($fb_prodid)){
|
350 |
-
|
351 |
if(!$product) {
|
352 |
return -1;
|
353 |
}
|
@@ -433,8 +437,8 @@ function woosea_add_facebook_pixel( $product = null ){
|
|
433 |
$order = wc_get_order( $order_id );
|
434 |
$order_items = $order->get_items();
|
435 |
$currency = get_woocommerce_currency();
|
436 |
-
$order_real = 0;
|
437 |
$contents = "";
|
|
|
438 |
|
439 |
if ( !is_wp_error( $order_items )) {
|
440 |
foreach( $order_items as $item_id => $order_item) {
|
@@ -443,13 +447,7 @@ function woosea_add_facebook_pixel( $product = null ){
|
|
443 |
if($variation_id > 0){
|
444 |
$prod_id = $variation_id;
|
445 |
}
|
446 |
-
|
447 |
$prod_quantity = $order_item->get_quantity();
|
448 |
-
$order_real = wc_format_localized_price( $order_item->get_total() );
|
449 |
-
|
450 |
-
// $order_subtotal = number_format(($order_item->get_subtotal()),2, '.', '');
|
451 |
-
// $order_subtotal_tax= number_format(($order_item->get_subtotal_tax()),2, '.', '');
|
452 |
-
// $order_real = number_format(($order_subtotal+$order_subtotal_tax+$order_real),2,',','');
|
453 |
$contents .= "{'id': '$prod_id', 'quantity': $prod_quantity},";
|
454 |
}
|
455 |
}
|
@@ -463,6 +461,8 @@ function woosea_add_facebook_pixel( $product = null ){
|
|
463 |
$cart_real = 0;
|
464 |
$contents = "";
|
465 |
|
|
|
|
|
466 |
$checkoutpage = wc_get_checkout_url();
|
467 |
$current_url = get_permalink(get_the_ID());
|
468 |
|
@@ -477,20 +477,15 @@ function woosea_add_facebook_pixel( $product = null ){
|
|
477 |
//$contents .= "$prod_id,";
|
478 |
|
479 |
$cart_real = wc_format_localized_price( $cart_item['line_total'] );
|
480 |
-
|
481 |
-
// $line_total = number_format(($cart_item['line_total']),2, '.','');
|
482 |
-
// $line_tax = number_format(($cart_item['line_tax']),2, '.','');
|
483 |
-
// $cart_real = number_format($cart_real,2, '.','');
|
484 |
-
// $cart_real = number_format(($line_total+$line_tax+$cart_real),2,',','');
|
485 |
}
|
486 |
$contents = rtrim($contents, ",");
|
487 |
|
488 |
// User is on the billing pages
|
489 |
if($checkoutpage == $current_url){
|
490 |
-
$viewContent = "fbq(\"track\",\"InitiateCheckout\",{currency:\"$currency\", value:\"$
|
491 |
} else {
|
492 |
// User is on the basket page
|
493 |
-
$viewContent = "fbq(\"track\",\"AddToCart\",{currency:\"$currency\", value:\"$
|
494 |
}
|
495 |
}
|
496 |
}
|
@@ -523,8 +518,8 @@ function woosea_add_facebook_pixel( $product = null ){
|
|
523 |
}
|
524 |
$fb_prodid = rtrim($fb_prodid, ",");
|
525 |
$category_name = $term->name;
|
526 |
-
$category_path = woosea_get_term_parents( $term->term_id, 'product_cat', $
|
527 |
-
$viewContent = "fbq(\"track\",\"ViewCategory\",{content_category
|
528 |
} elseif ($fb_pagetype == "searchresults"){
|
529 |
$term = get_queried_object();
|
530 |
$search_string = sanitize_text_field($_GET['s']);
|
@@ -553,7 +548,7 @@ function woosea_add_facebook_pixel( $product = null ){
|
|
553 |
}
|
554 |
}
|
555 |
$fb_prodid = rtrim($fb_prodid, ",");
|
556 |
-
$viewContent = "fbq(\"trackCustom\",\"Search\",{search_string:\"$search_string\", content_type:\"product\", content_ids:\"[
|
557 |
} else {
|
558 |
// This is another page than a product page
|
559 |
$viewContent = "";
|
@@ -622,7 +617,7 @@ function woosea_add_remarketing_tags( $product = null ){
|
|
622 |
// In that case we need to put in the AggregateOffer structured data
|
623 |
$variation_id = woosea_find_matching_product_variation( $product, $_GET );
|
624 |
$nr_get = count($_GET);
|
625 |
-
|
626 |
if($nr_get > 0){
|
627 |
$variable_product = wc_get_product($variation_id);
|
628 |
|
@@ -659,7 +654,9 @@ function woosea_add_remarketing_tags( $product = null ){
|
|
659 |
$ecomm_price = wc_format_decimal( $lowest, wc_get_price_decimals());
|
660 |
} else {
|
661 |
$ecomm_lowprice = wc_format_decimal( $lowest, wc_get_price_decimals() );
|
662 |
-
|
|
|
|
|
663 |
}
|
664 |
}
|
665 |
} else {
|
@@ -671,14 +668,18 @@ function woosea_add_remarketing_tags( $product = null ){
|
|
671 |
var google_tag_params = {
|
672 |
ecomm_prodid: <?php print "$ecomm_prodid";?>,
|
673 |
ecomm_pagetype: '<?php print "$ecomm_pagetype";?>',
|
674 |
-
ecomm_totalvalue:
|
675 |
};
|
676 |
</script>
|
677 |
|
678 |
<?php
|
679 |
}
|
680 |
} elseif ($ecomm_pagetype == "cart"){
|
681 |
-
|
|
|
|
|
|
|
|
|
682 |
?>
|
683 |
<script type="text/javascript">
|
684 |
var google_tag_params = {
|
@@ -804,6 +805,7 @@ function woosea_request_review(){
|
|
804 |
}
|
805 |
add_action('admin_notices', 'woosea_request_review');
|
806 |
|
|
|
807 |
/**
|
808 |
* Create a seperate MySql table for saving conversion information
|
809 |
*/
|
@@ -2285,6 +2287,21 @@ function woosea_local_pickup_shipping (){
|
|
2285 |
}
|
2286 |
add_action( 'wp_ajax_woosea_local_pickup_shipping', 'woosea_local_pickup_shipping' );
|
2287 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2288 |
/**
|
2289 |
* This function enables the setting to use
|
2290 |
* logging
|
@@ -4618,13 +4635,16 @@ function woosea_blog_widgets() {
|
|
4618 |
|
4619 |
add_meta_box('woosea_rss_dashboard_widget', __('Latest Product Feed Pro Tutorials', 'rc_mdm'), 'woosea_my_rss_box','dashboard','side','high');
|
4620 |
}
|
4621 |
-
add_action('wp_dashboard_setup', 'woosea_blog_widgets');
|
4622 |
|
4623 |
/**
|
4624 |
* Creates the RSS metabox
|
4625 |
*/
|
|
|
|
|
|
|
|
|
4626 |
function woosea_my_rss_box() {
|
4627 |
-
|
4628 |
// Get RSS Feed(s)
|
4629 |
include_once(ABSPATH . WPINC . '/feed.php');
|
4630 |
$domain = $_SERVER['HTTP_HOST'];
|
@@ -4633,6 +4653,8 @@ function woosea_my_rss_box() {
|
|
4633 |
$my_feeds = array(
|
4634 |
'https://www.adtribes.io/feed/'
|
4635 |
);
|
|
|
|
|
4636 |
|
4637 |
// Loop through Feeds
|
4638 |
foreach ( $my_feeds as $feed) :
|
1 |
<?php
|
2 |
/**
|
3 |
* Plugin Name: Product Feed PRO for WooCommerce
|
4 |
+
* Version: 9.9.3
|
5 |
* Plugin URI: https://www.adtribes.io/support/?utm_source=wpadmin&utm_medium=plugin&utm_campaign=woosea_product_feed_pro
|
6 |
* Description: Configure and maintain your WooCommerce product feeds for Google Shopping, Facebook, Remarketing, Bing, Yandex, Comparison shopping websites and over a 100 channels more.
|
7 |
* Author: AdTribes.io
|
11 |
* License: GPL3
|
12 |
* License URI: https://www.gnu.org/licenses/gpl-3.0.html
|
13 |
* Requires at least: 4.5
|
14 |
+
* Tested up to: 5.7
|
15 |
*
|
16 |
* Text Domain: woo-product-feed-pro
|
17 |
* Domain Path: /languages
|
18 |
*
|
19 |
* WC requires at least: 4.4
|
20 |
+
* WC tested up to: 5.1
|
21 |
*
|
22 |
* Product Feed PRO for WooCommerce is free software: you can redistribute it and/or modify
|
23 |
* it under the terms of the GNU General Public License as published by
|
48 |
* Plugin versionnumber, please do not override.
|
49 |
* Define some constants
|
50 |
*/
|
51 |
+
define( 'WOOCOMMERCESEA_PLUGIN_VERSION', '9.9.3' );
|
52 |
define( 'WOOCOMMERCESEA_PLUGIN_NAME', 'woocommerce-product-feed-pro' );
|
53 |
define( 'WOOCOMMERCESEA_PLUGIN_NAME_SHORT', 'woo-product-feed-pro' );
|
54 |
|
115 |
wp_enqueue_script( 'typeahead-js' );
|
116 |
|
117 |
// JS for adding input field validation
|
118 |
+
wp_register_script( 'woosea_validation-js', plugin_dir_url( __FILE__ ) . 'js/woosea_validation.js', '',WOOCOMMERCESEA_PLUGIN_VERSION, true );
|
119 |
wp_enqueue_script( 'woosea_validation-js' );
|
120 |
|
121 |
// JS for autocomplete
|
123 |
wp_enqueue_script( 'woosea_autocomplete-js' );
|
124 |
|
125 |
// JS for adding table rows to the rules page
|
126 |
+
wp_register_script( 'woosea_rules-js', plugin_dir_url( __FILE__ ) . 'js/woosea_rules.js', '',WOOCOMMERCESEA_PLUGIN_VERSION, true );
|
127 |
wp_enqueue_script( 'woosea_rules-js' );
|
128 |
|
129 |
// JS for adding table rows to the field mappings page
|
279 |
/**
|
280 |
* Get category path for Facebook pixel
|
281 |
*/
|
282 |
+
function woosea_get_term_parents( $id, $taxonomy, $project_taxonomy, $link = false, $nicename = false, $visited = array() ) {
|
283 |
// Only add Home to the beginning of the chain when we start buildin the chain
|
284 |
if(empty($visited)){
|
285 |
$chain = 'Home';
|
302 |
|
303 |
if ($parent->parent && ( $parent->parent != $parent->term_id ) && !in_array( $parent->parent, $visited, TRUE )){
|
304 |
$visited[] = $parent->parent;
|
305 |
+
$chain .= woosea_get_term_parents( $parent->parent, $taxonomy, $separator, $link = false, $nicename, $visited );
|
306 |
}
|
307 |
|
308 |
if ($link){
|
335 |
|
336 |
$fb_prodid = get_the_id();
|
337 |
$product_name = $product->get_name();
|
338 |
+
$product_name = str_replace("\"","",$product_name);
|
339 |
+
$product_name = str_replace("'","",$product_name);
|
340 |
+
|
341 |
$cats = "";
|
342 |
$all_cats = get_the_terms( $fb_prodid, 'product_cat' );
|
343 |
if(!empty($all_cats)){
|
348 |
// strip last comma
|
349 |
$cats = rtrim($cats, ",");
|
350 |
$cats = str_replace("&","&", $cats);
|
351 |
+
$cats = str_replace("\"","",$cats);
|
352 |
+
$cats = str_replace("'","",$cats);
|
353 |
|
354 |
if(!empty($fb_prodid)){
|
|
|
355 |
if(!$product) {
|
356 |
return -1;
|
357 |
}
|
437 |
$order = wc_get_order( $order_id );
|
438 |
$order_items = $order->get_items();
|
439 |
$currency = get_woocommerce_currency();
|
|
|
440 |
$contents = "";
|
441 |
+
$order_real = wc_format_localized_price($order->get_total());
|
442 |
|
443 |
if ( !is_wp_error( $order_items )) {
|
444 |
foreach( $order_items as $item_id => $order_item) {
|
447 |
if($variation_id > 0){
|
448 |
$prod_id = $variation_id;
|
449 |
}
|
|
|
450 |
$prod_quantity = $order_item->get_quantity();
|
|
|
|
|
|
|
|
|
|
|
451 |
$contents .= "{'id': '$prod_id', 'quantity': $prod_quantity},";
|
452 |
}
|
453 |
}
|
461 |
$cart_real = 0;
|
462 |
$contents = "";
|
463 |
|
464 |
+
$cart_total_amount = wc_format_localized_price(WC()->cart->get_cart_contents_total());
|
465 |
+
|
466 |
$checkoutpage = wc_get_checkout_url();
|
467 |
$current_url = get_permalink(get_the_ID());
|
468 |
|
477 |
//$contents .= "$prod_id,";
|
478 |
|
479 |
$cart_real = wc_format_localized_price( $cart_item['line_total'] );
|
|
|
|
|
|
|
|
|
|
|
480 |
}
|
481 |
$contents = rtrim($contents, ",");
|
482 |
|
483 |
// User is on the billing pages
|
484 |
if($checkoutpage == $current_url){
|
485 |
+
$viewContent = "fbq(\"track\",\"InitiateCheckout\",{currency:\"$currency\", value:\"$cart_total_amount\", content_type:\"product\", content_ids:[$contents]});";
|
486 |
} else {
|
487 |
// User is on the basket page
|
488 |
+
$viewContent = "fbq(\"track\",\"AddToCart\",{currency:\"$currency\", value:\"$cart_total_amount\", content_type:\"product\", content_ids:[$contents]});";
|
489 |
}
|
490 |
}
|
491 |
}
|
518 |
}
|
519 |
$fb_prodid = rtrim($fb_prodid, ",");
|
520 |
$category_name = $term->name;
|
521 |
+
$category_path = woosea_get_term_parents( $term->term_id, 'product_cat', $project_taxonomy = false, $link = false, $nicename = false, $visited = array() );
|
522 |
+
$viewContent = "fbq(\"track\",\"ViewCategory\",{content_category:'$category_path', content_name:'$category_name', content_type:\"product\", content_ids:\"[$fb_prodid]\"});";
|
523 |
} elseif ($fb_pagetype == "searchresults"){
|
524 |
$term = get_queried_object();
|
525 |
$search_string = sanitize_text_field($_GET['s']);
|
548 |
}
|
549 |
}
|
550 |
$fb_prodid = rtrim($fb_prodid, ",");
|
551 |
+
$viewContent = "fbq(\"trackCustom\",\"Search\",{search_string:\"$search_string\", content_type:\"product\", content_ids:\"[$fb_prodid]\"});";
|
552 |
} else {
|
553 |
// This is another page than a product page
|
554 |
$viewContent = "";
|
617 |
// In that case we need to put in the AggregateOffer structured data
|
618 |
$variation_id = woosea_find_matching_product_variation( $product, $_GET );
|
619 |
$nr_get = count($_GET);
|
620 |
+
|
621 |
if($nr_get > 0){
|
622 |
$variable_product = wc_get_product($variation_id);
|
623 |
|
654 |
$ecomm_price = wc_format_decimal( $lowest, wc_get_price_decimals());
|
655 |
} else {
|
656 |
$ecomm_lowprice = wc_format_decimal( $lowest, wc_get_price_decimals() );
|
657 |
+
$ecomm_highprice = wc_format_decimal( $highest, wc_get_price_decimals() );
|
658 |
+
$ecomm_price = $ecomm_lowprice;
|
659 |
+
|
660 |
}
|
661 |
}
|
662 |
} else {
|
668 |
var google_tag_params = {
|
669 |
ecomm_prodid: <?php print "$ecomm_prodid";?>,
|
670 |
ecomm_pagetype: '<?php print "$ecomm_pagetype";?>',
|
671 |
+
ecomm_totalvalue: <?php print "$ecomm_price";?>,
|
672 |
};
|
673 |
</script>
|
674 |
|
675 |
<?php
|
676 |
}
|
677 |
} elseif ($ecomm_pagetype == "cart"){
|
678 |
+
// Get the first product from cart and use that product ID
|
679 |
+
foreach( WC()->cart->get_cart() as $cart_item ){
|
680 |
+
$ecomm_prodid = $cart_item['product_id'];
|
681 |
+
break;
|
682 |
+
}
|
683 |
?>
|
684 |
<script type="text/javascript">
|
685 |
var google_tag_params = {
|
805 |
}
|
806 |
add_action('admin_notices', 'woosea_request_review');
|
807 |
|
808 |
+
|
809 |
/**
|
810 |
* Create a seperate MySql table for saving conversion information
|
811 |
*/
|
2287 |
}
|
2288 |
add_action( 'wp_ajax_woosea_local_pickup_shipping', 'woosea_local_pickup_shipping' );
|
2289 |
|
2290 |
+
/**
|
2291 |
+
* This function enables the setting to remove
|
2292 |
+
* free shipping zones
|
2293 |
+
*/
|
2294 |
+
function woosea_remove_free_shipping (){
|
2295 |
+
$status = sanitize_text_field($_POST['status']);
|
2296 |
+
|
2297 |
+
if ($status == "off"){
|
2298 |
+
update_option( 'remove_free_shipping', 'no', 'yes');
|
2299 |
+
} else {
|
2300 |
+
update_option( 'remove_free_shipping', 'yes', 'yes');
|
2301 |
+
}
|
2302 |
+
}
|
2303 |
+
add_action( 'wp_ajax_woosea_remove_free_shipping', 'woosea_remove_free_shipping' );
|
2304 |
+
|
2305 |
/**
|
2306 |
* This function enables the setting to use
|
2307 |
* logging
|
4635 |
|
4636 |
add_meta_box('woosea_rss_dashboard_widget', __('Latest Product Feed Pro Tutorials', 'rc_mdm'), 'woosea_my_rss_box','dashboard','side','high');
|
4637 |
}
|
4638 |
+
//add_action('wp_dashboard_setup', 'woosea_blog_widgets');
|
4639 |
|
4640 |
/**
|
4641 |
* Creates the RSS metabox
|
4642 |
*/
|
4643 |
+
function woosea_feed_interval( $seconds ) {
|
4644 |
+
return 172800; // Cache the feed for 2 days
|
4645 |
+
}
|
4646 |
+
|
4647 |
function woosea_my_rss_box() {
|
|
|
4648 |
// Get RSS Feed(s)
|
4649 |
include_once(ABSPATH . WPINC . '/feed.php');
|
4650 |
$domain = $_SERVER['HTTP_HOST'];
|
4653 |
$my_feeds = array(
|
4654 |
'https://www.adtribes.io/feed/'
|
4655 |
);
|
4656 |
+
|
4657 |
+
add_filter( 'wp_feed_cache_transient_lifetime' , 'woosea_feed_interval' );
|
4658 |
|
4659 |
// Loop through Feeds
|
4660 |
foreach ( $my_feeds as $feed) :
|