Instagram Feed - Version 2.9.8

Version Description

  • Tweak: Added a warning if the access token could not be decrypted for use in API requests.
  • Tweak: Added a fallback method to reach the Instagram API if a cURL error 6 error is detected.
  • Fix: Fixed an issue with connecting an additional business account if the first account listed was not selected.
Download this release

Release Info

Developer smashballoon
Plugin Icon 128x128 Instagram Feed
Version 2.9.8
Comparing to
See all releases

Code changes from version 2.9.7 to 2.9.8

README.txt CHANGED
@@ -3,7 +3,7 @@ Contributors: smashballoon, craig-at-smash-balloon
3
  Tags: Instagram, Instagram feed, Instagram photos, Instagram widget, Instagram gallery
4
  Requires at least: 3.4
5
  Tested up to: 5.8
6
- Stable tag: 2.9.7
7
  License: GPLv2 or later
8
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
9
 
@@ -331,6 +331,11 @@ We understand that sometimes you need help, have issues or just have questions.
331
  * Plus more customization options added all the time!
332
 
333
  == Changelog ==
 
 
 
 
 
334
  = 2.9.7 =
335
  * Tweak: A prompt will now be displayed if the ability to save settings requires a page refresh.
336
  * Fix: Fixed several accessibility issues in the admin area.
3
  Tags: Instagram, Instagram feed, Instagram photos, Instagram widget, Instagram gallery
4
  Requires at least: 3.4
5
  Tested up to: 5.8
6
+ Stable tag: 2.9.8
7
  License: GPLv2 or later
8
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
9
 
331
  * Plus more customization options added all the time!
332
 
333
  == Changelog ==
334
+ = 2.9.8 =
335
+ * Tweak: Added a warning if the access token could not be decrypted for use in API requests.
336
+ * Tweak: Added a fallback method to reach the Instagram API if a cURL error 6 error is detected.
337
+ * Fix: Fixed an issue with connecting an additional business account if the first account listed was not selected.
338
+
339
  = 2.9.7 =
340
  * Tweak: A prompt will now be displayed if the ability to save settings requires a page refresh.
341
  * Fix: Fixed several accessibility issues in the admin area.
css/sb-instagram-admin.css CHANGED
@@ -768,7 +768,7 @@
768
  font-size: 12px;
769
  padding: 4px 4px 4px 8px;
770
  vertical-align: top;
771
- margin: 4px 5px 0 0;
772
  border-radius: 4px;
773
 
774
  background: #fdf4e5;
@@ -2869,4 +2869,4 @@
2869
  padding: 0 24%;
2870
  font-size: 16px;
2871
  margin-bottom: 0px;
2872
- }
768
  font-size: 12px;
769
  padding: 4px 4px 4px 8px;
770
  vertical-align: top;
771
+ margin: 6px 5px 0 0;
772
  border-radius: 4px;
773
 
774
  background: #fdf4e5;
2869
  padding: 0 24%;
2870
  font-size: 16px;
2871
  margin-bottom: 0px;
2872
+ }
inc/admin/actions.php CHANGED
@@ -147,6 +147,7 @@ function sbi_connect_business_accounts() {
147
  }
148
 
149
  $raw_accounts = ! empty( $_POST['accounts'] ) ? json_decode( wp_unslash( $_POST['accounts'] ), true ) : array();
 
150
  $access_token = ! empty( $raw_accounts[0] ) ? sbi_sanitize_alphanumeric_and_equals( $raw_accounts[0]['access_token'] ) : '';
151
  if ( empty( $access_token ) ) {
152
  wp_send_json_success( 'No access token' );
147
  }
148
 
149
  $raw_accounts = ! empty( $_POST['accounts'] ) ? json_decode( wp_unslash( $_POST['accounts'] ), true ) : array();
150
+ $raw_accounts = array_values( $raw_accounts );
151
  $access_token = ! empty( $raw_accounts[0] ) ? sbi_sanitize_alphanumeric_and_equals( $raw_accounts[0]['access_token'] ) : '';
