CTX Feed – WooCommerce Product Feed Manager Plugin - Version 4.4.50

Version Description

(2022-02-16) = * Fixed: Review feed not generating when the special character in review title or description - issue has been fixed.

Download this release

Release Info

Developer wahid0003
Plugin Icon 128x128 CTX Feed – WooCommerce Product Feed Manager Plugin
Version 4.4.50
Comparing to
See all releases

Code changes from version 4.4.47 to 4.4.50

README.txt CHANGED
@@ -5,7 +5,7 @@ Tags: Product Feed, WooCommerce, Google Shopping, Google Merchant, Facebook Cata
5
  Requires at least: 4.4
6
  Tested Up To: 5.8.2
7
  Requires PHP: 5.6
8
- Stable tag: 4.4.47
9
  License: GPLv2 or later
10
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
11
 
@@ -516,6 +516,16 @@ Using pro version:
516
 
517
  == Changelog ==
518
 
 
 
 
 
 
 
 
 
 
 
519
  = 4.4.47 (2022-01-24) =
520
  * Added: WordPress 5.9 compatibility test and version dump.
521
 
5
  Requires at least: 4.4
6
  Tested Up To: 5.8.2
7
  Requires PHP: 5.6
8
+ Stable tag: 4.4.50
9
  License: GPLv2 or later
10
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
11
 
516
 
517
  == Changelog ==
518
 
519
+ = 4.4.50 (2022-02-16) =
520
+ * Fixed: Review feed not generating when the special character in review title or description - issue has been fixed.
521
+
522
+ = 4.4.49 (2022-02-08) =
523
+ * Fixed: Review reply comes as a review for Google Review Template - issue has been fixed.
524
+ * Updated: Learn more button's link in feed configuration setting has been updated.
525
+
526
+ = 4.4.48 (2022-01-31) =
527
+ * Updated: Idealo template attributes and link updated.
528
+
529
  = 4.4.47 (2022-01-24) =
530
  * Added: WordPress 5.9 compatibility test and version dump.
531
 
admin/partials/woo-feed-edit-config.php CHANGED
@@ -75,7 +75,7 @@ if ( ! defined( 'ABSPATH' ) ) {
75
  ?>
76
  </select>
77
  </span>
78
- <span style="font-size:x-small;"><a style="color: red" href="http://webappick.helpscoutdocs.com/article/19-how-to-map-store-category-with-merchant-category" target="_blank">Learn More..</a></span>
79
  <?php } else { ?>
80
  <input <?php echo ( 'pattern' == $attr_type[$k] ) ? '' : 'style=" display: none;"'; ?>autocomplete="off" class="wf_default wf_attributes " type="text" name="default[<?php echo esc_attr( $k ); ?>]" value="<?php echo isset($default[ $k ]) ? esc_attr( $default[ $k ] ) : ""; ?>"/>
81
  <?php } ?>
75
  ?>
76
  </select>
77
  </span>
78
+ <span style="font-size:x-small;"><a style="color: red" href="https://webappick.com/docs/ctx-feed/configuration/how-to-map-store-category-with-merchant-category/" target="_blank">Learn More..</a></span>
79
  <?php } else { ?>
80
  <input <?php echo ( 'pattern' == $attr_type[$k] ) ? '' : 'style=" display: none;"'; ?>autocomplete="off" class="wf_default wf_attributes " type="text" name="default[<?php echo esc_attr( $k ); ?>]" value="<?php echo isset($default[ $k ]) ? esc_attr( $default[ $k ] ) : ""; ?>"/>
81
  <?php } ?>
