Perfect Brands for WooCommerce - Version 2.1.2

Version Description

Download this release

Release Info

Developer quadlayers
Plugin Icon 128x128 Perfect Brands for WooCommerce
Version 2.1.2
Comparing to
See all releases

Code changes from version 2.1.1 to 2.1.2

includes/quadlayers/widget.php CHANGED
@@ -22,97 +22,94 @@ if ( ! class_exists( 'QL_Widget' ) ) {
22
  }
23
 
24
  public function display_dashboard_widget() {
25
- $feed_items = $this->get_feed();
26
 
27
  ?>
 
28
  <div>
29
- <div>
30
- <div style="margin-top: 11px;float: left;width: 70%;">
31
- <?php esc_html_e( 'Hi! We are Quadlayers! Welcome to QuadLayers! We’re a team of international people who have been working in the WordPress sphere for the last ten years.', 'perfect-woocommerce-brands' ); ?>
32
- <div style="margin-top: 11px; float: left; width: 70%;"><a href="<?php echo esc_url( admin_url( 'admin.php?page=' . PWB_PREFIX . '_suggestions' ) ); ?>" target="_blank" class="button button-secondary"><?php esc_html_e( 'More products', 'perfect-woocommerce-brands' ); ?></a></div>
33
- </div>
34
- <img style="width: 30%;margin-top: 11px;float: right; max-width: 95px;" src="<?php echo esc_url( plugins_url( '/assets/img/quadlayers.jpg', PWB_PLUGIN_FILE ) ); ?>" />
35
  </div>
36
- <div style="clear: both;"></div>
37
  </div>
38
- <div style="margin: 16px -12px 0; padding: 12px 12px 0;border-top: 1px solid #eee;">
39
- <ul>
40
- <?php if ( is_array( $feed_items ) ) { ?>
41
- <?php
42
- foreach ( $feed_items as $item ) {
43
-
44
- $link = $item['link'];
45
- while ( stristr( $link, 'http' ) !== $link ) {
46
- $link = substr( $link, 1 );
47
- }
48
-
49
- $link = esc_url( wp_strip_all_tags( $link . '?utm_source=ql_dashboard' ) );
50
- $title = esc_html( trim( wp_strip_all_tags( $item['title'] ) ) );
51
-
52
- if ( empty( $title ) ) {
53
- $title = __( 'Untitled', 'perfect-woocommerce-brands' );
54
- }
55
-
56
- $desc = html_entity_decode( $item['desc'], ENT_QUOTES, get_option( 'blog_charset' ) );
57
- $desc = esc_attr( wp_trim_words( $desc, 15, '...' ) );
58
- $summary = $desc;
59
- $summary = '<div class="rssSummary">' . $summary . '</div>';
60
- $date = $item['date'];
61
- if ( $date ) {
62
- $date = '<span class="rss-date">' . date_i18n( get_option( 'date_format' ), $date ) . '</span>';
63
- }
64
- $author = $item['author'];
65
- $author = ucfirst( $author );
66
- $author = ' <cite>' . esc_html( wp_strip_all_tags( $author ) ) . '</cite>';
67
- printf( '<li><a href="%1$s" target="_blank">%2$s </a>%3$s%4$s%5$s</li>', esc_url( $link ), esc_html( $title ), esc_html( $date ), esc_html( $summary ), esc_html( $author ) );
68
  }
69
- ?>
70
- <?php
71
- } else {
72
- printf( '<li>%s</li>', esc_html( $feed_items ) );
 
 
 
 
 
 
 
 
 
 
 
 
73
  }
74
  ?>
75
- </ul>
76
- </div>
77
- <div style="display: flex; justify-content: space-between;align-items: center;margin: 16px -12px 0;padding: 12px 12px 0; border-top: 1px solid #eee;">
78
- <a href="<?php printf( 'https://quadlayers.com/blog/?utm_source=%s&utm_medium=software&utm_campaign=wordpress&utm_content=dashboard', 'perfect-woocommerce-brands' ); ?>" target="_blank"><?php esc_html_e( 'Read more like this on our blog', 'perfect-woocommerce-brands' ); ?></a>
79
- <a class="button-primary" href="<?php printf( 'https://quadlayers.com/?utm_source=%s&utm_medium=software&utm_campaign=wordpress&utm_content=dashboard', 'perfect-woocommerce-brands' ); ?>" target="_blank"><?php esc_html_e( 'QuadLayers', 'perfect-woocommerce-brands' ); ?></a>
80
- </div>
 
 
 
 
 
81
  <?php
82
  }