152
  if ( empty( $access_token ) ) {
153
  wp_send_json_success( 'No access token' );
inc/admin/class-sbi-account-connector.php CHANGED
@@ -98,14 +98,14 @@ class SBI_Account_Connector {
98
  }
99
 
100
  $connection = new SB_Instagram_API_Connect( $data, 'header', array() );
101
- $connection->connect();
102
 
103
  if ( ! $connection->is_wp_error() && ! $connection->is_instagram_error() ) {
104
  $new_data = $connection->get_data();
105
 
106
  if ( $data['type'] === 'basic' ) {
107
  $basic_account_access_token_connect = new SB_Instagram_API_Connect( $data, 'access_token', array() );
108
- $basic_account_access_token_connect->connect();
109
  $token_data = $basic_account_access_token_connect->get_data();
110
 
111
  if ( ! $basic_account_access_token_connect->is_wp_error() && ! $basic_account_access_token_connect->is_instagram_error() ) {
98
  }
99
 
100
  $connection = new SB_Instagram_API_Connect( $data, 'header', array() );
101
+ $connection->wp_http_connect();
102
 
103
  if ( ! $connection->is_wp_error() && ! $connection->is_instagram_error() ) {
104
  $new_data = $connection->get_data();
105
 
106
  if ( $data['type'] === 'basic' ) {
107
  $basic_account_access_token_connect = new SB_Instagram_API_Connect( $data, 'access_token', array() );
108
+ $basic_account_access_token_connect->wp_http_connect();
109
  $token_data = $basic_account_access_token_connect->get_data();
110
 
111
  if ( ! $basic_account_access_token_connect->is_wp_error() && ! $basic_account_access_token_connect->is_instagram_error() ) {
inc/admin/main.php CHANGED
@@ -903,10 +903,37 @@ function sb_instagram_settings_page() {
903
  SBI_Account_Connector::maybe_launch_modals( $sb_instagram_user_id );
904
  if ( isset( $_POST['sbi_connect_username'] ) ) {
905
  $new_user_name = sanitize_text_field( wp_unslash( $_POST['sbi_connect_username'] ) );
906
- $new_account_details = json_decode( wp_unslash( $_POST['sbi_account_json'] ), true );
907
  array_map( 'sanitize_text_field', $new_account_details );
908
 
909
- $updated_options = sbi_connect_basic_account( $new_account_details );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
910
  $connected_accounts = $updated_options['connected_accounts'];
911
  $user_feed_ids = $updated_options['sb_instagram_user_id'];
912
  }
@@ -973,7 +1000,7 @@ function sb_instagram_settings_page() {
973
  else :
974
  $doing_account_error_messages = count( $connected_accounts ) > 1;
975
  global $sb_instagram_posts_manager;
976
-
977
  ?>
978
  <?php
979
  foreach ( $connected_accounts as $account ) :
@@ -1029,6 +1056,7 @@ function sb_instagram_settings_page() {
1029
  <span><i class="fa fa-exclamation-circle" aria-hidden="true"></i><?php esc_html_e( 'Feeds using this account might not be updating due to an error. Try viewing these feeds after reconnecting the account and saving your settings below.', 'instagram-feed' ); ?></span>
1030
  </div>
1031
  <?php endif; ?>
 
1032
  <div class="sbi_ca_alert">
1033
  <span><?php esc_html_e( 'The Access Token for this account is expired or invalid. Click the button above to attempt to renew it.', 'instagram-feed' ); ?></span>
1034
  </div>
@@ -1065,6 +1093,19 @@ function sb_instagram_settings_page() {
1065
  </div>
1066
  <p class="sbi_tooltip sbi-more-info" style="display: none; width: 100%; box-sizing: border-box;"><?php echo wp_kses_post( sprintf( __( 'This account is a "private" account on Instagram. It needs to be manually reconnected every 60 days. %1$sChange this account to be "public"%2$s to have access tokens that are automatically refreshed.', 'instagram-feed' ), '<a href="https://help.instagram.com/116024195217477/In" target="_blank">', '</a>' ) ); ?></p>
1067
  <?php endif; ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
1068
 
1069
  </div>
1070
 
903
  SBI_Account_Connector::maybe_launch_modals( $sb_instagram_user_id );
904
  if ( isset( $_POST['sbi_connect_username'] ) ) {
905
  $new_user_name = sanitize_text_field( wp_unslash( $_POST['sbi_connect_username'] ) );
906
+ $new_account_details = json_decode( stripslashes( $_POST['sbi_account_json'] ), true );
907
  array_map( 'sanitize_text_field', $new_account_details );
908
 
909
+ $basic_account_access_token_connect = new SB_Instagram_API_Connect( $new_account_details, 'access_token', array() );
910
+ $basic_account_access_token_connect->wp_http_connect();
911
+ $token_data = $basic_account_access_token_connect->get_data();
912
+
913
+ if ( ! $basic_account_access_token_connect->is_wp_error() && ! $basic_account_access_token_connect->is_instagram_error() ) {
914
+ $expires_in = $token_data['expires_in'];
915
+ $expires_timestamp = time() + $expires_in;
916
+ } else {
917
+ $expires_timestamp = time() + 60 * DAY_IN_SECONDS;
918
+ }
919
+
920
+ $basic_account_access_token_connect = new SB_Instagram_API_Connect( $new_account_details, 'header', array() );
921
+ $basic_account_access_token_connect->wp_http_connect();
922
+ $new_data = $basic_account_access_token_connect->get_data();
923
+ if ( $basic_account_access_token_connect->is_wp_error() || $basic_account_access_token_connect->is_instagram_error() ) {
924
+ return;
925
+ }
926
+ $api_account_details = array(
927
+ 'access_token' => $new_account_details['access_token'],
928
+ 'account_type' => 'personal',
929
+ 'user_id' => $new_account_details['user_id'],
930
+ 'username' => $new_data['username'],
931
+ 'expires_timestamp' => $expires_timestamp,
932
+ 'type' => 'basic',
933
+ 'profile_picture' => '',
934
+ );
935
+
936
+ $updated_options = sbi_connect_basic_account( $api_account_details );
937
  $connected_accounts = $updated_options['connected_accounts'];
938
  $user_feed_ids = $updated_options['sb_instagram_user_id'];
939
  }
1000
  else :
1001
  $doing_account_error_messages = count( $connected_accounts ) > 1;
1002
  global $sb_instagram_posts_manager;
1003
+ $encryption = new SB_Instagram_Data_Encryption();
1004
  ?>
1005
  <?php
1006
  foreach ( $connected_accounts as $account ) :
1056
  <span><i class="fa fa-exclamation-circle" aria-hidden="true"></i><?php esc_html_e( 'Feeds using this account might not be updating due to an error. Try viewing these feeds after reconnecting the account and saving your settings below.', 'instagram-feed' ); ?></span>
1057
  </div>
1058
  <?php endif; ?>
1059
+
1060
  <div class="sbi_ca_alert">
1061
  <span><?php esc_html_e( 'The Access Token for this account is expired or invalid. Click the button above to attempt to renew it.', 'instagram-feed' ); ?></span>
1062
  </div>
1093
  </div>
1094
  <p class="sbi_tooltip sbi-more-info" style="display: none; width: 100%; box-sizing: border-box;"><?php echo wp_kses_post( sprintf( __( 'This account is a "private" account on Instagram. It needs to be manually reconnected every 60 days. %1$sChange this account to be "public"%2$s to have access tokens that are automatically refreshed.', 'instagram-feed' ), '<a href="https://help.instagram.com/116024195217477/In" target="_blank">', '</a>' ) ); ?></p>
1095
  <?php endif; ?>
1096
+ <?php
1097
+ $show_encryption_warning = false;
1098
+ if ( isset( $account['access_token'] ) && strpos( $account['access_token'], 'IG' ) === false && strpos( $account['access_token'], 'EA' ) === false && ! $encryption->decrypt( $account['access_token'] ) ) {
1099
+ $show_encryption_warning = true;
1100
+ }
1101
+ if ( $show_encryption_warning ) :
1102
+ ?>
1103
+ <div class="sbi_alert sbi_is_private">
1104
+ <span><?php esc_html_e( 'Could not decrypt access token. Please reconnect this account.', 'instagram-feed' ); ?></span>
1105
+ </div>
1106
+ <?php
1107
+ endif;
1108
+ ?>
1109
 
1110
  </div>
1111
 
inc/class-sb-instagram-api-connect.php CHANGED
@@ -32,6 +32,11 @@ class SB_Instagram_API_Connect
32
  */
33
  protected $response;
34
 
 
 
 
 
 
35
  /**
36
  * SB_Instagram_API_Connect constructor.
37
  *
@@ -194,6 +199,40 @@ class SB_Instagram_API_Connect
194
  $response = json_decode( str_replace( '%22', '&rdquo;', $response['body'] ), true );
195
  }
196
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
197
  $this->response = $response;
198
  }
199
 
@@ -234,6 +273,15 @@ class SB_Instagram_API_Connect
234
  $sb_instagram_posts_manager->add_error( 'wp_remote_get', $response );
235
  }
236
 
 
 
 
 
 
 
 
 
 
237
  /**
238
  * Sets the url for the API request based on the account information,
239
  * type of data needed, and additional parameters.
@@ -252,28 +300,39 @@ class SB_Instagram_API_Connect
252
  $num = ! empty( $params['num'] ) ? (int) $params['num'] : 33;
253
 
254
  if ( $account_type === 'basic' ) {
255
- if ( $endpoint_slug === 'access_token' ) {
256
- $url = 'https://graph.instagram.com/refresh_access_token?grant_type=ig_refresh_token&access_token=' . sbi_maybe_clean( $connected_account['access_token'] );
257
- } elseif ( $endpoint_slug === 'header' ) {
258
- $url = 'https://graph.instagram.com/me?fields=id,username,media_count&access_token=' . sbi_maybe_clean( $connected_account['access_token'] );
 
259
  } else {
260
- $num = min( $num, 200 );
261
- $url = 'https://graph.instagram.com/' . sbi_maybe_clean( $connected_account['user_id'] ) . '/media?fields=media_url,thumbnail_url,caption,id,media_type,timestamp,username,comments_count,like_count,permalink,children%7Bmedia_url,id,media_type,timestamp,permalink,thumbnail_url%7D&limit=' . $num . '&access_token=' . sbi_maybe_clean( $connected_account['access_token'] );
 
 
 
 
 
 
262
  }
 
263
  } elseif ( $account_type === 'personal' ) {
264
- if ( $endpoint_slug === 'header' ) {
265
- $url = 'https://api.instagram.com/v1/users/' . $connected_account['user_id'] . '?access_token=' . sbi_maybe_clean( $connected_account['access_token'] );
266
- } else {
267
- $num = $num > 20 ? min( $num, 33 ) : 20; // minimum set at 20 due to IG TV bug
268
- $url = 'https://api.instagram.com/v1/users/' . $connected_account['user_id'] . '/media/recent?count=' . $num . '&access_token=' . sbi_maybe_clean( $connected_account['access_token'] );
269
- }
270
  } else {
271
- if ( 'header' === $endpoint_slug ) {
272
- $url = 'https://graph.facebook.com/' . $connected_account['user_id'] . '?fields=biography,id,username,website,followers_count,media_count,profile_picture_url,name&access_token=' . sbi_maybe_clean( $connected_account['access_token'] );
 
 
 
273
  } else {
274
- $num = min( $num, 200 );
275
- $url = 'https://graph.facebook.com/v10.0/' . $connected_account['user_id'] . '/media?fields=media_url,media_product_type,video_title,thumbnail_url,caption,id,media_type,timestamp,username,comments_count,like_count,permalink,children%7Bmedia_url,id,media_type,timestamp,permalink,thumbnail_url%7D&limit=' . $num . '&access_token=' . sbi_maybe_clean( $connected_account['access_token'] );
 
 
 
 
276
  }
 
277
  }
278
 
279
  $this->set_url_from_args( $url );
32
  */
33
  protected $response;
34
 
35
+ /**
36
+ * @var bool
37
+ */
38
+ protected $encryption_error;
39
+
40
  /**
41
  * SB_Instagram_API_Connect constructor.
42
  *
199
  $response = json_decode( str_replace( '%22', '&rdquo;', $response['body'] ), true );
200
  }
201
 
202
+ if ( ( is_wp_error( $response ) || empty( $response ) ) && ini_get( 'allow_url_fopen' ) && function_exists( 'file_get_contents' ) ) {
203
+ $raw_response = file_get_contents( $this->url );
204
+ $decoded_response = json_decode( str_replace( '%22', '&rdquo;', $raw_response ), true );
205
+ if ( is_array( $decoded_response ) ) {
206
+ $response = $decoded_response;
207
+ } else {
208
+ $response = $raw_response;
209
+ }
210
+ }
211
+
212
+ $this->response = $response;
213
+ }
214
+
215
+ /**
216
+ * Connect to the Instagram API and record the response
217
+ */
218
+ public function wp_http_connect() {
219
+ if ( empty( $this->url ) ) {
220
+ $this->response = array();
221
+ return;
222
+ }
223
+ $args = array(
224
+ 'timeout' => 20,
225
+ );
226
+ if ( version_compare( get_bloginfo( 'version' ), '3.7', '<' ) ) {
227
+ $args['sslverify'] = false;
228
+ }
229
+ $response = wp_remote_get( $this->url, $args );
230
+
231
+ if ( ! is_wp_error( $response ) ) {
232
+ // certain ways of representing the html for double quotes causes errors so replaced here.
233
+ $response = json_decode( str_replace( '%22', '&rdquo;', $response['body'] ), true );
234
+ }
235
+
236
  $this->response = $response;
237
  }
238
 
273
  $sb_instagram_posts_manager->add_error( 'wp_remote_get', $response );
274
  }
275
 
276
+ /**
277
+ * Determines how and where to record an error connecting to a specified url
278
+ *
279
+ * @since 2.0/5.0
280
+ */
281
+ public function has_encryption_error() {
282
+ return isset( $this->encryption_error ) && $this->encryption_error;
283
+ }
284
+
285
  /**
286
  * Sets the url for the API request based on the account information,
287
  * type of data needed, and additional parameters.
300
  $num = ! empty( $params['num'] ) ? (int) $params['num'] : 33;
301
 
302
  if ( $account_type === 'basic' ) {
303
+ $access_token = sbi_maybe_clean( $connected_account['access_token'] );
304
+ if ( strpos( $access_token, 'IG' ) !== 0 ) {
305
+ $this->encryption_error = true;
306
+
307
+ $url = '';
308
  } else {
309
+ if ( $endpoint_slug === 'access_token' ) {
310
+ $url = 'https://graph.instagram.com/refresh_access_token?grant_type=ig_refresh_token&access_token=' . $access_token;
311
+ } elseif ( $endpoint_slug === 'header' ) {
312
+ $url = 'https://graph.instagram.com/me?fields=id,username,media_count&access_token=' . $access_token;
313
+ } else {
314
+ $num = min( $num, 200 );
315
+ $url = 'https://graph.instagram.com/' . $connected_account['user_id'] . '/media?fields=media_url,thumbnail_url,caption,id,media_type,timestamp,username,comments_count,like_count,permalink,children%7Bmedia_url,id,media_type,timestamp,permalink,thumbnail_url%7D&limit=' . $num . '&access_token=' . $access_token;
316
+ }
317
  }
318
+
319
  } elseif ( $account_type === 'personal' ) {
320
+ $url = '';
 
 
 
 
 
321
  } else {
322
+ $access_token = sbi_maybe_clean( $connected_account['access_token'] );
323
+ if ( strpos( $access_token, 'EA' ) !== 0 ) {
324
+ $this->encryption_error = true;
325
+
326
+ $url = '';
327
  } else {
328
+ if ( 'header' === $endpoint_slug ) {
329
+ $url = 'https://graph.facebook.com/' . $connected_account['user_id'] . '?fields=biography,id,username,website,followers_count,media_count,profile_picture_url,name&access_token=' . sbi_maybe_clean( $connected_account['access_token'] );
330
+ } else {
331
+ $num = min( $num, 200 );
332
+ $url = 'https://graph.facebook.com/v10.0/' . $connected_account['user_id'] . '/media?fields=media_url,media_product_type,video_title,thumbnail_url,caption,id,media_type,timestamp,username,comments_count,like_count,permalink,children%7Bmedia_url,id,media_type,timestamp,permalink,thumbnail_url%7D&limit=' . $num . '&access_token=' . sbi_maybe_clean( $connected_account['access_token'] );
333
+ }
334
  }
335
+
336
  }
337
 
338
  $this->set_url_from_args( $url );
inc/class-sb-instagram-feed.php CHANGED
@@ -702,9 +702,10 @@ class SB_Instagram_Feed {
702
  $this->add_report( 'api call made for ' . $term . ' - ' . $type );
703
 
704
  $connection->connect();
 
705
  $this->num_api_calls++;
706
 
707
- if ( ! $connection->is_wp_error() && ! $connection->is_instagram_error() ) {
708
  $one_successful_connection = true;
709
 
710
  if ( $type === 'hashtags_top' ) {
@@ -854,6 +855,14 @@ class SB_Instagram_Feed {
854
  } else {
855
  if ( $connection->is_wp_error() ) {
856
  SB_Instagram_API_Connect::handle_wp_remote_get_error( $connection->get_wp_error() );
 
 
 
 
 
 
 
 
857
  } else {
858
  SB_Instagram_API_Connect::handle_instagram_error( $connection->get_data(), $connected_accounts_for_feed[ $term ] );
859
  }
702
  $this->add_report( 'api call made for ' . $term . ' - ' . $type );
703
 
704
  $connection->connect();
705
+
706
  $this->num_api_calls++;
707
 
708
+ if ( ! $connection->has_encryption_error() && ! $connection->is_wp_error() && ! $connection->is_instagram_error() ) {
709
  $one_successful_connection = true;
710
 
711
  if ( $type === 'hashtags_top' ) {
855
  } else {
856
  if ( $connection->is_wp_error() ) {
857
  SB_Instagram_API_Connect::handle_wp_remote_get_error( $connection->get_wp_error() );
858
+ } elseif ( $connection->has_encryption_error() ) {
859
+ $error = array(
860
+ 'error' => array(
861
+ 'code' => '999',
862
+ 'message' => __( 'Issue decrypting the access token for this feed. Please reconnect this Instagram account.', 'instagram-feed' )
863
+ )
864
+ );
865
+ SB_Instagram_API_Connect::handle_instagram_error( $error, $connected_accounts_for_feed[ $term ] );
866
  } else {
867
  SB_Instagram_API_Connect::handle_instagram_error( $connection->get_data(), $connected_accounts_for_feed[ $term ] );
868
  }
inc/class-sb-instagram-posts-manager.php CHANGED
@@ -274,6 +274,7 @@ class SB_Instagram_Posts_Manager {
274
  100, // access token or permissions
275
  190, // access token or permissions
276
  10, // app permissions or scopes
 
277
  );
278
 
279
  return in_array( $error_code, $critical_codes, true );
274
  100, // access token or permissions
275
  190, // access token or permissions
276
  10, // app permissions or scopes
277
+ 999, // encryption
278
  );
279
 
280
  return in_array( $error_code, $critical_codes, true );
inc/class-sb-instagram-settings.php CHANGED
@@ -910,8 +910,6 @@ class SB_Instagram_Settings {
910
 
911
  break;
912
  case 'string_true':
913
- $value = floatval( $value );
914
-
915
  if ( $value === 'true' || $value === 'on' || $value === true ) {
916
  $sanitized_value = 'true';
917
  } else {
910
 
911
  break;
912
  case 'string_true':
 
 
913
  if ( $value === 'true' || $value === 'on' || $value === true ) {
914
  $sanitized_value = 'true';
915
  } else {
inc/class-sb-instagram-token-refresher.php CHANGED
@@ -112,7 +112,7 @@ class SB_Instagram_Token_Refresher {
112
 
113
  $connection = new SB_Instagram_API_Connect( $this->connected_account, 'access_token', array() );
114
 
115
- $connection->connect();
116
 
117
  if ( ! $connection->is_wp_error() && ! $connection->is_instagram_error() ) {
118
  $access_token_data = $connection->get_data();
112
 
113
  $connection = new SB_Instagram_API_Connect( $this->connected_account, 'access_token', array() );
114
 
115
+ $connection->wp_http_connect();
116
 
117
  if ( ! $connection->is_wp_error() && ! $connection->is_instagram_error() ) {
118
  $access_token_data = $connection->get_data();
instagram-feed.php CHANGED
@@ -3,7 +3,7 @@
3
  Plugin Name: Smash Balloon Instagram Feed
4
  Plugin URI: https://smashballoon.com/instagram-feed
5
  Description: Display beautifully clean, customizable, and responsive Instagram feeds.
6
- Version: 2.9.7
7
  Author: Smash Balloon
8
  Author URI: https://smashballoon.com/
9
  License: GPLv2 or later
@@ -23,7 +23,7 @@ along with this program; if not, write to the Free Software
23
  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
24
  */
25
  if ( ! defined( 'SBIVER' ) ) {
26
- define( 'SBIVER', '2.9.7' );
27
  }
28
  // Db version.
29
  if ( ! defined( 'SBI_DBVERSION' ) ) {
3
  Plugin Name: Smash Balloon Instagram Feed
4
  Plugin URI: https://smashballoon.com/instagram-feed
5
  Description: Display beautifully clean, customizable, and responsive Instagram feeds.
6
+ Version: 2.9.8
7
  Author: Smash Balloon
8
  Author URI: https://smashballoon.com/
9
  License: GPLv2 or later
23
  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
24
  */
25
  if ( ! defined( 'SBIVER' ) ) {
26
+ define( 'SBIVER', '2.9.8' );
27
  }
28
  // Db version.
29
  if ( ! defined( 'SBI_DBVERSION' ) ) {