includes/classes/class-woo-feed-admin-message.php CHANGED
@@ -262,7 +262,7 @@ final class Woo_Feed_Message {
262
  $notice = '<b style="color: #008779;">' . $notice . '</b>';
263
  if ( isset( $_GET['cat'] ) && 'no' == $_GET['cat'] ) {
264
  $notice .= sprintf( '<br/><br/><b style="color: #f49242;">%s</b>', esc_html__( 'Warning:', 'woo-feed' ) );
265
- $link = 'https://webappick.helpscoutdocs.com/article/19-how-to-map-store-category-with-merchant-category';
266
  /** @noinspection HtmlUnknownTarget */
267
  $link = sprintf( '<a href="%s" target="_blank">%s</a>', esc_url( $link ), esc_html__( 'Learn more...', 'woo-feed' ) );
268
  $notice .= sprintf( '<ul><li>%s %s</li></ul>', esc_html__( 'Google Product category is not selected. Your Google Ads CPC rate will be high. Add proper Google Product Category to each product & reduce CPC rate.', 'woo-feed' ), $link );
262
  $notice = '<b style="color: #008779;">' . $notice . '</b>';
263
  if ( isset( $_GET['cat'] ) && 'no' == $_GET['cat'] ) {
264
  $notice .= sprintf( '<br/><br/><b style="color: #f49242;">%s</b>', esc_html__( 'Warning:', 'woo-feed' ) );
265
+ $link = 'https://webappick.com/docs/ctx-feed/configuration/how-to-map-store-category-with-merchant-category/';
266
  /** @noinspection HtmlUnknownTarget */
267
  $link = sprintf( '<a href="%s" target="_blank">%s</a>', esc_url( $link ), esc_html__( 'Learn more...', 'woo-feed' ) );
268
  $notice .= sprintf( '<ul><li>%s %s</li></ul>', esc_html__( 'Google Product category is not selected. Your Google Ads CPC rate will be high. Add proper Google Product Category to each product & reduce CPC rate.', 'woo-feed' ), $link );
includes/classes/class-woo-feed-constants.php CHANGED
@@ -22,7 +22,7 @@ class Woo_Feed_Constants {
22
  * @var string
23
  * @since 3.1.6
24
  */
25
- define( 'WOO_FEED_FREE_VERSION', '4.4.47' );
26
  }
27
 
28
  if ( ! defined( 'WOO_FEED_FREE_PATH' ) ) {
22
  * @var string
23
  * @since 3.1.6
24
  */
25
+ define( 'WOO_FEED_FREE_VERSION', '4.4.50' );
26
  }
27
 
28
  if ( ! defined( 'WOO_FEED_FREE_PATH' ) ) {
includes/classes/class-woo-feed-products-v3.php CHANGED
@@ -71,6 +71,22 @@ class Woo_Feed_Products_v3
71
  * @var array
72
  */
73
  public $products = [];
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
74
  /**
75
  * Processed Products
76
  *
@@ -426,6 +442,9 @@ class Woo_Feed_Products_v3
426
  $products = array_unique(array_merge($wc, $wp));
427
  }
428
 
 
 
 
429
  return $products;
430
  }
431
 
@@ -475,6 +494,9 @@ class Woo_Feed_Products_v3
475
  return [];
476
  }
477
 
 
 
 
478
  /**
479
  * Fires before looping through request product for getting product data
480
  *
@@ -3597,9 +3619,15 @@ class Woo_Feed_Products_v3
3597
  protected function shipping($product)
3598
  {
3599
  $feedBody = '';
3600
- if (in_array($this->config['provider'], ['google', 'facebook', 'pinterest', 'bing', 'snapchat'])) {
3601
- $get_shipping = new Woo_Feed_Shipping($product, $this->config);
3602
- $feedBody .= $get_shipping->get_google_shipping();
 
 
 
 
 
 
3603
  }
3604
 
3605
  return apply_filters('woo_feed_filter_product_shipping', $feedBody, $product, $this->config);
@@ -3617,7 +3645,8 @@ class Woo_Feed_Products_v3
3617
  */
3618
  protected function shipping_cost($product)
3619
  {
3620
- $shipping_obj = new Woo_Feed_Shipping($product, $this->config);
 
3621
 
3622
  return apply_filters('woo_feed_filter_product_shipping_cost', $shipping_obj->get_lowest_shipping_price(), $product, $this->config);
3623
  }
@@ -3712,7 +3741,8 @@ class Woo_Feed_Products_v3
3712
  {
3713
  $feedBody = '';
3714
  if (in_array($this->config['provider'], ['google', 'facebook', 'pinterest', 'bing', 'snapchat'])) {
3715
- $shipping_obj = new Woo_Feed_Shipping($product, $this->config);
 
3716
  $feedBody .= $shipping_obj->get_google_tax();
3717
  }
3718
 
71
  * @var array
72
  */
73
  public $products = [];
74
+
75
+
76
+ /**
77
+ * Products IDs
78
+ *
79
+ * @var array
80
+ */
81
+ public $product_ids = [];
82
+
83
+ /**
84
+ * Feed Big Data
85
+ *
86
+ * @var array
87
+ */
88
+ public $data = [];
89
+
90
  /**
91
  * Processed Products
92
  *
442
  $products = array_unique(array_merge($wc, $wp));
443
  }
444
 
445
+ //set product ids
446
+ $this->product_ids = $products;
447
+
448
  return $products;
449
  }
450
 
494
  return [];
495
  }
496
 
497
+ //filter big data
498
+ $this->data = apply_filters("woo_feed_feed_big_data", $this->data, $productIds, $this->config);
499
+
500
  /**
501
  * Fires before looping through request product for getting product data
502
  *
3619
  protected function shipping($product)
3620
  {
3621
  $feedBody = '';
3622
+ $data = $this->data;
3623
+
3624
+ if( isset($data['shipping_zones']) && !empty($data['shipping_zones']) ) {
3625
+ $zones = $data['shipping_zones'];
3626
+
3627
+ if (in_array($this->config['provider'], ['google', 'facebook', 'pinterest', 'bing', 'snapchat'])) {
3628
+ $get_shipping = new Woo_Feed_Shipping($this->config);
3629
+ $feedBody .= $get_shipping->set_product($product)->set_shipping_zone($zones)->get_google_shipping();
3630
+ }
3631
  }
3632
 
3633
  return apply_filters('woo_feed_filter_product_shipping', $feedBody, $product, $this->config);
3645
  */
3646
  protected function shipping_cost($product)
3647
  {
3648
+ $shipping_obj = new Woo_Feed_Shipping($this->config);
3649
+ $shipping_obj = $shipping_obj->set_product($product);
3650
 
3651
  return apply_filters('woo_feed_filter_product_shipping_cost', $shipping_obj->get_lowest_shipping_price(), $product, $this->config);
3652
  }
3741
  {
3742
  $feedBody = '';
3743
  if (in_array($this->config['provider'], ['google', 'facebook', 'pinterest', 'bing', 'snapchat'])) {
3744
+ $shipping_obj = new Woo_Feed_Shipping($this->config);
3745
+ $shipping_obj = $shipping_obj->set_product($product);
3746
  $feedBody .= $shipping_obj->get_google_tax();
3747
  }
3748
 
includes/classes/class-woo-feed-shipping.php CHANGED
@@ -37,11 +37,9 @@ class Woo_Feed_Shipping {
37
  */
38
  public $obj_v3;
39
 
40
- public function __construct( $product, $feed_config ) {
41
  $this->config = $feed_config;
42
- $this->product = $product;
43
- $this->class_cost_id = $this->set_shipping_class_id();
44
- $this->shipping_zones = $this->set_shipping_zone();
45
  $this->feed_country = $this->set_country();
46
  $this->settings = woo_feed_get_options( 'all' );
47
  $this->currency = $this->get_currency();
@@ -50,6 +48,12 @@ class Woo_Feed_Shipping {
50
  $this->obj_v3 = apply_filters("woo_feed_filter_object_v3", $obj_v3);
51
  }
52
 
 
 
 
 
 
 
53
 
54
  private function set_country() {
55
  return $this->config['feed_country'];
@@ -94,11 +98,10 @@ class Woo_Feed_Shipping {
94
  return $class_cost_id;
95
  }
96
 
97
- public function set_shipping_zone() {
98
- if ( class_exists( 'WC_Shipping_Zones' ) ) {
99
- return WC_Shipping_Zones::get_zones();
100
- }
101
- return false;
102
  }
103
 
104
  /**
37
  */
38
  public $obj_v3;
39
 
40
+ public function __construct( $feed_config ) {
41
  $this->config = $feed_config;
42
+ //$this->class_cost_id = $this->set_shipping_class_id();
 
 
43
  $this->feed_country = $this->set_country();
44
  $this->settings = woo_feed_get_options( 'all' );
45
  $this->currency = $this->get_currency();
48
  $this->obj_v3 = apply_filters("woo_feed_filter_object_v3", $obj_v3);
49
  }
50
 
51
+ public function set_product($product) {
52
+ $this->product = $product;
53
+
54
+ return $this;
55
+ }
56
+
57
 
58
  private function set_country() {
59
  return $this->config['feed_country'];
98
  return $class_cost_id;
99
  }
100
 
101
+ public function set_shipping_zone($shipping_zones) {
102
+ $this->shipping_zones = $shipping_zones;
103
+
104
+ return $this;
 
105
  }
106
 
107
  /**
includes/feeds/class-woo-feed-review.php CHANGED
@@ -240,6 +240,7 @@ class Woo_Feed_Review {
240
  array(
241
  'post_id' => $id,
242
  'post_type' => 'product',
 
243
  )
244
  );
245
 
@@ -247,13 +248,24 @@ class Woo_Feed_Review {
247
 
248
  if ( $reviews && is_array($reviews) ) {
249
  foreach ( $reviews as $single_review ) {
250
- $review['review']['review_id'] = $single_review->comment_ID;
251
- $review['review']['reviewer']['name'] = $single_review->comment_author;
252
- $review['review']['reviewer']['reviewer_id'] = $single_review->user_id;
253
- $review['review']['content'] = $single_review->comment_content;
254
- $review['review']['review_timestamp'] = $single_review->comment_date_gmt;
255
- $review['review']['review_url'] = $product->get_permalink();
256
- $review['review']['ratings']["overall"] = get_comment_meta( $single_review->comment_ID, 'rating', true);
 
 
 
 
 
 
 
 
 
 
 
257
  $review['review']['products'] = array();
258
  $review['review']['products']['product'] = array();
259
 
@@ -275,6 +287,7 @@ class Woo_Feed_Review {
275
 
276
  //add prefix - suffix to attribute value
277
  $attributeValue = $prefix . $attributeValue . $suffix;
 
278
 
279
  if ( "review_temp_gtin" === $merchant_attribute ) {
280
  $review['review']['products']['product']['product_ids']['gtins']['gtin'] = $attributeValue;
@@ -287,7 +300,7 @@ class Woo_Feed_Review {
287
  } else {
288
  $review['review']['products']['product'][ $merchant_attribute ] = $attributeValue;
289
  }
290
- }
291
 
292
  array_push($feed['reviews'], $review);
293
  }
240
  array(
241
  'post_id' => $id,
242
  'post_type' => 'product',
243
+ 'parent' => 0
244
  )
245
  );
246
 
248
 
249
  if ( $reviews && is_array($reviews) ) {
250
  foreach ( $reviews as $single_review ) {
251
+ $review_content = $single_review->comment_content;
252
+ $rating = get_comment_meta( $single_review->comment_ID, 'rating', true);
253
+ $review_content = woo_feed_strip_all_tags(wp_specialchars_decode($review_content));
254
+ $review_content = preg_replace('/[^A-Za-z0-9-]/', ' ', $review_content);;
255
+ $review_content = !empty($review_content) ? "<![CDATA[" . woo_feed_strip_all_tags(wp_specialchars_decode($review_content)) . "]]>" : "";
256
+ $review_product_url = !empty($product->get_permalink()) ? "<![CDATA[" . $product->get_permalink() . "]]>" : "";
257
+ $review_id = !empty($single_review->comment_ID) ? "<![CDATA[" . $single_review->comment_ID . "]]>" : "";
258
+ $review_author = !empty($single_review->comment_author) ? "<![CDATA[" . $single_review->comment_author . "]]>" : "";
259
+ $review_user_id = !empty($single_review->user_id) ? "<![CDATA[" . $single_review->user_id . "]]>" : "";
260
+ $review_time = !empty($single_review->comment_date_gmt) ? "<![CDATA[" . $single_review->comment_date_gmt . "]]>" : "";
261
+
262
+ $review['review']['review_id'] = $review_id;
263
+ $review['review']['reviewer']['name'] = $review_author;
264
+ $review['review']['reviewer']['reviewer_id'] = $review_user_id;
265
+ $review['review']['content'] = $review_content;
266
+ $review['review']['review_timestamp'] = $review_time;
267
+ $review['review']['review_url'] = $review_product_url;
268
+ $review['review']['ratings']["overall"] = $rating;
269
  $review['review']['products'] = array();
270
  $review['review']['products']['product'] = array();
271
 
287
 
288
  //add prefix - suffix to attribute value
289
  $attributeValue = $prefix . $attributeValue . $suffix;
290
+ $attributeValue = !empty($attributeValue) ? "<![CDATA[" . $attributeValue . "]]>" : "";
291
 
292
  if ( "review_temp_gtin" === $merchant_attribute ) {
293
  $review['review']['products']['product']['product_ids']['gtins']['gtin'] = $attributeValue;
300
  } else {
301
  $review['review']['products']['product'][ $merchant_attribute ] = $attributeValue;
302
  }
303
+ }
304
 
305
  array_push($feed['reviews'], $review);
306
  }
includes/helper.php CHANGED
@@ -2210,7 +2210,7 @@ if (!function_exists('woo_feed_parse_string')) {
2210
  // split on outer delimiter
2211
  $pairs = explode('&', $str);
2212
 
2213
- if (!empty($pairs)) {
2214
 
2215
  // loop through each pair
2216
  foreach ($pairs as $i) {
@@ -3749,6 +3749,18 @@ if (!function_exists('woo_feed_filter_woocommerce_structured_data_product')) {
3749
  }
3750
  }
3751
 
 
 
 
 
 
 
 
 
 
 
 
 
3752
  // Check if we have mpn data.
3753
  if ('enable' === $disable_mpn && !empty($mpn)) {
3754
  $mpn = $product->get_meta('woo_feed_mpn');
@@ -5507,6 +5519,22 @@ if( ! function_exists( 'woo_feed_get_plugin_pages_slugs' ) ) {
5507
 
5508
  }
5509
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5510
  #==== MERCHANT TEMPLATE OVERRIDE END ================#
5511
 
5512
  // Including pluggable functions file
2210
  // split on outer delimiter
2211
  $pairs = explode('&', $str);
2212
 
2213
+ if (!empty($pairs) && is_array($pairs)) {
2214
 
2215
  // loop through each pair
2216
  foreach ($pairs as $i) {
3749
  }
3750
  }
3751
 
3752
+ //get price and currency to work with all the compatible currency plugin
3753
+ $price = $product->get_price();
3754
+ $currency = get_woocommerce_currency();
3755
+
3756
+ //filter schema price & currency
3757
+ $price = apply_filters('woo_feed_schema_product_price', $price, $markup, $product);
3758
+ $currency = apply_filters('woo_feed_schema_product_currency', $currency, $markup, $product);
3759
+ $markup['offers'][0]['price'] = $price;
3760
+ $markup['offers'][0]['priceSpecification']['price'] = $price;
3761
+ $markup['offers'][0]['priceSpecification']['priceCurrency'] = $currency;
3762
+ $markup['offers'][0]['priceCurrency'] = $currency;
3763
+
3764
  // Check if we have mpn data.
3765
  if ('enable' === $disable_mpn && !empty($mpn)) {
3766
  $mpn = $product->get_meta('woo_feed_mpn');
5519
 
5520
  }
5521
 
5522
+ if( ! function_exists('woo_feed_make_feed_big_data') ) {
5523
+ function woo_feed_make_feed_big_data($data, $ids, $config) {
5524
+
5525
+ //setup feed shipping data @TODO: need to make a class when another data setup will be added
5526
+ if( isset($config['attributes']) && in_array("shipping", $config["attributes"]) ) {
5527
+ if ( class_exists( 'WC_Shipping_Zones' ) ) {
5528
+ $data['shipping_zones'] = WC_Shipping_Zones::get_zones();
5529
+ }
5530
+ }
5531
+
5532
+ return $data;
5533
+
5534
+ }
5535
+ add_filter('woo_feed_feed_big_data', 'woo_feed_make_feed_big_data', 10, 3);
5536
+ }
5537
+
5538
  #==== MERCHANT TEMPLATE OVERRIDE END ================#
5539
 
5540
  // Including pluggable functions file
includes/template-configs.php CHANGED
@@ -2704,166 +2704,14 @@ return array(
2704
  'limit' => array( '', '', '', '', '', '', '', '', '', '', '', '', '', '', '' ),
2705
  ),
2706
  'idealo' => array(
2707
- 'mattributes' => array(
2708
- 'Article number in shop',
2709
- 'EAN',
2710
- 'MPN',
2711
- 'Manufacturer',
2712
- 'Product name',
2713
- 'Price',
2714
- 'Delivery time',
2715
- 'Product group in shop',
2716
- 'Product description',
2717
- 'Product characteristics',
2718
- 'Product URL',
2719
- 'Image URL',
2720
- 'Colour',
2721
- 'Size',
2722
- 'Cash in advance',
2723
- 'Unit price',
2724
- 'Energy efficiency rating',
2725
- 'Shipping cost comment',
2726
- ),
2727
- 'prefix' => array(
2728
- '',
2729
- '',
2730
- '',
2731
- '',
2732
- '',
2733
- '',
2734
- '',
2735
- '',
2736
- '',
2737
- '',
2738
- '',
2739
- '',
2740
- '',
2741
- '',
2742
- '',
2743
- '',
2744
- '',
2745
- '',
2746
- ),
2747
- 'type' => array(
2748
- 'attribute',
2749
- 'attribute',
2750
- 'attribute',
2751
- 'attribute',
2752
- 'attribute',
2753
- 'attribute',
2754
- 'pattern',
2755
- 'attribute',
2756
- 'attribute',
2757
- 'attribute',
2758
- 'attribute',
2759
- 'attribute',
2760
- 'attribute',
2761
- 'attribute',
2762
- 'attribute',
2763
- 'attribute',
2764
- 'attribute',
2765
- 'attribute',
2766
- ),
2767
- 'attributes' => array(
2768
- 'id',
2769
- '',
2770
- '',
2771
- '',
2772
- 'title',
2773
- 'price',
2774
- '',
2775
- 'product_type',
2776
- 'description',
2777
- '',
2778
- 'link',
2779
- 'image',
2780
- '',
2781
- '',
2782
- '',
2783
- '',
2784
- '',
2785
- 'shipping_cost',
2786
- ),
2787
- 'default' => array(
2788
- '',
2789
- '',
2790
- '',
2791
- '',
2792
- '',
2793
- '',
2794
- '1-3 working days',
2795
- '',
2796
- '',
2797
- '',
2798
- '',
2799
- '',
2800
- '',
2801
- '',
2802
- '',
2803
- '',
2804
- '',
2805
- '',
2806
- ),
2807
- 'suffix' => array(
2808
- '',
2809
- '',
2810
- '',
2811
- '',
2812
- '',
2813
- '',
2814
- '',
2815
- '',
2816
- '',
2817
- '',
2818
- '',
2819
- '',
2820
- '',
2821
- '',
2822
- '',
2823
- '',
2824
- '',
2825
- ' ' . $this->currency,
2826
- ),
2827
- 'output_type' => array(
2828
- '1',
2829
- '1',
2830
- '1',
2831
- '1',
2832
- '1',
2833
- '1',
2834
- '1',
2835
- '1',
2836
- '11',
2837
- '1',
2838
- '1',
2839
- '1',
2840
- '1',
2841
- '1',
2842
- '1',
2843
- '1',
2844
- '1',
2845
- '1',
2846
- ),
2847
- 'limit' => array(
2848
- '',
2849
- '',
2850
- '',
2851
- '',
2852
- '',
2853
- '',
2854
- '',
2855
- '',
2856
- '',
2857
- '',
2858
- '',
2859
- '',
2860
- '',
2861
- '',
2862
- '',
2863
- '',
2864
- '',
2865
- '',
2866
- ),
2867
  ),
2868
  'pricespy' => array(
2869
  'mattributes' => array(
2704
  'limit' => array( '', '', '', '', '', '', '', '', '', '', '', '', '', '', '' ),
2705
  ),
2706
  'idealo' => array(
2707
+ 'mattributes' => array('sku','title','description','price','imageUrls','deliveryTime','categoryPath','url','brand','checkout','eans','fulfillmentType','checkoutLimitPerPeriod','size','colour',),
2708
+ 'prefix' => array('','','','','','','','','','','','','','','',),
2709
+ 'type' => array('attribute','attribute','attribute','attribute','attribute','pattern','attribute','attribute','pattern','pattern','pattern','pattern','pattern','attribute','attribute',),
2710
+ 'attributes' => array('sku','title','description','current_price','images','','product_type','link','','','','','','wf_attr_pa_size','wf_attr_pa_color',),
2711
+ 'default' => array('','','','','','1-3 working days','','','','','','','','','',),
2712
+ 'suffix' => array('','','',' USD','','','','','','','','','','','',),
2713
+ 'output_type' => array('1','1','11','6','1','1','1','1','1','1','1','1','1','1','1',),
2714
+ 'limit' => array('','','','','','','','','','','','','','','',),
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2715
  ),
2716
  'pricespy' => array(
2717
  'mattributes' => array(
includes/template-infos.php CHANGED
@@ -82,7 +82,7 @@ return array(
82
  'feed_file_type' => array( 'TXT' ),
83
  ), // Prisjakt.
84
  'idealo' => array(
85
- 'link' => 'https://connect.idealo.de/tam/UK_feed_specification.pdf',
86
  'feed_file_type' => array( 'CSV', 'TXT' ),
87
  ), // Idealo.
88
  'yandex_csv' => array(
82
  'feed_file_type' => array( 'TXT' ),
83
  ), // Prisjakt.
84
  'idealo' => array(
85
+ 'link' => 'https://connect.idealo.de/import/en/csv/#_attributes_documentation',
86
  'feed_file_type' => array( 'CSV', 'TXT' ),
87
  ), // Idealo.
88
  'yandex_csv' => array(
languages/woo-feed.pot CHANGED
@@ -16,7 +16,7 @@ msgstr ""
16
  msgid "Unauthorized Action."
17
  msgstr ""
18
 
19
- #: woo-feed.php:141, woo-feed.php:260, includes/helper.php:853, includes/helper.php:1904, includes/helper.php:2949, includes/helper.php:2978, includes/helper.php:3366, includes/helper.php:3564, includes/helper.php:3592, includes/helper.php:4833, includes/helper.php:5342
20
  msgid "Invalid Request."
21
  msgstr ""
22
 
@@ -709,31 +709,31 @@ msgstr ""
709
  msgid "Choose from the most used"
710
  msgstr ""
711
 
712
- #: includes/helper.php:4521
713
  msgid "Option Successfully Added."
714
  msgstr ""
715
 
716
- #: includes/helper.php:4512
717
  msgid "Option Already Added."
718
  msgstr ""
719
 
720
- #: includes/helper.php:5247
721
  msgid "Delivery up to 30 days"
722
  msgstr ""
723
 
724
- #: includes/helper.php:5245
725
  msgid "Delivery 1 to 3 days"
726
  msgstr ""
727
 
728
- #: includes/helper.php:5350
729
  msgid "Feed data is empty. Can't duplicate feed."
730
  msgstr ""
731
 
732
- #: includes/helper.php:5366
733
  msgid "Unable to save the duplicate feed data."
734
  msgstr ""
735
 
736
- #: includes/helper.php:5376
737
  msgid "Feed Successfully Duplicated, but unable to generate the data file. Please click the \"Regenerate Button\""
738
  msgstr ""
739
 
16
  msgid "Unauthorized Action."
17
  msgstr ""
18
 
19
+ #: woo-feed.php:141, woo-feed.php:260, includes/helper.php:853, includes/helper.php:1904, includes/helper.php:2949, includes/helper.php:2978, includes/helper.php:3366, includes/helper.php:3564, includes/helper.php:3592, includes/helper.php:4845, includes/helper.php:5354
20
  msgid "Invalid Request."
21
  msgstr ""
22
 
709
  msgid "Choose from the most used"
710
  msgstr ""
711
 
712
+ #: includes/helper.php:4533
713
  msgid "Option Successfully Added."
714
  msgstr ""
715
 
716
+ #: includes/helper.php:4524
717
  msgid "Option Already Added."
718
  msgstr ""
719
 
720
+ #: includes/helper.php:5259
721
  msgid "Delivery up to 30 days"
722
  msgstr ""
723
 
724
+ #: includes/helper.php:5257
725
  msgid "Delivery 1 to 3 days"
726
  msgstr ""
727
 
728
+ #: includes/helper.php:5362
729
  msgid "Feed data is empty. Can't duplicate feed."
730
  msgstr ""
731
 
732
+ #: includes/helper.php:5378
733
  msgid "Unable to save the duplicate feed data."
734
  msgstr ""
735
 
736
+ #: includes/helper.php:5388
737
  msgid "Feed Successfully Duplicated, but unable to generate the data file. Please click the \"Regenerate Button\""
738
  msgstr ""
739
 
woo-feed.php CHANGED
@@ -10,7 +10,7 @@
10
  * Plugin Name: CTX Feed
11
  * Plugin URI: https://webappick.com/
12
  * Description: Easily generate woocommerce product feed for any marketing channel like Google Shopping(Merchant), Facebook Remarketing, Bing, eBay & more. Support 100+ Merchants.
13
- * Version: 4.4.47
14
  * Author: WebAppick
15
  * Author URI: https://webappick.com/
16
  * License: GPL v2
@@ -896,67 +896,67 @@ if ( ! function_exists( 'woo_feed_flash_cache_action' ) ) {
896
  }
897
  }
898
 
899
- // Suggest other plugins of webappick.
900
  if ( ! class_exists( 'webappick_suggest_plugin' ) ) {
901
- class webappick_suggest_plugin {
902
 
903
- static function init() {
904
- if ( is_admin() ) {
905
- if ( ! is_plugin_active('xt-woo-variation-swatches/xt-woo-variation-swatches.php') ) {
906
  add_filter( 'install_plugins_table_api_args_featured', array( __CLASS__, 'featured_plugins_tab' ) );
907
  }
908
- }
909
- } // init
910
- // add our plugins to recommended list
911
- static function plugins_api_result( $res, $action, $args ) {
912
- remove_filter( 'plugins_api_result', array( __CLASS__, 'plugins_api_result' ), 10, 1 );
913
- $res = self::add_plugin_favs( 'webappick-pdf-invoice-for-woocommerce', $res );
914
-
915
- return $res;
916
- } // plugins_api_result
917
- // helper function for adding plugins to fav list
918
- static function featured_plugins_tab( $args ) {
919
- add_filter( 'plugins_api_result', array( __CLASS__, 'plugins_api_result' ), 10, 3 );
920
- return $args;
921
- } // featured_plugins_tab
922
- // add single plugin to list of favs
923
- static function add_plugin_favs( $plugin_slug, $res ) {
924
- if ( ! empty( $res->plugins ) && is_array( $res->plugins ) ) {
925
- foreach ( $res->plugins as $plugin ) {
926
- if ( is_object( $plugin ) && ! empty( $plugin->slug ) && $plugin->slug === $plugin_slug ) {
927
- return $res;
928
- }
929
- } // foreach
930
- }
931
- $plugin_info = get_transient( 'wf-plugin-info-' . $plugin_slug );
932
- if ( $plugin_info ) {
933
- array_unshift( $res->plugins, $plugin_info );
934
- } else {
935
- $plugin_info = plugins_api(
936
- 'plugin_information',
937
- array(
938
- 'slug' => $plugin_slug,
939
- 'is_ssl' => is_ssl(),
940
- 'fields' => array(
941
- 'banners' => true,
942
- 'reviews' => true,
943
- 'downloaded' => true,
944
- 'active_installs' => true,
945
- 'icons' => true,
946
- 'short_description' => true,
947
- ),
948
- )
949
- );
950
- if ( ! is_wp_error( $plugin_info ) ) {
951
- $res->plugins[] = $plugin_info;
952
- set_transient( 'wf-plugin-info-' . $plugin_slug, $plugin_info, DAY_IN_SECONDS * 7 );
953
- }
954
- }
955
- return $res;
956
- } // add_plugin_favs
957
- }
958
- add_action( 'init', array( 'webappick_suggest_plugin', 'init' ) );
959
  }
 
960
 
961
  register_deactivation_hook( __FILE__, 'woo_feed_deactivate' );
962
  if ( ! function_exists( 'woo_feed_deactivate' ) ) {
10
  * Plugin Name: CTX Feed
11
  * Plugin URI: https://webappick.com/
12
  * Description: Easily generate woocommerce product feed for any marketing channel like Google Shopping(Merchant), Facebook Remarketing, Bing, eBay & more. Support 100+ Merchants.
13
+ * Version: 4.4.50
14
  * Author: WebAppick
15
  * Author URI: https://webappick.com/
16
  * License: GPL v2
896
  }
897
  }
898
 
 
899
  if ( ! class_exists( 'webappick_suggest_plugin' ) ) {
900
+ class webappick_suggest_plugin {
901
 
902
+ static function init() {
903
+ if ( is_admin() ) {
904
+ if ( ! is_plugin_active('xt-woo-variation-swatches/xt-woo-variation-swatches.php') ) {
905
  add_filter( 'install_plugins_table_api_args_featured', array( __CLASS__, 'featured_plugins_tab' ) );
906
  }
907
+ }
908
+ } // init
909
+ // add our plugins to recommended list
910
+ static function plugins_api_result( $res, $action, $args ) {
911
+ remove_filter( 'plugins_api_result', array( __CLASS__, 'plugins_api_result' ), 10, 1 );
912
+ $res = self::add_plugin_favs( 'webappick-pdf-invoice-for-woocommerce', $res );
913
+
914
+ return $res;
915
+ } // plugins_api_result
916
+ // helper function for adding plugins to fav list
917
+ static function featured_plugins_tab( $args ) {
918
+ add_filter( 'plugins_api_result', array( __CLASS__, 'plugins_api_result' ), 10, 3 );
919
+ return $args;
920
+ } // featured_plugins_tab
921
+ // add single plugin to list of favs
922
+ static function add_plugin_favs( $plugin_slug, $res ) {
923
+ if ( ! empty( $res->plugins ) && is_array( $res->plugins ) ) {
924
+ foreach ( $res->plugins as $plugin ) {
925
+ if ( is_object( $plugin ) && ! empty( $plugin->slug ) && $plugin->slug === $plugin_slug ) {
926
+ return $res;
927
+ }
928
+ } // foreach
929
+ }
930
+ $plugin_info = get_transient( 'wf-plugin-info-' . $plugin_slug );
931
+ if ( $plugin_info ) {
932
+ array_unshift( $res->plugins, $plugin_info );
933
+ } else {
934
+ $plugin_info = plugins_api(
935
+ 'plugin_information',
936
+ array(
937
+ 'slug' => $plugin_slug,
938
+ 'is_ssl' => is_ssl(),
939
+ 'fields' => array(
940
+ 'banners' => true,
941
+ 'reviews' => true,
942
+ 'downloaded' => true,
943
+ 'active_installs' => true,
944
+ 'icons' => true,
945
+ 'short_description' => true,
946
+ ),
947
+ )
948
+ );
949
+ if ( ! is_wp_error( $plugin_info ) ) {
950
+ $res->plugins[] = $plugin_info;
951
+ set_transient( 'wf-plugin-info-' . $plugin_slug, $plugin_info, DAY_IN_SECONDS * 7 );
952
+ }
953
+ }
954
+ return $res;
955
+ } // add_plugin_favs
956
+ }
957
+ add_action( 'init', array( 'webappick_suggest_plugin', 'init' ) );
958
  }
959
+ // Suggest other plugins of webappick.
960
 
961
  register_deactivation_hook( __FILE__, 'woo_feed_deactivate' );
962
  if ( ! function_exists( 'woo_feed_deactivate' ) ) {