83
 
84
  public function get_feed() {
85
- $rss_items = get_transient( 'quadlayers_news_feed' );
86
 
87
- if ( $rss_items === false ) {
88
- $rss = fetch_feed( 'https://quadlayers.com/news/feed/' );
 
 
 
89
 
90
- if ( is_wp_error( $rss ) ) {
91
  return 'An error has occurred, which probably means the feed is down. Try again later';
92
  }
93
 
94
- if ( ! $rss->get_item_quantity() ) {
95
- $rss->__destruct();
96
- unset( $rss );
97
  return 'An error has occurred, which probably means the feed is down. Try again later';
98
  }
99
 
100
- $rss_items = array();
101
 
102
- foreach ( $rss->get_items( 0, 3 ) as $item ) {
103
- $rss_items[] = array(
104
- 'link' => $item->get_link(),
105
- 'author' => $item->get_author()->get_name(),
106
- 'title' => $item->get_title(),
107
- 'desc' => $item->get_description(),
108
- 'date' => $item->get_date( 'U' ),
109
  );
110
  }
111
 
112
- set_transient( 'quadlayers_news_feed', $rss_items, DAY_IN_SECONDS );
113
  }
114
 
115
- return $rss_items;
116
  }
117
 
118
  public static function instance() {
@@ -123,6 +120,6 @@ if ( ! class_exists( 'QL_Widget' ) ) {
123
  }
124
  }
125
 
126
-
127
  QL_Widget::instance();
 
128
  }
22
  }
23
 
24
  public function display_dashboard_widget() {
25
+ $posts = $this->get_feed();
26
 
27
  ?>
28
+ <div>
29
  <div>
30
+ <div style="margin-top: 11px;float: left;width: 70%;">
31
+ <?php esc_html_e( 'Hi! We are Quadlayers! Welcome to QuadLayers! We’re a team of international people who have been working in the WordPress sphere for the last ten years.', 'perfect-woocommerce-brands' ); ?>
32
+ <div style="margin-top: 11px; float: left; width: 70%;"><a href="<?php echo admin_url( 'admin.php?page=' . PWB_PREFIX . '_suggestions' ); ?>" target="_blank" class="button button-secondary"><?php esc_html_e( 'More products', 'perfect-woocommerce-brands' ); ?></a></div>
 
 
 
33
  </div>
34
+ <img style="width: 30%;margin-top: 11px;float: right; max-width: 95px;" src="<?php echo plugins_url( '/assets/backend/img/quadlayers.jpg', PWB_PLUGIN_FILE ); ?>" />
35
  </div>
36
+ <div style="clear: both;"></div>
37
+ </div>
38
+ <div style="margin: 16px -12px 0; padding: 12px 12px 0;border-top: 1px solid #eee;">
39
+ <ul>
40
+ <?php if ( is_array( $posts ) ) { ?>
41
+ <?php
42
+ foreach ( $posts as $post ) {
43
+
44
+ $link = $post['link'];
45
+ while ( stristr( $link, 'http' ) !== $link ) {
46
+ $link = substr( $link, 1 );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
47
  }
48
+
49
+ $link = esc_url( strip_tags( $link . '?utm_source=ql_dashboard' ) );
50
+ $title = esc_html( trim( strip_tags( $post['title'] ) ) );
51
+
52
+ if ( empty( $title ) ) {
53
+ $title = __( 'Untitled', 'perfect-woocommerce-brands' );
54
+ }
55
+
56
+ $excerpt = esc_attr( wp_trim_words( $post['excerpt'], 15, '...' ) );
57
+ $summary = '<p class="rssSummary">' . $excerpt . '</p>';
58
+ $date = $post['date'];
59
+ if ( $date ) {
60
+ $date = ' - <span class="rss-date">' . date_i18n( get_option( 'date_format' ), $date ) . '</span>';
61
+ }
62
+
63
+ printf( __( '<li><strong><a href="%1$s" target="_blank">%2$s</a></strong>%3$s%4$s</li>', 'perfect-woocommerce-brands' ), $link, $title, $date, $summary );
64
  }
65
  ?>
66
+ <?php
67
+ } else {
68
+ printf( __( '<li>%s</li>', 'perfect-woocommerce-brands' ), $posts );
69
+ }
70
+ ?>
71
+ </ul>
72
+ </div>
73
+ <div style="display: flex; justify-content: space-between;align-items: center;margin: 16px -12px 0;padding: 12px 12px 0; border-top: 1px solid #eee;">
74
+ <a href="<?php printf( 'https://quadlayers.com/blog/?utm_source=%s&utm_medium=software&utm_campaign=wordpress&utm_content=dashboard', PWB_PREFIX ); ?>" target="_blank"><?php esc_html_e( 'Read more like this on our blog', 'perfect-woocommerce-brands' ); ?></a>
75
+ <a class="button-primary" href="<?php printf( 'https://quadlayers.com/?utm_source=%s&utm_medium=software&utm_campaign=wordpress&utm_content=dashboard', PWB_PREFIX ); ?>" target="_blank"><?php esc_html_e( 'QuadLayers', 'perfect-woocommerce-brands' ); ?></a>
76
+ </div>
77
  <?php
78
  }
79
 
80
  public function get_feed() {
 
81
 
82
+ $posts = get_transient( 'quadlayers_news_feed' );
83
+
84
+ if ( false === $posts ) {
85
+
86
+ $response = wp_remote_get( 'https://quadlayers.com/wp-json/wp/v2/posts?categories=1&per_page=3' );
87
 
88
+ if ( is_wp_error( $response ) || ! isset( $response['body'] ) ) {
89
  return 'An error has occurred, which probably means the feed is down. Try again later';
90
  }
91
 
92
+ $posts_array = json_decode( wp_remote_retrieve_body( $response ), true );
93
+
94
+ if ( ! is_array( $posts_array ) ) {
95
  return 'An error has occurred, which probably means the feed is down. Try again later';
96
  }
97
 
98
+ $posts = array();
99
 
100
+ foreach ( $posts_array as $post ) {
101
+ $posts[] = array(
102
+ 'link' => $post['link'],
103
+ 'title' => $post['title']['rendered'],
104
+ 'excerpt' => $post['excerpt']['rendered'],
105
+ 'date' => strtotime( $post['date'], time() ),
 
106
  );
107
  }
108
 
109
+ set_transient( 'quadlayers_news_feed', $posts, DAY_IN_SECONDS );
110
  }
111
 
112
+ return $posts;
113
  }
114
 
115
  public static function instance() {
120
  }
121
  }
122
 
 
123
  QL_Widget::instance();
124
+
125
  }
perfect-woocommerce-brands.php CHANGED
@@ -4,7 +4,7 @@
4
  * Plugin Name: Perfect Brands for WooCommerce
5
  * Plugin URI: https://quadlayers.com/portfolio/perfect-woocommerce-brands/
6
  * Description: Perfect WooCommerce Brands allows you to show product brands in your WooCommerce based store.
7
- * Version: 2.1.1
8
  * Author: QuadLayers
9
  * Author URI: https://quadlayers.com
10
  * Text Domain: perfect-woocommerce-brands
@@ -36,7 +36,7 @@ define( 'PWB_PLUGIN_FILE', __FILE__ );
36
  define( 'PWB_PLUGIN_URL', plugins_url( '', __FILE__ ) );
37
  define( 'PWB_PLUGIN_DIR', __DIR__ . DIRECTORY_SEPARATOR );
38
  define( 'PWB_PLUGIN_BASENAME', plugin_basename( __FILE__ ) );
39
- define( 'PWB_PLUGIN_VERSION', '2.1.1' );
40
  define( 'PWB_PLUGIN_NAME', 'Perfect WooCommerce Brands' );
41
  define( 'PWB_PREFIX', 'pwb' );
42
  define( 'PWB_REVIEW_URL', 'https://wordpress.org/support/plugin/perfect-woocommerce-brands/reviews/?filter=5#new-post' );
@@ -71,9 +71,7 @@ add_action(
71
  );
72
 
73
 
74
- if ( ! class_exists( 'QL_Widget' ) ) {
75
- include_once PWB_PLUGIN_DIR . 'includes/quadlayers/widget.php';
76
- }
77
 
78
  require_once ABSPATH . 'wp-admin/includes/plugin.php';
79
  if ( is_plugin_active( 'woocommerce/woocommerce.php' ) ) {
4
  * Plugin Name: Perfect Brands for WooCommerce
5
  * Plugin URI: https://quadlayers.com/portfolio/perfect-woocommerce-brands/
6
  * Description: Perfect WooCommerce Brands allows you to show product brands in your WooCommerce based store.
7
+ * Version: 2.1.2
8
  * Author: QuadLayers
9
  * Author URI: https://quadlayers.com
10
  * Text Domain: perfect-woocommerce-brands
36
  define( 'PWB_PLUGIN_URL', plugins_url( '', __FILE__ ) );
37
  define( 'PWB_PLUGIN_DIR', __DIR__ . DIRECTORY_SEPARATOR );
38
  define( 'PWB_PLUGIN_BASENAME', plugin_basename( __FILE__ ) );
39
+ define( 'PWB_PLUGIN_VERSION', '2.1.2' );
40
  define( 'PWB_PLUGIN_NAME', 'Perfect WooCommerce Brands' );
41
  define( 'PWB_PREFIX', 'pwb' );
42
  define( 'PWB_REVIEW_URL', 'https://wordpress.org/support/plugin/perfect-woocommerce-brands/reviews/?filter=5#new-post' );
71
  );
72
 
73
 
74
+ require_once PWB_PLUGIN_DIR . 'includes/quadlayers/widget.php';
 
 
75
 
76
  require_once ABSPATH . 'wp-admin/includes/plugin.php';
77
  if ( is_plugin_active( 'woocommerce/woocommerce.php' ) ) {
readme.txt CHANGED
@@ -5,7 +5,7 @@ Tags: woocommerce, woocommerce brands, woocommerce product, woocommerce manufact
5
  Requires at least: 4.7
6
  Tested up to: 6.0
7
  Requires PHP: 5.6
8
- Stable tag: 2.1.1
9
  WC requires at least: 3.0
10
  WC tested up to: 6.6.1
11
  License: GPLv3
@@ -90,6 +90,8 @@ You can also contribute [translating the plugin](https://translate.wordpress.org
90
 
91
 
92
  == Changelog ==
 
 
93
  = 2.1.1 =
94
  * Fix: WooCommerce Brands carousel
95
  = 2.1.0 =
5
  Requires at least: 4.7
6
  Tested up to: 6.0
7
  Requires PHP: 5.6
8
+ Stable tag: 2.1.2
9
  WC requires at least: 3.0
10
  WC tested up to: 6.6.1
11
  License: GPLv3
90
 
91
 
92
  == Changelog ==
93
+ = 2.1.2=
94
+ * Fix: QuadLayers widget cache
95
  = 2.1.1 =
96
  * Fix: WooCommerce Brands carousel
97
  = 2.1.0 =