SEO SQUIRRLY™ - Version 11.1.00

Version Description

  • 03/29/2021 = Update - Added SEO Links feature in Squirrly SEO Update - Improved UI for Squirrly SEO Settings Update - Added All Features categories in Squirrly with the option to activate/deactivate features Update - Make Woocommerce Products Categories and Woocommerce Products Tags more evident in SEO Automation Update - Add help sections in all Squirrly SEO setting pages Update - Load Facebook Pixel events for Woocommerce last version Update - Add the option to change the main keyword in Focus Page Update - Load the Dev Kit option in Squirrly SEO Fixed - Improve UX and Support for each Squirrly feature Fixed - Post Type default search for Focus Pages and Audit Pages Fixed - Post Type default search for Bulk SEO to include drafts Fixed - Don't load Assistant columns if the assistant is disabled for a post type Fixed - Improve UX in Audits and Focus Pages Fixed - Visibility status in Focus Pages
Download this release

Release Info

Developer cifi
Plugin Icon 128x128 SEO SQUIRRLY™
Version 11.1.00
Comparing to
See all releases

Code changes from version 11.0.04 to 11.1.00

classes/Error.php CHANGED
@@ -94,7 +94,6 @@ class SQ_Classes_Error extends SQ_Classes_FrontController {
94
  break;
95
 
96
  default:
97
-
98
  self::showError($error['text'], $error['id']);
99
  }
100
  }
94
  break;
95
 
96
  default:
 
97
  self::showError($error['text'], $error['id']);
98
  }
99
  }
classes/RemoteController.php CHANGED
@@ -117,18 +117,14 @@ class SQ_Classes_RemoteController {
117
  */
118
  public static function sq_wpcall($url, $options) {
119
  $method = $options['method'];
 
 
120
 
121
  switch ($method) {
122
  case 'get':
123
- //not accepted as option
124
- unset($options['method']);
125
-
126
  $response = wp_remote_get($url, $options);
127
  break;
128
  case 'post':
129
- //not accepted as option
130
- unset($options['method']);
131
-
132
  $response = wp_remote_post($url, $options);
133
  break;
134
  default:
117
  */
118
  public static function sq_wpcall($url, $options) {
119
  $method = $options['method'];
120
+ //not accepted as option
121
+ unset($options['method']);
122
 
123
  switch ($method) {
124
  case 'get':
 
 
 
125
  $response = wp_remote_get($url, $options);
126
  break;
127
  case 'post':
 
 
 
128
  $response = wp_remote_post($url, $options);
129
  break;
130
  default:
classes/helpers/Tools.php CHANGED
@@ -162,6 +162,7 @@ class SQ_Classes_Helpers_Tools {
162
 
163
  //JsonLD
164
  'sq_auto_jsonld' => 1,
 
165
  'sq_jsonld_type' => 'Organization',
166
  'sq_jsonld_global_person' => 0,
167
  'sq_jsonld_breadcrumbs' => 1,
162
 
163
  //JsonLD
164
  'sq_auto_jsonld' => 1,
165
+ 'sq_auto_jsonld_local' => 0,
166
  'sq_jsonld_type' => 'Organization',
167
  'sq_jsonld_global_person' => 0,
168
  'sq_jsonld_breadcrumbs' => 1,
controllers/Api.php CHANGED
@@ -124,7 +124,7 @@ class SQ_Controllers_Api extends SQ_Classes_FrontController {
124
 
125
  /**
126
  * Get data for the Focus Page Audit
127
- * @param $request
128
  */
129
  public function getData($request) {
130
 
124
 
125
  /**
126
  * Get data for the Focus Page Audit
127
+ * @param \WP_REST_Request $request
128
  */
129
  public function getData($request) {
130
 
controllers/Audits.php CHANGED
@@ -9,6 +9,7 @@ class SQ_Controllers_Audits extends SQ_Classes_FrontController {
9
  public $blogs;
10
  public $auditpage;
11
  public $audit;
 
12
  public $audits;
13
  public $auditpages;
14
 
@@ -308,7 +309,9 @@ class SQ_Controllers_Audits extends SQ_Classes_FrontController {
308
  if ($auditpage = SQ_Classes_RemoteController::updateAudit($args)) {
309
  if (!is_wp_error($auditpage)) {
310
  SQ_Classes_Error::setMessage(esc_html__("Audit page sent for recheck. It may take a while so please be patient.", _SQ_PLUGIN_NAME_) . " <br /> ");
311
- } else{
 
 
312
  SQ_Classes_Error::setError(esc_html__("The page could not be sent for reaudit.", _SQ_PLUGIN_NAME_) . " <br /> ");
313
  }
314
  } else {
9
  public $blogs;
10
  public $auditpage;
11
  public $audit;
12
+ public $pages;
13
  public $audits;
14
  public $auditpages;
15
 
309
  if ($auditpage = SQ_Classes_RemoteController::updateAudit($args)) {
310
  if (!is_wp_error($auditpage)) {
311
  SQ_Classes_Error::setMessage(esc_html__("Audit page sent for recheck. It may take a while so please be patient.", _SQ_PLUGIN_NAME_) . " <br /> ");
312
+ } elseif($auditpage->get_error_message() == 'too_many_attempts'){
313
+ SQ_Classes_Error::setError(esc_html__("You've made too many requests, you can request one page audit per hour.", _SQ_PLUGIN_NAME_) . " <br /> ");
314
+ }else{
315
  SQ_Classes_Error::setError(esc_html__("The page could not be sent for reaudit.", _SQ_PLUGIN_NAME_) . " <br /> ");
316
  }
317
  } else {
controllers/Cron.php DELETED
@@ -1,21 +0,0 @@
1
- <?php
2
- defined('ABSPATH') || die('Cheatin\' uh?');
3
-
4
- class SQ_Controllers_Cron extends SQ_Classes_FrontController {
5
-
6
- public function processSEOCheckCron() {
7
- //make sure the classes are loaded
8
- SQ_Classes_ObjController::getClass('SQ_Classes_Helpers_Tools');
9
-
10
- //Check the SEO and save the Report
11
- if ($report_time = SQ_Classes_Helpers_Tools::getOption('seoreport_time')) {
12
- if ((time() - (int)$report_time) < (3600 * 12)) {
13
- return false;
14
- }
15
- }
16
-
17
- SQ_Classes_ObjController::getClass('SQ_Models_CheckSeo')->checkSEO();
18
- }
19
-
20
-
21
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
controllers/Help.php DELETED
@@ -1,13 +0,0 @@
1
- <?php
2
- defined('ABSPATH') || die('Cheatin\' uh?');
3
-
4
- /**
5
- * Help & Support
6
- */
7
- class SQ_Controllers_Help extends SQ_Classes_FrontController {
8
-
9
- public function init() {
10
- }
11
-
12
-
13
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
controllers/Menu.php CHANGED
@@ -106,23 +106,21 @@ class SQ_Controllers_Menu extends SQ_Classes_FrontController {
106
 
107
  /**
108
  * Show the Dashboard link when Full Screen
109
- * @param $wp_admin_bar
110
  * @return mixed
111
  */
112
  public function hookTopmenuDashboard($wp_admin_bar) {
113
  global $sq_fullscreen;
114
 
115
- if (!is_user_logged_in()) {
116
- return false;
117
- }
118
-
119
- if (isset($sq_fullscreen) && $sq_fullscreen) {
120
- $wp_admin_bar->add_node(array(
121
- 'parent' => 'site-name',
122
- 'id' => 'dashboard',
123
- 'title' => esc_html__("Dashboard"),
124
- 'href' => admin_url(),
125
- ));
126
  }
127
 
128
  return $wp_admin_bar;
@@ -130,119 +128,120 @@ class SQ_Controllers_Menu extends SQ_Classes_FrontController {
130
 
131
  /**
132
  * Show the Squirrly Menu in toolbar
133
- * @param $wp_admin_bar
 
 
134
  */
135
  public function hookTopmenuSquirrly($wp_admin_bar) {
136
  global $tag;
137
 
138
- if (!is_admin()) {
139
- return false;
140
- }
141
 
142
- if (current_user_can('edit_posts')) {
143
- //Get count local SEO errors
144
- $errors = apply_filters('sq_seo_errors', 0);
145
 
146
- $wp_admin_bar->add_node(array(
147
- 'id' => 'sq_toolbar',
148
- 'title' => '<span class="sq_logo" style="margin-right: 2px"></span>' . esc_html__("Squirrly SEO", _SQ_PLUGIN_NAME_) . (($errors) ? '<span class="sq_errorcount">' . $errors . '</span>' : ''),
149
- 'href' => SQ_Classes_Helpers_Tools::getAdminUrl('sq_dashboard'),
150
- 'parent' => false
151
- ));
152
 
153
- $mainmenu = $this->model->getMainMenu();
154
- if (!empty($mainmenu)) {
155
- foreach ($mainmenu as $menuid => $item) {
156
 
157
- //Check if the menu item is visible on the top
158
- if (isset($item['topmenu']) && !$item['topmenu']) {
159
- continue;
160
- }
161
 
162
- if ($menuid == 'sq_dashboard' && $errors) {
163
- if (is_rtl()) {
164
- $item['title'] = '<span class="sq_errorcount" style="margin: 6px 0 0 0 !important; float: left !important;">' . $errors . '</span>' . $item['title'];
165
- } else {
166
- $item['title'] = $item['title'] . '<span class="sq_errorcount" style="margin: 6px 35px 0 0 !important;">' . $errors . '</span>';
 
167
  }
168
- }
169
 
170
- //make sure the user has the capabilities
171
- if (current_user_can($item['capability'])) {
172
- $wp_admin_bar->add_node(array(
173
- 'id' => $menuid,
174
- 'title' => $item['title'],
175
- 'href' => SQ_Classes_Helpers_Tools::getAdminUrl($menuid),
176
- 'parent' => 'sq_toolbar'
177
- ));
178
- $tabs = $this->model->getTabs($menuid);
179
- if (!empty($tabs)) {
180
- foreach ($tabs as $id => $tab) {
181
- $array_id = explode('/', $id);
182
- if (count((array)$array_id) == 2) {
183
- $wp_admin_bar->add_node(array(
184
- 'id' => $menuid . str_replace('/', '_', $id),
185
- 'title' => $tab['title'],
186
- 'href' => SQ_Classes_Helpers_Tools::getAdminUrl($array_id[0], $array_id[1]),
187
- 'parent' => $menuid
188
- ));
 
189
  }
190
  }
191
  }
192
  }
193
  }
194
- }
195
 
196
- }
197
 
198
- $current_screen = get_current_screen();
199
- $post = get_post();
200
- if ('post' == $current_screen->base
201
- && ($post_type_object = get_post_type_object($post->post_type))
202
- && (current_user_can('edit_post', $post->ID) || current_user_can('sq_manage_snippets'))
203
- && ($post_type_object->public)) {
204
- } elseif ('edit' == $current_screen->base
205
- && ($post_type_object = get_post_type_object($current_screen->post_type))
206
- && ($post_type_object->show_in_admin_bar)
207
- && !('edit-' . $current_screen->post_type === $current_screen->id)) {
208
- } elseif ('term' == $current_screen->base
209
- && isset($tag) && is_object($tag) && !is_wp_error($tag)
210
- && ($tax = get_taxonomy($tag->taxonomy))
211
- && $tax->public) {
212
- } else {
213
- return false;
214
- }
215
 
216
- $this->model->addMeta(array('sq_blocksnippet',
217
- ucfirst(_SQ_NAME_) . ' ' . esc_html__("SEO Snippet", _SQ_PLUGIN_NAME_),
218
- array(SQ_Classes_ObjController::getClass('SQ_Controllers_Snippet'), 'init'),
219
- null,
220
- 'normal',
221
- 'high'
222
- ));
223
 
224
- //Dev Kit images
225
- $style = '';
226
- if (SQ_Classes_Helpers_Tools::getOption('sq_devkit_logo')) {
227
- $style = '<style>.sq_logo{background-image:url("' . SQ_Classes_Helpers_Tools::getOption('sq_devkit_logo') . '") !important;background-size: 100%;}</style>';
228
- }
229
 
230
- $wp_admin_bar->add_node(array(
231
- 'id' => 'sq_bar_menu',
232
- 'title' => $style . '<span class="sq_logo"></span> ' . esc_html__("Custom SEO", _SQ_PLUGIN_NAME_),
233
- 'parent' => 'top-secondary',
234
- ));
235
 
236
 
237
- //Add snippet body
238
- $wp_admin_bar->add_menu(array(
239
- 'id' => 'sq_bar_submenu',
240
- 'parent' => 'sq_bar_menu',
241
- 'meta' => array(
242
- 'html' => SQ_Classes_ObjController::getClass('SQ_Controllers_Snippet')->init(),
243
- 'tabindex' => PHP_INT_MAX,
244
- ),
245
- ));
 
246
 
247
  return $wp_admin_bar;
248
  }
@@ -349,7 +348,7 @@ class SQ_Controllers_Menu extends SQ_Classes_FrontController {
349
  //Add Live Assistant For Selected Post Types
350
  if (!empty($types)) {
351
  foreach ($types as $type) {
352
- if ($metabox = unserialize(SQ_Classes_Helpers_Tools::getUserMeta('meta-box-order_' . $type))) {
353
  extract($metabox);
354
 
355
  if (isset($side) && isset($normal)) {
106
 
107
  /**
108
  * Show the Dashboard link when Full Screen
109
+ * @param \WP_Admin_Bar $wp_admin_bar
110
  * @return mixed
111
  */
112
  public function hookTopmenuDashboard($wp_admin_bar) {
113
  global $sq_fullscreen;
114
 
115
+ if (is_user_logged_in()) {
116
+ if (isset($sq_fullscreen) && $sq_fullscreen) {
117
+ $wp_admin_bar->add_node(array(
118
+ 'parent' => 'site-name',
119
+ 'id' => 'dashboard',
120
+ 'title' => esc_html__("Dashboard"),
121
+ 'href' => admin_url(),
122
+ ));
123
+ }
 
 
124
  }
125
 
126
  return $wp_admin_bar;
128
 
129
  /**
130
  * Show the Squirrly Menu in toolbar
131
+ * @param \WP_Admin_Bar $wp_admin_bar
132
+ *
133
+ * @return \WP_Admin_Bar
134
  */
135
  public function hookTopmenuSquirrly($wp_admin_bar) {
136
  global $tag;
137
 
138
+ if (is_admin()) {
 
 
139
 
140
+ if (current_user_can('edit_posts')) {
141
+ //Get count local SEO errors
142
+ $errors = apply_filters('sq_seo_errors', 0);
143
 
144
+ $wp_admin_bar->add_node(array(
145
+ 'id' => 'sq_toolbar',
146
+ 'title' => '<span class="sq_logo" style="margin-right: 2px"></span>' . esc_html__("Squirrly SEO", _SQ_PLUGIN_NAME_) . (($errors) ? '<span class="sq_errorcount">' . $errors . '</span>' : ''),
147
+ 'href' => SQ_Classes_Helpers_Tools::getAdminUrl('sq_dashboard'),
148
+ 'parent' => false
149
+ ));
150
 
151
+ $mainmenu = $this->model->getMainMenu();
152
+ if (!empty($mainmenu)) {
153
+ foreach ($mainmenu as $menuid => $item) {
154
 
155
+ //Check if the menu item is visible on the top
156
+ if (isset($item['topmenu']) && !$item['topmenu']) {
157
+ continue;
158
+ }
159
 
160
+ if ($menuid == 'sq_dashboard' && $errors) {
161
+ if (is_rtl()) {
162
+ $item['title'] = '<span class="sq_errorcount" style="margin: 6px 0 0 0 !important; float: left !important;">' . $errors . '</span>' . $item['title'];
163
+ } else {
164
+ $item['title'] = $item['title'] . '<span class="sq_errorcount" style="margin: 6px 35px 0 0 !important;">' . $errors . '</span>';
165
+ }
166
  }
 
167
 
168
+ //make sure the user has the capabilities
169
+ if (current_user_can($item['capability'])) {
170
+ $wp_admin_bar->add_node(array(
171
+ 'id' => $menuid,
172
+ 'title' => $item['title'],
173
+ 'href' => SQ_Classes_Helpers_Tools::getAdminUrl($menuid),
174
+ 'parent' => 'sq_toolbar'
175
+ ));
176
+ $tabs = $this->model->getTabs($menuid);
177
+ if (!empty($tabs)) {
178
+ foreach ($tabs as $id => $tab) {
179
+ $array_id = explode('/', $id);
180
+ if (count((array)$array_id) == 2) {
181
+ $wp_admin_bar->add_node(array(
182
+ 'id' => $menuid . str_replace('/', '_', $id),
183
+ 'title' => $tab['title'],
184
+ 'href' => SQ_Classes_Helpers_Tools::getAdminUrl($array_id[0], $array_id[1]),
185
+ 'parent' => $menuid
186
+ ));
187
+ }
188
  }
189
  }
190
  }
191
  }
192
  }
 
193
 
194
+ }
195
 
196
+ $current_screen = get_current_screen();
197
+ $post = get_post();
198
+ if ('post' == $current_screen->base
199
+ && ($post_type_object = get_post_type_object($post->post_type))
200
+ && (current_user_can('edit_post', $post->ID) || current_user_can('sq_manage_snippets'))
201
+ && ($post_type_object->public)) {
202
+ } elseif ('edit' == $current_screen->base
203
+ && ($post_type_object = get_post_type_object($current_screen->post_type))
204
+ && ($post_type_object->show_in_admin_bar)
205
+ && !('edit-' . $current_screen->post_type === $current_screen->id)) {
206
+ } elseif ('term' == $current_screen->base
207
+ && isset($tag) && is_object($tag) && !is_wp_error($tag)
208
+ && ($tax = get_taxonomy($tag->taxonomy))
209
+ && $tax->public) {
210
+ } else {
211
+ return $wp_admin_bar;
212
+ }
213
 
214
+ $this->model->addMeta(array('sq_blocksnippet',
215
+ ucfirst(_SQ_NAME_) . ' ' . esc_html__("SEO Snippet", _SQ_PLUGIN_NAME_),
216
+ array(SQ_Classes_ObjController::getClass('SQ_Controllers_Snippet'), 'init'),
217
+ null,
218
+ 'normal',
219
+ 'high'
220
+ ));
221
 
222
+ //Dev Kit images
223
+ $style = '';
224
+ if (SQ_Classes_Helpers_Tools::getOption('sq_devkit_logo')) {
225
+ $style = '<style>.sq_logo{background-image:url("' . SQ_Classes_Helpers_Tools::getOption('sq_devkit_logo') . '") !important;background-size: 100%;}</style>';
226
+ }
227
 
228
+ $wp_admin_bar->add_node(array(
229
+ 'id' => 'sq_bar_menu',
230
+ 'title' => $style . '<span class="sq_logo"></span> ' . esc_html__("Custom SEO", _SQ_PLUGIN_NAME_),
231
+ 'parent' => 'top-secondary',
232
+ ));
233
 
234
 
235
+ //Add snippet body
236
+ $wp_admin_bar->add_menu(array(
237
+ 'id' => 'sq_bar_submenu',
238
+ 'parent' => 'sq_bar_menu',
239
+ 'meta' => array(
240
+ 'html' => SQ_Classes_ObjController::getClass('SQ_Controllers_Snippet')->init(),
241
+ 'tabindex' => PHP_INT_MAX,
242
+ ),
243
+ ));
244
+ }
245
 
246
  return $wp_admin_bar;
247
  }
348
  //Add Live Assistant For Selected Post Types
349
  if (!empty($types)) {
350
  foreach ($types as $type) {
351
+ if (is_string($type) && $type <> '' && $metabox = unserialize(SQ_Classes_Helpers_Tools::getUserMeta('meta-box-order_' . $type))) {
352
  extract($metabox);
353
 
354
  if (isset($side) && isset($normal)) {
controllers/Overview.php CHANGED
@@ -59,7 +59,7 @@ class SQ_Controllers_Overview extends SQ_Classes_FrontController {
59
 
60
  if (!SQ_Classes_Helpers_Tools::getOption('sq_seojourney') && SQ_Classes_Helpers_Tools::getOption('sq_alert_journey')) {
61
  if ((time() - strtotime(SQ_Classes_Helpers_Tools::getOption('sq_installed'))) / (3600 * 24) > 4) { ?>
62
- <div class="alert alert-danger text-center m-0 mt-2 p-2">
63
  <form method="post" class="p-0 m-0">
64
  <?php SQ_Classes_Helpers_Tools::setNonce('sq_alerts_close', 'sq_nonce'); ?>
65
  <input type="hidden" name="action" value="sq_alerts_close"/>
59
 
60
  if (!SQ_Classes_Helpers_Tools::getOption('sq_seojourney') && SQ_Classes_Helpers_Tools::getOption('sq_alert_journey')) {
61
  if ((time() - strtotime(SQ_Classes_Helpers_Tools::getOption('sq_installed'))) / (3600 * 24) > 4) { ?>
62
+ <div class="alert alert-warning text-center m-0 mt-2 p-2">
63
  <form method="post" class="p-0 m-0">
64
  <?php SQ_Classes_Helpers_Tools::setNonce('sq_alerts_close', 'sq_nonce'); ?>
65
  <input type="hidden" name="action" value="sq_alerts_close"/>
controllers/Ranking.php CHANGED
@@ -6,6 +6,7 @@ class SQ_Controllers_Ranking extends SQ_Classes_FrontController {
6
  public $info;
7
  public $ranks;
8
  public $serps;
 
9
 
10
  /** @var object Checkin process with Squirrly Cloud */
11
  public $checkin;
6
  public $info;
7
  public $ranks;
8
  public $serps;
9
+ public $suggested;
10
 
11
  /** @var object Checkin process with Squirrly Cloud */
12
  public $checkin;
controllers/Research.php CHANGED
@@ -102,7 +102,7 @@ class SQ_Controllers_Research extends SQ_Classes_FrontController {
102
  if (isset($briefcase->keywords) && !empty($briefcase->keywords)) {
103
  $this->keywords = $briefcase->keywords;
104
  } else {
105
- $this->error = esc_html__("No keyword found.", _SQ_PLUGIN_NAME_);
106
  }
107
 
108
  if (isset($briefcase->labels)) {
102
  if (isset($briefcase->keywords) && !empty($briefcase->keywords)) {
103
  $this->keywords = $briefcase->keywords;
104
  } else {
105
+ $this->error = sprintf(esc_html__("No keyword found. %s Show all %s keywords from Briefcase.", _SQ_PLUGIN_NAME_),'<a href="'.SQ_Classes_Helpers_Tools::getAdminUrl('sq_research','briefcase').'">','</a>');
106
  }
107
 
108
  if (isset($briefcase->labels)) {
controllers/Sitemaps.php CHANGED
@@ -6,8 +6,8 @@ defined('ABSPATH') || die('Cheatin\' uh?');
6
  */
7
  class SQ_Controllers_Sitemaps extends SQ_Classes_FrontController {
8
  /* @var string root name */
9
-
10
  var $root = 'sitemap';
 
11
  /* @var string post limit */
12
  var $posts_limit;
13
  var $news_limit;
@@ -16,7 +16,7 @@ class SQ_Controllers_Sitemaps extends SQ_Classes_FrontController {
16
  parent::__construct();
17
  $this->posts_limit = SQ_Classes_Helpers_Tools::getOption('sq_sitemap_perpage');
18
  $this->news_limit = SQ_Classes_Helpers_Tools::getOption('sq_sitemap_perpage');
19
- add_filter('sq_sitemap_style', array($this, 'getFeedStyle'));
20
  add_action('wp', array($this, 'hookPreventRedirect'), 9);
21
 
22
  add_filter('user_trailingslashit', array($this, 'untrailingslashit'));
@@ -69,6 +69,14 @@ class SQ_Controllers_Sitemaps extends SQ_Classes_FrontController {
69
  die();
70
  }
71
  }
 
 
 
 
 
 
 
 
72
  }
73
  }
74
  }
@@ -97,9 +105,15 @@ class SQ_Controllers_Sitemaps extends SQ_Classes_FrontController {
97
  global $sq_query;
98
  $sq_query = array();
99
 
100
- if (isset($request) && strpos($request, 'sitemap') !== false) {
 
 
 
 
 
 
101
  $sq_sitemap = SQ_Classes_Helpers_Tools::getOption('sq_sitemap');
102
- $this->model->type = $request;
103
  //reset the previous query
104
  wp_reset_query();
105
 
@@ -205,8 +219,16 @@ class SQ_Controllers_Sitemaps extends SQ_Classes_FrontController {
205
 
206
  }
207
 
208
- public function getFeedStyle() {
209
- return '<?xml-stylesheet type="text/xsl" href="/' . _SQ_ASSETS_RELATIVE_URL_ . 'css/sitemap' . ($this->model->type == 'sitemap' ? 'index' : '') . '.xsl"?>' . "\n";
 
 
 
 
 
 
 
 
210
  }
211
 
212
  /**
@@ -221,10 +243,7 @@ class SQ_Controllers_Sitemaps extends SQ_Classes_FrontController {
221
  //Generate header
222
  echo '<?xml version="1.0" encoding="' . get_bloginfo('charset') . '"?>' . "\n";
223
  echo apply_filters('sq_sitemap_style', false);
224
- echo '<!-- generated-on="' . date('Y-m-d\TH:i:s+00:00') . '" -->' . "\n";
225
- echo '<!-- generator="Squirrly SEO Sitemap" -->' . "\n";
226
- echo '<!-- generator-url="https://wordpress.org/plugins/squirrly-seo/" -->' . "\n";
227
- echo '<!-- generator-version="' . SQ_VERSION . '" -->' . "\n";
228
  echo '' . "\n";
229
 
230
  $schema = array(
@@ -238,6 +257,10 @@ class SQ_Controllers_Sitemaps extends SQ_Classes_FrontController {
238
  $include = array_unique($include);
239
 
240
  switch ($this->model->type) {
 
 
 
 
241
  case 'sitemap':
242
  echo '<sitemapindex xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" '
243
  . 'xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/siteindex.xsd" '
@@ -268,6 +291,10 @@ class SQ_Controllers_Sitemaps extends SQ_Classes_FrontController {
268
  */
269
  private function showSitemapFooter() {
270
  switch ($this->model->type) {
 
 
 
 
271
  case 'sitemap':
272
  echo '</sitemapindex>' . "\n";
273
  break;
@@ -292,8 +319,8 @@ class SQ_Controllers_Sitemaps extends SQ_Classes_FrontController {
292
  foreach ($sq_sitemap as $name => $value) {
293
 
294
  //check if available from SEO Automation
295
- $pname = str_replace(array('sitemap-', 'post_'),'',$name);
296
- if(isset($patterns[$pname]['do_sitemap']) && !$patterns[$pname]['do_sitemap'] ){
297
  continue;
298
  }
299
 
@@ -366,6 +393,9 @@ class SQ_Controllers_Sitemaps extends SQ_Classes_FrontController {
366
  case 'sitemap-attachment':
367
  $this->showPackXml($this->model->getListAttachments());
368
  break;
 
 
 
369
  default:
370
  $this->showPackXml($this->model->getListPosts());
371
  break;
@@ -399,13 +429,30 @@ class SQ_Controllers_Sitemaps extends SQ_Classes_FrontController {
399
  unset($xml);
400
  }
401
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
402
  public function getRecursiveXml($xml, $pkey = '', $level = 2) {
403
  $str = '';
404
  $tab = str_repeat("\t", $level);
405
  if (is_array($xml)) {
406
  $cnt = 0;
407
  foreach ($xml as $key => $data) {
408
- if (!is_array($data)) {
 
 
409
  $str .= $tab . '<' . $key . ($key == 'video:player_loc' ? ' allow_embed="yes"' : '') . '>' . $data . ((strpos($data, '?') == false && $key == 'video:player_loc') ? '' : '') . '</' . $key . '>' . "\n";
410
  } else {
411
  if ($this->getRecursiveXml($data) <> '') {
@@ -476,6 +523,25 @@ class SQ_Controllers_Sitemaps extends SQ_Classes_FrontController {
476
  return esc_url(trailingslashit(home_url())) . $sitemap;
477
  }
478
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
479
  /**
480
  * Process the on-time cron if called
481
  */
@@ -589,7 +655,7 @@ class SQ_Controllers_Sitemaps extends SQ_Classes_FrontController {
589
  $query->query_fields .= ',p.lastmod';
590
  $query->query_from .= ' LEFT OUTER JOIN (
591
  SELECT MAX(post_modified) as lastmod, post_author, COUNT(*) as post_count
592
- FROM `'.$wpdb->posts.'`
593
  WHERE post_type = "post" AND post_status = "publish"
594
  GROUP BY post_author
595
  ) p ON (wp_users.ID = p.post_author)';
@@ -637,7 +703,7 @@ class SQ_Controllers_Sitemaps extends SQ_Classes_FrontController {
637
  WHERE post_date_gmt < NOW() AND post_status = %s AND post_type = %s
638
  GROUP BY YEAR(post_date_gmt), MONTH(post_date_gmt)
639
  ORDER BY post_date_gmt DESC
640
- ",'publish','post'));
641
  return $archives;
642
  }
643
 
6
  */
7
  class SQ_Controllers_Sitemaps extends SQ_Classes_FrontController {
8
  /* @var string root name */
 
9
  var $root = 'sitemap';
10
+
11
  /* @var string post limit */
12
  var $posts_limit;
13
  var $news_limit;
16
  parent::__construct();
17
  $this->posts_limit = SQ_Classes_Helpers_Tools::getOption('sq_sitemap_perpage');
18
  $this->news_limit = SQ_Classes_Helpers_Tools::getOption('sq_sitemap_perpage');
19
+ add_filter('sq_sitemap_style', array($this, 'getSquirrlyHeader'));
20
  add_action('wp', array($this, 'hookPreventRedirect'), 9);
21
 
22
  add_filter('user_trailingslashit', array($this, 'untrailingslashit'));
69
  die();
70
  }
71
  }
72
+ } elseif (strpos($_SERVER['REQUEST_URI'], 'locations.kml') !== false) {
73
+ if (SQ_Classes_Helpers_Tools::getOption('sq_jsonld_type') == 'Organization') {
74
+ $wp_query->is_404 = false;
75
+ $wp_query->is_feed = true;
76
+ $this->model->type = 'locations';
77
+ apply_filters('sq_sitemapxml', $this->showSitemap());
78
+ die();
79
+ }
80
  }
81
  }
82
  }
105
  global $sq_query;
106
  $sq_query = array();
107
 
108
+ if(!isset($request)){
109
+ return;
110
+ }
111
+
112
+ $this->model->type = $request;
113
+
114
+ if (strpos($request, 'sitemap') !== false) {
115
  $sq_sitemap = SQ_Classes_Helpers_Tools::getOption('sq_sitemap');
116
+
117
  //reset the previous query
118
  wp_reset_query();
119
 
219
 
220
  }
221
 
222
+ public function getSquirrlyHeader($header) {
223
+ if($this->model->type <> 'locations'){
224
+ $header = '<?xml-stylesheet type="text/xsl" href="/' . _SQ_ASSETS_RELATIVE_URL_ . 'css/sitemap' . ($this->model->type == 'sitemap' ? 'index' : '') . '.xsl"?>' . "\n";
225
+ $header .= '<!-- generated-on="' . date('Y-m-d\TH:i:s+00:00') . '" -->' . "\n";
226
+ $header .= '<!-- generator="Squirrly SEO Sitemap" -->' . "\n";
227
+ $header .= '<!-- generator-url="https://wordpress.org/plugins/squirrly-seo/" -->' . "\n";
228
+ $header .= '<!-- generator-version="' . SQ_VERSION . '" -->' . "\n";
229
+ }
230
+
231
+ return $header;
232
  }
233
 
234
  /**
243
  //Generate header
244
  echo '<?xml version="1.0" encoding="' . get_bloginfo('charset') . '"?>' . "\n";
245
  echo apply_filters('sq_sitemap_style', false);
246
+
 
 
 
247
  echo '' . "\n";
248
 
249
  $schema = array(
257
  $include = array_unique($include);
258
 
259
  switch ($this->model->type) {
260
+ case 'locations':
261
+ echo '<kml xmlns="http://www.opengis.net/kml/2.2" xmlns:gx="http://www.google.com/kml/ext/2.2" xmlns:kml="http://www.opengis.net/kml/2.2" xmlns:atom="http://www.w3.org/2005/Atom">' . "\n";
262
+ echo '<Document>' . "\n";
263
+ break;
264
  case 'sitemap':
265
  echo '<sitemapindex xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" '
266
  . 'xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/siteindex.xsd" '
291
  */
292
  private function showSitemapFooter() {
293
  switch ($this->model->type) {
294
+ case 'locations':
295
+ echo '</Document>' . "\n";
296
+ echo '</kml>' . "\n";
297
+ break;
298
  case 'sitemap':
299
  echo '</sitemapindex>' . "\n";
300
  break;
319
  foreach ($sq_sitemap as $name => $value) {
320
 
321
  //check if available from SEO Automation
322
+ $pname = str_replace(array('sitemap-', 'post_'), '', $name);
323
+ if (isset($patterns[$pname]['do_sitemap']) && !$patterns[$pname]['do_sitemap']) {
324
  continue;
325
  }
326
 
393
  case 'sitemap-attachment':
394
  $this->showPackXml($this->model->getListAttachments());
395
  break;
396
+ case 'locations':
397
+ $this->showPackKml($this->model->getKmlXML());
398
+ break;
399
  default:
400
  $this->showPackXml($this->model->getListPosts());
401
  break;
429
  unset($xml);
430
  }
431
 
432
+ /**
433
+ * Pach the XML for each sitemap
434
+ * @param array $kml
435
+ * @return void
436
+ */
437
+ public function showPackKml($kml = array()) {
438
+
439
+ $this->showSitemapHeader();
440
+ header('Content-Type: application/vnd.google-earth.kml+xml; charset=' . get_bloginfo('charset'), true);
441
+ echo $this->getRecursiveXml($kml);
442
+ $this->showSitemapFooter();
443
+
444
+ unset($kml);
445
+ }
446
+
447
  public function getRecursiveXml($xml, $pkey = '', $level = 2) {
448
  $str = '';
449
  $tab = str_repeat("\t", $level);
450
  if (is_array($xml)) {
451
  $cnt = 0;
452
  foreach ($xml as $key => $data) {
453
+ if ($data === false) {
454
+ $str .= $tab . '<' . $key . '>' . "\n";
455
+ }elseif (!is_array($data) && $data <> '') {
456
  $str .= $tab . '<' . $key . ($key == 'video:player_loc' ? ' allow_embed="yes"' : '') . '>' . $data . ((strpos($data, '?') == false && $key == 'video:player_loc') ? '' : '') . '</' . $key . '>' . "\n";
457
  } else {
458
  if ($this->getRecursiveXml($data) <> '') {
523
  return esc_url(trailingslashit(home_url())) . $sitemap;
524
  }
525
 
526
+ public function getKmlUrl($sitemap, $page = null) {
527
+ $sq_sitemap = SQ_Classes_Helpers_Tools::getOption('sq_sitemap');
528
+
529
+ if (!get_option('permalink_structure')) {
530
+ $sitemap = '?sq_feed=' . str_replace('.kml', '', $sitemap) . (isset($page) ? '&amp;page=' . $page : '');
531
+ } else {
532
+ if (isset($sq_sitemap[$sitemap])) {
533
+ $sitemap = $sq_sitemap[$sitemap][0] . (isset($page) ? '?page=' . $page : '');
534
+ }
535
+
536
+ if (strpos($sitemap, '.kml') === false) {
537
+ $sitemap .= '.kml';
538
+ }
539
+ }
540
+
541
+ return esc_url(trailingslashit(home_url())) . $sitemap;
542
+ }
543
+
544
+
545
  /**
546
  * Process the on-time cron if called
547
  */
655
  $query->query_fields .= ',p.lastmod';
656
  $query->query_from .= ' LEFT OUTER JOIN (
657
  SELECT MAX(post_modified) as lastmod, post_author, COUNT(*) as post_count
658
+ FROM `' . $wpdb->posts . '`
659
  WHERE post_type = "post" AND post_status = "publish"
660
  GROUP BY post_author
661
  ) p ON (wp_users.ID = p.post_author)';
703
  WHERE post_date_gmt < NOW() AND post_status = %s AND post_type = %s
704
  GROUP BY YEAR(post_date_gmt), MONTH(post_date_gmt)
705
  ORDER BY post_date_gmt DESC
706
+ ", 'publish', 'post'));
707
  return $archives;
708
  }
709
 
controllers/Snippet.php CHANGED
@@ -17,7 +17,9 @@ class SQ_Controllers_Snippet extends SQ_Classes_FrontController {
17
  $taxonomies = get_taxonomies(array('public' => true));
18
  if (!empty($taxonomies)) {
19
  foreach ($taxonomies as $taxonomy) {
20
- add_filter($taxonomy . '_edit_form', array($this, 'hookTermsPage'), 10);
 
 
21
  }
22
  }
23
  }
17
  $taxonomies = get_taxonomies(array('public' => true));
18
  if (!empty($taxonomies)) {
19
  foreach ($taxonomies as $taxonomy) {
20
+ if(is_string($taxonomy) && $taxonomy <> '') {
21
+ add_filter($taxonomy . '_edit_form', array($this, 'hookTermsPage'), 10);
22
+ }
23
  }
24
  }
25
  }
core/BlockFeatures.php CHANGED
@@ -9,6 +9,7 @@ class SQ_Core_BlockFeatures extends SQ_Classes_BlockController {
9
 
10
  public function getFeatures() {
11
  $connect = SQ_Classes_Helpers_Tools::getOption('connect');
 
12
  $features = array(
13
  array(
14
  'title' => "Squirrly Cloud App",
@@ -243,12 +244,12 @@ class SQ_Core_BlockFeatures extends SQ_Classes_BlockController {
243
  'description' => "For a news website it's really important to have a Google News Sitemap. This way you will have <strong>all your News Posts instantly on Google News</strong>.",
244
  'mode' => "Free",
245
  'option' => false,
246
- 'active' => true,
247
  'optional' => false,
248
  'connection' => false,
249
  'logo' => 'news_92.png',
250
  'link' => SQ_Classes_Helpers_Tools::getAdminUrl('sq_seosettings', 'sitemap'),
251
- 'details' => 'https://howto.squirrly.co/kb/sitemap-xml-settings/',
252
  ), //Sitemap Instant Indexing
253
  array(
254
  'title' => "JSON-LD Structured Data",
@@ -530,12 +531,12 @@ class SQ_Core_BlockFeatures extends SQ_Classes_BlockController {
530
  'title' => "Local SEO",
531
  'description' => "Optimize the website for <strong>local audience</strong> to have a huge advantage in front of your competitors.",
532
  'mode' => "Free",
533
- 'option' => false,
534
- 'active' => true,
535
- 'optional' => false,
536
  'connection' => false,
537
  'logo' => 'local_92.png',
538
- 'link' => SQ_Classes_Helpers_Tools::getAdminUrl('sq_seosettings', 'jsonld'),
539
  'details' => 'https://howto.squirrly.co/kb/json-ld-structured-data/#local_seo',
540
  ), //
541
  array(
9
 
10
  public function getFeatures() {
11
  $connect = SQ_Classes_Helpers_Tools::getOption('connect');
12
+ $sitemap = SQ_Classes_Helpers_Tools::getOption('sq_sitemap');
13
  $features = array(
14
  array(
15
  'title' => "Squirrly Cloud App",
244
  'description' => "For a news website it's really important to have a Google News Sitemap. This way you will have <strong>all your News Posts instantly on Google News</strong>.",
245
  'mode' => "Free",
246
  'option' => false,
247
+ 'active' => ($sitemap['sitemap-news'][1] == 1),
248
  'optional' => false,
249
  'connection' => false,
250
  'logo' => 'news_92.png',
251
  'link' => SQ_Classes_Helpers_Tools::getAdminUrl('sq_seosettings', 'sitemap'),
252
+ 'details' => 'https://howto.squirrly.co/kb/sitemap-xml-settings/#news_sitemap',
253
  ), //Sitemap Instant Indexing
254
  array(
255
  'title' => "JSON-LD Structured Data",
531
  'title' => "Local SEO",
532
  'description' => "Optimize the website for <strong>local audience</strong> to have a huge advantage in front of your competitors.",
533
  'mode' => "Free",
534
+ 'option' => 'sq_auto_jsonld_local',
535
+ 'active' => SQ_Classes_Helpers_Tools::getOption('sq_auto_jsonld_local'),
536
+ 'optional' => true,
537
  'connection' => false,
538
  'logo' => 'local_92.png',
539
+ 'link' => SQ_Classes_Helpers_Tools::getAdminUrl('sq_seosettings', 'jsonld', array('#localseo')),
540
  'details' => 'https://howto.squirrly.co/kb/json-ld-structured-data/#local_seo',
541
  ), //
542
  array(
core/Blocklogin.php CHANGED
@@ -50,13 +50,15 @@ class SQ_Core_Blocklogin extends SQ_Classes_BlockController {
50
  if (is_wp_error($responce)) {
51
  switch ($responce->get_error_message()) {
52
  case 'alreadyregistered':
53
- SQ_Classes_Error::setError(sprintf(esc_html__("We found your email, so it means you already have a Squirrly.co account. %sClick %sI already have an account%s and login. If you forgot your password, click %shere%s", _SQ_PLUGIN_NAME_), '<br />', '<a href="' . SQ_Classes_Helpers_Tools::getAdminUrl('sq_dashboard','login') . '" style="color:yellow">', '</a>','<a href="' . _SQ_DASH_URL_ . '/login?action=lostpassword" target="_blank" style="color:yellow">', '</a>'));
54
  break;
55
  case 'invalidemail':
56
  SQ_Classes_Error::setError(esc_html__("Your email is not valid. Please enter a valid email.", _SQ_PLUGIN_NAME_));
57
  break;
58
  default:
59
- SQ_Classes_Error::setError(esc_html__("We could not create your account. Please enter a valid email.", _SQ_PLUGIN_NAME_));
 
 
60
  break;
61
  }
62
 
@@ -70,19 +72,17 @@ class SQ_Core_Blocklogin extends SQ_Classes_BlockController {
70
  if (!$onboarding = SQ_Classes_Helpers_Tools::getOption('sq_onboarding')) {
71
  wp_redirect(SQ_Classes_Helpers_Tools::getAdminUrl('sq_onboarding'));
72
  die();
73
- }else{
74
  wp_redirect(SQ_Classes_Helpers_Tools::getAdminUrl('sq_dashboard'));
75
  die();
76
  }
77
 
78
- } else {
79
- if (!SQ_Classes_Error::isError()) {
80
- //if unknown error
81
- SQ_Classes_Error::setError(sprintf(esc_html__("Error: Couldn't connect to host :( . Please contact your site's webhost (or webmaster) and request them to add %s to their IP whitelist.", _SQ_PLUGIN_NAME_), _SQ_APIV2_URL_));
82
- }
83
  }
84
  } else {
85
- SQ_Classes_Error::setError(esc_html__("Could not send your information to Squirrly. Please try again.", _SQ_PLUGIN_NAME_));
86
  }
87
  }
88
 
@@ -113,7 +113,9 @@ class SQ_Core_Blocklogin extends SQ_Classes_BlockController {
113
  SQ_Classes_Error::setError(esc_html__("You disconnected your website from", _SQ_PLUGIN_NAME_) . ' ' . _SQ_DASH_URL_);
114
  break;
115
  default:
116
- SQ_Classes_Error::setError(esc_html__("An error occured.", _SQ_PLUGIN_NAME_) . ':' . $responce->get_error_message());
 
 
117
  break;
118
  }
119
 
@@ -127,17 +129,14 @@ class SQ_Core_Blocklogin extends SQ_Classes_BlockController {
127
  if (!$onboarding = SQ_Classes_Helpers_Tools::getOption('sq_onboarding')) {
128
  wp_redirect(SQ_Classes_Helpers_Tools::getAdminUrl('sq_onboarding'));
129
  die();
130
- }else{
131
  wp_redirect(SQ_Classes_Helpers_Tools::getAdminUrl('sq_dashboard'));
132
  die();
133
  }
134
 
135
- } else {
136
  //if unknown error
137
- if (!SQ_Classes_Error::isError()) {
138
- //if unknown error
139
- SQ_Classes_Error::setError(sprintf(esc_html__("Error: Couldn't connect to host :( . Please contact your site's webhost (or webmaster) and request them to add %s to their IP whitelist.", _SQ_PLUGIN_NAME_), _SQ_APIV2_URL_));
140
- }
141
  }
142
 
143
  } else {
50
  if (is_wp_error($responce)) {
51
  switch ($responce->get_error_message()) {
52
  case 'alreadyregistered':
53
+ SQ_Classes_Error::setError(sprintf(esc_html__("We found your email, so it means you already have a Squirrly.co account. %sClick %sI already have an account%s and login. If you forgot your password, click %shere%s", _SQ_PLUGIN_NAME_), '<br />', '<a href="' . SQ_Classes_Helpers_Tools::getAdminUrl('sq_dashboard', 'login') . '" style="color:yellow">', '</a>', '<a href="' . _SQ_DASH_URL_ . '/login?action=lostpassword" target="_blank" style="color:yellow">', '</a>'));
54
  break;
55
  case 'invalidemail':
56
  SQ_Classes_Error::setError(esc_html__("Your email is not valid. Please enter a valid email.", _SQ_PLUGIN_NAME_));
57
  break;
58
  default:
59
+ if (!SQ_Classes_Error::isError()) {
60
+ SQ_Classes_Error::setError(esc_html__("We could not create your account. Please enter a valid email.", _SQ_PLUGIN_NAME_));
61
+ }
62
  break;
63
  }
64
 
72
  if (!$onboarding = SQ_Classes_Helpers_Tools::getOption('sq_onboarding')) {
73
  wp_redirect(SQ_Classes_Helpers_Tools::getAdminUrl('sq_onboarding'));
74
  die();
75
+ } else {
76
  wp_redirect(SQ_Classes_Helpers_Tools::getAdminUrl('sq_dashboard'));
77
  die();
78
  }
79
 
80
+ } elseif (!SQ_Classes_Error::isError()) {
81
+ //if unknown error
82
+ SQ_Classes_Error::setError(sprintf(esc_html__("Error: Couldn't connect to host :( . Please contact your site's webhost (or webmaster) and request them to add %s to their IP whitelist.", _SQ_PLUGIN_NAME_), _SQ_APIV2_URL_));
 
 
83
  }
84
  } else {
85
+ SQ_Classes_Error::setError(esc_html__("Your email is not set. Please enter a valid email.", _SQ_PLUGIN_NAME_));
86
  }
87
  }
88
 
113
  SQ_Classes_Error::setError(esc_html__("You disconnected your website from", _SQ_PLUGIN_NAME_) . ' ' . _SQ_DASH_URL_);
114
  break;
115
  default:
116
+ if (!SQ_Classes_Error::isError()) {
117
+ SQ_Classes_Error::setError(esc_html__("An error occured.", _SQ_PLUGIN_NAME_) . ':' . $responce->get_error_message());
118
+ }
119
  break;
120
  }
121
 
129
  if (!$onboarding = SQ_Classes_Helpers_Tools::getOption('sq_onboarding')) {
130
  wp_redirect(SQ_Classes_Helpers_Tools::getAdminUrl('sq_onboarding'));
131
  die();
132
+ } else {
133
  wp_redirect(SQ_Classes_Helpers_Tools::getAdminUrl('sq_dashboard'));
134
  die();
135
  }
136
 
137
+ } elseif (!SQ_Classes_Error::isError()) {
138
  //if unknown error
139
+ SQ_Classes_Error::setError(sprintf(esc_html__("Error: Couldn't connect to host :( . Please contact your site's webhost (or webmaster) and request them to add %s to their IP whitelist.", _SQ_PLUGIN_NAME_), _SQ_APIV2_URL_));
 
 
 
140
  }
141
 
142
  } else {
models/Sitemaps.php CHANGED
@@ -50,7 +50,7 @@ class SQ_Models_Sitemaps extends SQ_Models_Abstract_Seo {
50
  $homes = array();
51
  $homes['contains'] = array();
52
 
53
- if (function_exists('pll_languages_list')) {
54
  if (SQ_Classes_Helpers_Tools::getOption('sq_sitemap_combinelangs')) {
55
  // print_R(PLL()->model->get_languages_list());
56
  foreach (pll_languages_list() as $term) {
@@ -80,13 +80,10 @@ class SQ_Models_Sitemaps extends SQ_Models_Abstract_Seo {
80
 
81
  $xml = array();
82
  $xml['loc'] = $post->url;
83
-
84
  $xml['lastmod'] = trim(mysql2date('Y-m-d\TH:i:s+00:00', $this->lastModified($post), false));
85
  $xml['changefreq'] = $this->frequency[SQ_Classes_Helpers_Tools::getOption('sq_sitemap_frequency')][$this->type][1];
86
  $xml['priority'] = $this->frequency[SQ_Classes_Helpers_Tools::getOption('sq_sitemap_frequency')][$this->type][0];
87
  }
88
-
89
-
90
  $homes[] = $xml;
91
  unset($xml);
92
  }
@@ -253,7 +250,7 @@ class SQ_Models_Sitemaps extends SQ_Models_Abstract_Seo {
253
  $xml['loc'] = esc_url($post->url);
254
 
255
  $language = convert_chars(strip_tags(get_bloginfo('language')));
256
- if(strpos($language, '-')) {
257
  $language = substr($language, 0, strpos($language, '-'));
258
  }
259
  if ($language == '') {
@@ -446,6 +443,59 @@ class SQ_Models_Sitemaps extends SQ_Models_Abstract_Seo {
446
  return $array;
447
  }
448
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
449
  /**
450
  * Get the XML of the URL
451
  * @param $post
50
  $homes = array();
51
  $homes['contains'] = array();
52
 
53
+ if (function_exists('pll_languages_list') && function_exists('pll_home_url')) {
54
  if (SQ_Classes_Helpers_Tools::getOption('sq_sitemap_combinelangs')) {
55
  // print_R(PLL()->model->get_languages_list());
56
  foreach (pll_languages_list() as $term) {
80
 
81
  $xml = array();
82
  $xml['loc'] = $post->url;
 
83
  $xml['lastmod'] = trim(mysql2date('Y-m-d\TH:i:s+00:00', $this->lastModified($post), false));
84
  $xml['changefreq'] = $this->frequency[SQ_Classes_Helpers_Tools::getOption('sq_sitemap_frequency')][$this->type][1];
85
  $xml['priority'] = $this->frequency[SQ_Classes_Helpers_Tools::getOption('sq_sitemap_frequency')][$this->type][0];
86
  }
 
 
87
  $homes[] = $xml;
88
  unset($xml);
89
  }
250
  $xml['loc'] = esc_url($post->url);
251
 
252
  $language = convert_chars(strip_tags(get_bloginfo('language')));
253
+ if (strpos($language, '-')) {
254
  $language = substr($language, 0, strpos($language, '-'));
255
  }
256
  if ($language == '') {
443
  return $array;
444
  }
445
 
446
+ /**
447
+ * Generate the KML file contents.
448
+ *
449
+ * @return array $kml KML file content.
450
+ */
451
+ public function getKmlXML() {
452
+ $xml = array();
453
+ $jsonld = SQ_Classes_Helpers_Tools::getOption('sq_jsonld');
454
+
455
+ if (SQ_Classes_Helpers_Tools::getOption('sq_jsonld_type') == 'Organization') {
456
+ if ($jsonld['Organization']['place']['geo']['latitude'] <> '' && $jsonld['Organization']['place']['geo']['longitude'] <> '') {
457
+
458
+ $xml['name'] = 'Locations for ' . $jsonld['Organization']['name'];
459
+ $xml['description'] = $jsonld['Organization']['description'];
460
+ $xml['open'] = 1;
461
+
462
+ $xml['Folder']['Placemark']['name'] = $jsonld['Organization']['name'];
463
+ $xml['Folder']['Placemark']['description'] = $jsonld['Organization']['description'];
464
+
465
+ //Add business address
466
+ $xml['Folder']['Placemark']['address'] = '';
467
+ if ($jsonld['Organization']['address']['streetAddress'] <> '') {
468
+ $xml['Folder']['Placemark']['address'] .= $jsonld['Organization']['address']['streetAddress'];
469
+ }
470
+ if ($jsonld['Organization']['address']['addressLocality'] <> '') {
471
+ $xml['Folder']['Placemark']['address'] .= ',' . $jsonld['Organization']['address']['addressLocality'];
472
+ }
473
+ if ($jsonld['Organization']['address']['postalCode'] <> '') {
474
+ $xml['Folder']['Placemark']['address'] .= ',' . $jsonld['Organization']['address']['postalCode'];
475
+ }
476
+ if ($jsonld['Organization']['address']['addressCountry'] <> '') {
477
+ $xml['Folder']['Placemark']['address'] .= ',' . $jsonld['Organization']['address']['addressCountry'];
478
+ }
479
+
480
+
481
+ $xml['Folder']['Placemark']['phoneNumber'] = $jsonld['Organization']['contactPoint']['telephone'];
482
+ //$xml['Folder']['Placemark']['atom:link href="' . get_bloginfo('url') . '"'] = false;
483
+ $xml['Folder']['Placemark']['LookAt']['latitude'] = $jsonld['Organization']['place']['geo']['latitude'];
484
+ $xml['Folder']['Placemark']['LookAt']['longitude'] = $jsonld['Organization']['place']['geo']['longitude'];
485
+ $xml['Folder']['Placemark']['LookAt']['altitude'] = 0;
486
+ $xml['Folder']['Placemark']['LookAt']['range'] = 0;
487
+ $xml['Folder']['Placemark']['LookAt']['tilt'] = 0;
488
+ $xml['Folder']['Placemark']['LookAt']['altitudeMode'] = 'relativeToGround';
489
+ $xml['Folder']['Placemark']['Point']['altitudeMode'] = 'relativeToGround';
490
+ $xml['Folder']['Placemark']['Point']['coordinates'] = $jsonld['Organization']['place']['geo']['longitude'];
491
+ $xml['Folder']['Placemark']['Point']['coordinates'] .= ',' . $jsonld['Organization']['place']['geo']['latitude'];
492
+ $xml['Folder']['Placemark']['Point']['coordinates'] .= ',0';
493
+ }
494
+ }
495
+
496
+ return $xml;
497
+ }
498
+
499
  /**
500
  * Get the XML of the URL
501
  * @param $post
models/focuspages/Indexability.php CHANGED
@@ -66,7 +66,7 @@ class SQ_Models_Focuspages_Indexability extends SQ_Models_Abstract_Assistant {
66
  ),
67
  'gscindex' => array(
68
  'title' => esc_html__("Manual index request", _SQ_PLUGIN_NAME_),
69
- 'description' => sprintf(esc_html__("Click the button to ask Google to re-index this page. %s Disclaimer: This task will automatically turn to green once you click on the button and it takes you to Google Search Console. It's up to you to make 100%% sure that you do tell Google to either index or re-index this page. %s Perform a manual request for Google to re-index this page. %s This is super important to do whenever you make important changes to your pages. Otherwise, Google will still have the old version of your page. %s If Google keeps having the older version, then it doesn't matter if you've improved the page. %s When you click the Ask Google to Re-Index button, Squirrly will use the Google Search Console API to send Google the request on your behalf.", _SQ_PLUGIN_NAME_), '<br /><br /><em>', '</em><br /><br />', '<br /><br />', '<br /><br />', '<br /><br />'),
70
  ),
71
  'canonical' => array(
72
  'title' => esc_html__("Canonical link", _SQ_PLUGIN_NAME_),
@@ -90,7 +90,7 @@ class SQ_Models_Focuspages_Indexability extends SQ_Models_Abstract_Assistant {
90
  $header .= '<a href="' . $this->_post->url . '" target="_blank" style="word-break: break-word;">' . urldecode($this->_post->url) . '</a>';
91
  $header .= '</li>';
92
 
93
- if (!$this->_audit->sq_analytics_gsc_connected && !$this->_audit->sq_analytics_google_connected) {
94
  $header .= '<li class="completed" style="background-color:#f7f7f7">
95
  <a href="' . SQ_Classes_RemoteController::getApiLink('gscoauth') . '" target="_blank" class="btn btn-success text-white col-sm-10 offset-1 mt-3">' . esc_html__("Connect Google Search", _SQ_PLUGIN_NAME_) . '</a>
96
  </li>';
@@ -173,6 +173,11 @@ class SQ_Models_Focuspages_Indexability extends SQ_Models_Abstract_Assistant {
173
  return $task;
174
  }
175
 
 
 
 
 
 
176
  $task['error'] = true;
177
  return $task;
178
  }
66
  ),
67
  'gscindex' => array(
68
  'title' => esc_html__("Manual index request", _SQ_PLUGIN_NAME_),
69
+ 'description' => sprintf(esc_html__("Click the button to %s Ask Google to re-index %s this page. %s Disclaimer: This task will automatically turn to green once you click on the button and it takes you to Google Search Console. It's up to you to make 100%% sure that you do tell Google to either index or re-index this page. %s Perform a manual request for Google to re-index this page. %s This is super important to do whenever you make important changes to your pages. Otherwise, Google will still have the old version of your page. %s If Google keeps having the older version, then it doesn't matter if you've improved the page. %s When you click the Ask Google to Re-Index button, Squirrly will use the Google Search Console API to send Google the request on your behalf.", _SQ_PLUGIN_NAME_), '<strong>','</strong>','<br /><br /><em>', '</em><br /><br />', '<br /><br />', '<br /><br />', '<br /><br />'),
70
  ),
71
  'canonical' => array(
72
  'title' => esc_html__("Canonical link", _SQ_PLUGIN_NAME_),
90
  $header .= '<a href="' . $this->_post->url . '" target="_blank" style="word-break: break-word;">' . urldecode($this->_post->url) . '</a>';
91
  $header .= '</li>';
92
 
93
+ if (!$this->_audit->sq_analytics_gsc_connected ) {
94
  $header .= '<li class="completed" style="background-color:#f7f7f7">
95
  <a href="' . SQ_Classes_RemoteController::getApiLink('gscoauth') . '" target="_blank" class="btn btn-success text-white col-sm-10 offset-1 mt-3">' . esc_html__("Connect Google Search", _SQ_PLUGIN_NAME_) . '</a>
96
  </li>';
173
  return $task;
174
  }
175
 
176
+ if ($this->_audit->sq_analytics_gsc_connected ) {
177
+ $task['completed'] = true;
178
+ return $task;
179
+ }
180
+
181
  $task['error'] = true;
182
  return $task;
183
  }
readme.txt CHANGED
@@ -400,6 +400,22 @@ Type a keyword to the right of the screen and start using Squirrly Seo. Enjoy!
400
  9. Squirrly SEO - Progress & Achievements
401
 
402
  == Changelog ==
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
403
  = 11.0.04 - 03/08/2021 =
404
  Update - Add Json-LD types for Automation and Snippet
405
  Update - Add new data in Json-LD Organizaztion like: Geo Location, Address, Country
400
  9. Squirrly SEO - Progress & Achievements
401
 
402
  == Changelog ==
403
+ = 11.1.00 - 03/29/2021 =
404
+ Update - Added SEO Links feature in Squirrly SEO
405
+ Update - Improved UI for Squirrly SEO Settings
406
+ Update - Added All Features categories in Squirrly with the option to activate/deactivate features
407
+ Update - Make Woocommerce Products Categories and Woocommerce Products Tags more evident in SEO Automation
408
+ Update - Add help sections in all Squirrly SEO setting pages
409
+ Update - Load Facebook Pixel events for Woocommerce last version
410
+ Update - Add the option to change the main keyword in Focus Page
411
+ Update - Load the Dev Kit option in Squirrly SEO
412
+ Fixed - Improve UX and Support for each Squirrly feature
413
+ Fixed - Post Type default search for Focus Pages and Audit Pages
414
+ Fixed - Post Type default search for Bulk SEO to include drafts
415
+ Fixed - Don't load Assistant columns if the assistant is disabled for a post type
416
+ Fixed - Improve UX in Audits and Focus Pages
417
+ Fixed - Visibility status in Focus Pages
418
+
419
  = 11.0.04 - 03/08/2021 =
420
  Update - Add Json-LD types for Automation and Snippet
421
  Update - Add new data in Json-LD Organizaztion like: Geo Location, Address, Country
squirrly.php CHANGED
@@ -8,7 +8,7 @@
8
  * Description: A.I.-based Private SEO Consultant. In a Plugin. Powered by Machine Learning and Cloud Services. Over 300 functionalities for SEO available when you need them.
9
  * Author: Squirrly SEO
10
  * Author URI: https://plugin.squirrly.co
11
- * Version: 11.0.04
12
  * License: GPLv2 or later
13
  * License URI: http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
14
  * Text Domain: squirrly-seo
@@ -17,7 +17,7 @@
17
 
18
  if (!defined('SQ_VERSION')) {
19
  /* SET THE CURRENT VERSION ABOVE AND BELOW */
20
- define('SQ_VERSION', '11.0.04');
21
  //The last stable version
22
  define('SQ_STABLE_VERSION', '11.0.03');
23
  // Call config files
8
  * Description: A.I.-based Private SEO Consultant. In a Plugin. Powered by Machine Learning and Cloud Services. Over 300 functionalities for SEO available when you need them.
9
  * Author: Squirrly SEO
10
  * Author URI: https://plugin.squirrly.co
11
+ * Version: 11.1.00
12
  * License: GPLv2 or later
13
  * License URI: http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
14
  * Text Domain: squirrly-seo
17
 
18
  if (!defined('SQ_VERSION')) {
19
  /* SET THE CURRENT VERSION ABOVE AND BELOW */
20
+ define('SQ_VERSION', '11.1.00');
21
  //The last stable version
22
  define('SQ_STABLE_VERSION', '11.0.03');
23
  // Call config files
view/Audits/AuditStats.php CHANGED
@@ -59,7 +59,7 @@
59
  </div>
60
  <?php } else { ?>
61
  <div class="col sq_audit_header">
62
- <a href="<?php echo SQ_Classes_Helpers_Tools::getAdminUrl('sq_audits', 'addpage') ?>" class="btn btn-lg btn-warning text-white mx-1">
63
  <i class="fa fa-plus-square-o"></i> <?php echo esc_html__("Add a new page for Audit", _SQ_PLUGIN_NAME_); ?>
64
  </a>
65
  </div>
@@ -202,7 +202,7 @@
202
  echo '<h6 class="col-12 px-0 text-success" style="line-height: 25px;font-size: 14px;"><i class="fa fa-arrow-up" style="font-size: 9px !important;margin: 0 5px;vertical-align: middle;"></i> ' . $value . '</h6>';
203
  }
204
  ?>
205
- <a class="btn btn-sm btn-success" href="https://twitter.com/intent/tweet?text=<?php echo urlencode('I love the results I get with Squirrly SEO Audit for my website. @SquirrlyHQ #SEO') ?>">Share Your Success</a><?php
206
  } else {
207
  echo '<h4 class="col-12 px-0 text-info">' . esc_html__("No progress found yet", _SQ_PLUGIN_NAME_) . '</h4>';
208
  } ?>
59
  </div>
60
  <?php } else { ?>
61
  <div class="col sq_audit_header">
62
+ <a href="<?php echo SQ_Classes_Helpers_Tools::getAdminUrl('sq_audits', 'addpage') ?>" class="btn btn-lg btn-primary text-white mx-1">
63
  <i class="fa fa-plus-square-o"></i> <?php echo esc_html__("Add a new page for Audit", _SQ_PLUGIN_NAME_); ?>
64
  </a>
65
  </div>
202
  echo '<h6 class="col-12 px-0 text-success" style="line-height: 25px;font-size: 14px;"><i class="fa fa-arrow-up" style="font-size: 9px !important;margin: 0 5px;vertical-align: middle;"></i> ' . $value . '</h6>';
203
  }
204
  ?>
205
+ <a class="mt-2 btn btn-sm btn-light border" href="https://twitter.com/intent/tweet?text=<?php echo urlencode('I love the results I get with Squirrly SEO Audit for my website. @SquirrlyHQ #SEO') ?>">Share Your Success</a><?php
206
  } else {
207
  echo '<h4 class="col-12 px-0 text-info">' . esc_html__("No progress found yet", _SQ_PLUGIN_NAME_) . '</h4>';
208
  } ?>
view/Audits/Audits.php CHANGED
@@ -72,10 +72,10 @@
72
  </div>
73
  </div>
74
 
75
- <div class="card col-12 bg-cta text-white rounded-0 py-0">
76
  <div class="card-body">
77
- <h4 class="text-center text-white">
78
- <?php echo sprintf(esc_html__("Learn how to improve your SEO Audit score over time %sClick Here%s", _SQ_PLUGIN_NAME_), '<a href="https://plugin.squirrly.co/wordpress-seo/what-is-the-site-visibility-score/" target="_blank" style="color: #ffea2a" >', '</a>') ?>
79
  </h4>
80
  </div>
81
  </div>
72
  </div>
73
  </div>
74
 
75
+ <div class="card col-12 bg-light rounded-0 py-0">
76
  <div class="card-body">
77
+ <h4 class="text-center text-dark">
78
+ <?php echo sprintf(esc_html__("Learn how to improve your SEO Audit score over time %sClick Here%s", _SQ_PLUGIN_NAME_), '<a href="https://plugin.squirrly.co/wordpress-seo/what-is-the-site-visibility-score/" target="_blank">', '</a>') ?>
79
  </h4>
80
  </div>
81
  </div>
view/Blocks/Features.php CHANGED
@@ -56,11 +56,11 @@
56
  <?php if ($feature['link']) { ?>
57
  <div class="col-12 p-0 pt-2">
58
  <?php if ($feature['optional']) { ?>
59
- <a href="<?php echo $feature['link'] ?>" class="small">
60
  <?php echo esc_html__("start feature setup", _SQ_PLUGIN_NAME_) ?> >>
61
  </a>
62
  <?php } else { ?>
63
- <a href="<?php echo $feature['link'] ?>" class="small">
64
  <?php echo esc_html__("see feature", _SQ_PLUGIN_NAME_) ?> >>
65
  </a>
66
  <?php } ?>
@@ -76,7 +76,7 @@
76
  <?php if ($feature['optional']) { ?>
77
  <div class="checker col-sm-3 row m-0 p-0 sq_save_ajax">
78
  <div class="col-sm-12 p-0 sq-switch sq-switch-sm text-right">
79
- <input type="checkbox" id="activate_<?php echo $index ?>" <?php echo($feature['active'] ? 'checked="checked"' : '') ?> data-name="<?php echo $feature['option'] ?>" data-action="sq_ajax_seosettings_save" data-javascript="if($value){$this.closest('div.sq_feature').addClass('active');}else{ $this.closest('div.sq_feature').removeClass('active');}" class="switch" value="1"/>
80
  <label for="activate_<?php echo $index ?>" class="m-0"></label>
81
  </div>
82
  </div>
56
  <?php if ($feature['link']) { ?>
57
  <div class="col-12 p-0 pt-2">
58
  <?php if ($feature['optional']) { ?>
59
+ <a href="<?php echo $feature['link'] ?>" class="small see_feature" <?php echo ($feature['active'] ? '' :'style="display:none;"')?>>
60
  <?php echo esc_html__("start feature setup", _SQ_PLUGIN_NAME_) ?> >>
61
  </a>
62
  <?php } else { ?>
63
+ <a href="<?php echo $feature['link'] ?>" class="small see_feature">
64
  <?php echo esc_html__("see feature", _SQ_PLUGIN_NAME_) ?> >>
65
  </a>
66
  <?php } ?>
76
  <?php if ($feature['optional']) { ?>
77
  <div class="checker col-sm-3 row m-0 p-0 sq_save_ajax">
78
  <div class="col-sm-12 p-0 sq-switch sq-switch-sm text-right">
79
+ <input type="checkbox" id="activate_<?php echo $index ?>" <?php echo($feature['active'] ? 'checked="checked"' : '') ?> data-name="<?php echo $feature['option'] ?>" data-action="sq_ajax_seosettings_save" data-javascript="if($value){$this.closest('div.sq_feature').addClass('active');$('#sq_feature_<?php echo $index ?>').find('a.see_feature').show();}else{ $this.closest('div.sq_feature').removeClass('active');$('#sq_feature_<?php echo $index ?>').find('a.see_feature').hide();}" class="switch" value="1"/>
80
  <label for="activate_<?php echo $index ?>" class="m-0"></label>
81
  </div>
82
  </div>
view/Blocks/KnowledgeBase.php CHANGED
@@ -14,132 +14,141 @@
14
  <?php if (SQ_Classes_Helpers_Tools::getOption('sq_api') == '') { ?>
15
  <ul class="list-group list-group-flush">
16
  <li class="list-group-item text-left">
17
- <a href="https://howto.squirrly.co/kb/install-squirrly-seo-plugin/#connect_to_cloud" target="_blank">Why do I need to connect to Squirrly Cloud?</a>
18
  </li>
19
  <li class="list-group-item text-left">
20
- <a href="https://howto.squirrly.co/kb/install-squirrly-seo-plugin/#connect_to_cloud" target="_blank">How to connect to Squirrly Cloud.</a>
21
  </li>
22
  </ul>
23
  <?php } elseif ($page == 'sq_dashboard') { ?>
24
  <ul class="list-group list-group-flush">
25
 
26
  <li class="list-group-item text-left">
27
- <a href="https://howto.squirrly.co/kb/install-squirrly-seo-plugin/#import_seo" target="_blank">How to Import SEO from other SEO plugins.</a>
28
  </li>
29
  <li class="list-group-item text-left">
30
- <a href="https://howto.squirrly.co/kb/install-squirrly-seo-plugin/#top_10_race" target="_blank">How to get on TOP 10 Google?</a>
 
 
 
31
  </li>
32
  </ul>
33
  <div class="text-center m-2">
34
- <a href="https://howto.squirrly.co/kb/" target="_blank">[ go to knowledge base ]</a></div>
35
  <?php } elseif ($page == 'sq_research') { ?>
36
  <ul class="list-group list-group-flush">
37
  <li class="list-group-item text-left">
38
  <a href="https://howto.squirrly.co/kb/keyword-research-and-seo-strategy/#find_new_keywords" target="_blank">How to do a Keyword Research.</a>
39
  </li>
40
  <li class="list-group-item text-left">
41
- <a href="https://howto.squirrly.co/kb/keyword-research-and-seo-strategy/#find_new_keywords" target="_blank">How to do a Keyword Research.</a>
42
- </li>
43
- <li class="list-group-item text-left">
44
- <a href="https://howto.squirrly.co/kb/keyword-research-and-seo-strategy/#briefcase_add_keyword" target="_blank">How to add Keywords into Briefcase.</a>
45
  </li>
46
  <li class="list-group-item text-left">
47
- <a href="https://howto.squirrly.co/kb/keyword-research-and-seo-strategy/#briefcase_label" target="_blank">How to add Labels to Keywords.</a>
48
  </li>
49
  <li class="list-group-item text-left">
50
- <a href="https://howto.squirrly.co/kb/keyword-research-and-seo-strategy/#briefcase_optimize_sla" target="_blank">How to optimize a post with Briefcase.</a>
51
  </li>
52
  <li class="list-group-item text-left">
53
- <a href="https://howto.squirrly.co/kb/keyword-research-and-seo-strategy/#briefcase_backup_keywords" target="_blank">How to backup/restore Briefcase Keywords.</a>
54
  </li>
55
  </ul>
56
  <div class="text-center m-2">
57
- <a href="https://howto.squirrly.co/kb/" target="_blank">[ go to knowledge base ]</a></div>
58
  <?php } elseif ($page == 'sq_assistant') { ?>
59
  <ul class="list-group list-group-flush">
60
  <li class="list-group-item text-left">
61
- <a href="https://howto.squirrly.co/kb/squirrly-live-assistant/#all_tasks_green" target="_blank">How to 100% optimize a post, page or product with Squirrly Live Assistant.</a>
62
  </li>
63
  <li class="list-group-item text-left">
64
- <a href="https://howto.squirrly.co/kb/squirrly-live-assistant/#add_keyword" target="_blank">How to add Copyright Free Images.</a>
65
  </li>
66
  <li class="list-group-item text-left">
67
  <a href="https://howto.squirrly.co/faq/why-is-the-squirrly-live-assistant-not-loading-in-the-post-editor/" target="_blank">Squirrly Live Assistant not showing.</a>
68
  </li>
69
  <li class="list-group-item text-left">
70
- <a href="https://howto.squirrly.co/kb/squirrly-live-assistant/#after_optimization" target="_blank">What to do after I optimize a post.</a>
71
  </li>
72
  </ul>
73
  <div class="text-center m-2">
74
- <a href="https://howto.squirrly.co/kb/" target="_blank">[ go to knowledge base ]</a></div>
75
  <?php } elseif ($page == 'sq_seosettings') { ?>
76
  <ul class="list-group list-group-flush">
77
  <li class="list-group-item text-left">
78
- <a href="https://howto.squirrly.co/kb/seo-automation/" target="_blank">How to set the SEO in just 2 minutes.</a>
79
  </li>
80
  <li class="list-group-item text-left">
81
- <a href="https://howto.squirrly.co/kb/bulk-seo/#bulk_seo_snippet_og" target="_blank">How to optimize Social Media for each post.</a>
82
  </li>
83
  <li class="list-group-item text-left">
84
- <a href="https://howto.squirrly.co/kb/bulk-seo/#bulk_seo_snippet_jsonld" target="_blank">How to activate Rich Snippets for Google.</a>
 
 
 
 
 
 
85
  </li>
86
  </ul>
87
  <div class="text-center m-2">
88
- <a href="https://howto.squirrly.co/kb/" target="_blank">[ go to knowledge base ]</a></div>
89
  <?php } elseif ($page == 'sq_focuspages') { ?>
90
  <ul class="list-group list-group-flush">
91
  <li class="list-group-item text-left">
92
- <a href="https://howto.squirrly.co/kb/focus-pages-page-audits/#add_new_focus_page" target="_blank">How to add a New Focus Page.</a>
93
  </li>
94
  <li class="list-group-item text-left">
95
- <a href="https://howto.squirrly.co/kb/focus-pages-page-audits/#remove_focus_page" target="_blank">How to remove a Focus Page.</a>
96
  </li>
97
  <li class="list-group-item text-left">
98
- <a href="https://howto.squirrly.co/kb/focus-pages-page-audits/#chance_to_rank" target="_blank">What is Chance to Rank.</a>
99
  </li>
100
  <li class="list-group-item text-left">
101
- <a href="https://howto.squirrly.co/kb/focus-pages-page-audits/#keyword" target="_blank">How to add a keyword in a Focus Page.</a>
102
  </li>
103
  </ul>
104
  <div class="text-center m-2">
105
- <a href="https://howto.squirrly.co/kb/" target="_blank">[ go to knowledge base ]</a></div>
106
  <?php } elseif ($page == 'sq_audits') { ?>
107
  <ul class="list-group list-group-flush">
108
  <li class="list-group-item text-left">
109
  <a href="https://howto.squirrly.co/kb/seo-audit/#how_seo_audit_works" target="_blank">How does the Audit work?</a>
110
  </li>
111
  <li class="list-group-item text-left">
112
- <a href="https://howto.squirrly.co/kb/seo-audit/" target="_blank">How to add a Page in Audits.</a>
113
  </li>
114
  <li class="list-group-item text-left">
115
- <a href="https://howto.squirrly.co/kb/seo-audit/" target="_blank">How to remove a page from Audits.</a>
116
  </li>
117
  <li class="list-group-item text-left">
118
- <a href="https://howto.squirrly.co/kb/seo-audit/#google_search_console" target="_blank">Connect to Google Search Console.</a>
119
  </li>
120
  <li class="list-group-item text-left">
121
- <a href="https://howto.squirrly.co/kb/seo-audit/#google_analytics" target="_blank">Connect to Google Analytics.</a>
122
  </li>
123
  </ul>
124
  <div class="text-center m-2">
125
- <a href="https://howto.squirrly.co/kb/" target="_blank">[ go to knowledge base ]</a></div>
126
  <?php } elseif ($page == 'sq_rankings') { ?>
127
  <ul class="list-group list-group-flush">
128
  <li class="list-group-item text-left">
129
- <a href="https://howto.squirrly.co/kb/ranking-serp-checker/#add_keyword_ranking" target="_blank">How to add a Keyword in Rankings.</a>
 
 
 
130
  </li>
131
  <li class="list-group-item text-left">
132
- <a href="https://howto.squirrly.co/kb/ranking-serp-checker/#remove_keyword_ranking" target="_blank">How to remove a keyword from Rankings.</a>
133
  </li>
134
  <li class="list-group-item text-left">
135
- <a href="https://howto.squirrly.co/kb/ranking-serp-checker/#check_keyword_information" target="_blank">Check the Keyword Impressions, Clicks and Optimization.</a>
136
  </li>
137
  <li class="list-group-item text-left">
138
  <a href="https://fourhourseo.com/why-does-neil-patel-use-squirrly-seo-for-every-blog-post-that-he-publishes/" target="_blank">Why Does Neil Patel Use Squirrly SEO For Every Blog Post that He Publishes?</a>
139
  </li>
140
  </ul>
141
  <div class="text-center m-2">
142
- <a href="https://howto.squirrly.co/kb/" target="_blank">[ go to knowledge base ]</a></div>
143
  <?php } ?>
144
  </div>
145
  </div>
14
  <?php if (SQ_Classes_Helpers_Tools::getOption('sq_api') == '') { ?>
15
  <ul class="list-group list-group-flush">
16
  <li class="list-group-item text-left">
17
+ <a href="https://howto.squirrly.co/kb/install-squirrly-seo-plugin/#connect_to_cloud" target="_blank">Why connect to Squirrly Cloud?</a>
18
  </li>
19
  <li class="list-group-item text-left">
20
+ <a href="https://howto.squirrly.co/wordpress-seo/squirrly-seo-error-messages/" target="_blank">I <strong>receive an error</strong> while login.</a>
21
  </li>
22
  </ul>
23
  <?php } elseif ($page == 'sq_dashboard') { ?>
24
  <ul class="list-group list-group-flush">
25
 
26
  <li class="list-group-item text-left">
27
+ <a href="https://howto.squirrly.co/kb/import-export-seo-settings/#import_seo" target="_blank">How to <strong>Import SEO</strong> from other SEO plugins.</a>
28
  </li>
29
  <li class="list-group-item text-left">
30
+ <a href="https://howto.squirrly.co/kb/install-squirrly-seo-plugin/#top_10_race" target="_blank">How to get on <strong>TOP 10 Google</strong>?</a>
31
+ </li>
32
+ <li class="list-group-item text-left">
33
+ <a href="https://howto.squirrly.co/kb/next-seo-goals/" target="_blank">How to use <strong>Next SEO Goals</strong>?</a>
34
  </li>
35
  </ul>
36
  <div class="text-center m-2">
37
+ <a href="https://howto.squirrly.co/kb/install-squirrly-seo-plugin/" target="_blank">[ go to knowledge base ]</a></div>
38
  <?php } elseif ($page == 'sq_research') { ?>
39
  <ul class="list-group list-group-flush">
40
  <li class="list-group-item text-left">
41
  <a href="https://howto.squirrly.co/kb/keyword-research-and-seo-strategy/#find_new_keywords" target="_blank">How to do a Keyword Research.</a>
42
  </li>
43
  <li class="list-group-item text-left">
44
+ <a href="https://howto.squirrly.co/kb/keyword-research-and-seo-strategy/#briefcase_add_keyword" target="_blank">How to <strong>add Keywords</strong> into Briefcase.</a>
 
 
 
45
  </li>
46
  <li class="list-group-item text-left">
47
+ <a href="https://howto.squirrly.co/kb/keyword-research-and-seo-strategy/#briefcase_label" target="_blank">How to categorize Keywords.</a>
48
  </li>
49
  <li class="list-group-item text-left">
50
+ <a href="https://howto.squirrly.co/kb/keyword-research-and-seo-strategy/#briefcase_optimize_sla" target="_blank">How to <strong>optimize a post</strong> with Briefcase.</a>
51
  </li>
52
  <li class="list-group-item text-left">
53
+ <a href="https://howto.squirrly.co/kb/keyword-research-and-seo-strategy/#briefcase_backup_keywords" target="_blank">How to <strong>backup/restore</strong> Keywords.</a>
54
  </li>
55
  </ul>
56
  <div class="text-center m-2">
57
+ <a href="https://howto.squirrly.co/kb/keyword-research-and-seo-strategy/" target="_blank">[ go to knowledge base ]</a></div>
58
  <?php } elseif ($page == 'sq_assistant') { ?>
59
  <ul class="list-group list-group-flush">
60
  <li class="list-group-item text-left">
61
+ <a href="https://howto.squirrly.co/kb/squirrly-live-assistant/#all_tasks_green" target="_blank">How to <strong>100% optimize</strong> a post, page or product with Squirrly Live Assistant.</a>
62
  </li>
63
  <li class="list-group-item text-left">
64
+ <a href="https://howto.squirrly.co/kb/squirrly-live-assistant/#copyright_free_images" target="_blank">How to add <strong>Copyright Free Images</strong>.</a>
65
  </li>
66
  <li class="list-group-item text-left">
67
  <a href="https://howto.squirrly.co/faq/why-is-the-squirrly-live-assistant-not-loading-in-the-post-editor/" target="_blank">Squirrly Live Assistant not showing.</a>
68
  </li>
69
  <li class="list-group-item text-left">
70
+ <a href="https://howto.squirrly.co/kb/squirrly-live-assistant/#after_optimization" target="_blank">What to do <strong>after I optimize a post</strong>.</a>
71
  </li>
72
  </ul>
73
  <div class="text-center m-2">
74
+ <a href="https://howto.squirrly.co/kb/squirrly-live-assistant/" target="_blank">[ go to knowledge base ]</a></div>
75
  <?php } elseif ($page == 'sq_seosettings') { ?>
76
  <ul class="list-group list-group-flush">
77
  <li class="list-group-item text-left">
78
+ <a href="https://howto.squirrly.co/kb/seo-automation/" target="_blank">How to set the <strong>SEO in just 2 minutes</strong>.</a>
79
  </li>
80
  <li class="list-group-item text-left">
81
+ <a href="https://howto.squirrly.co/kb/bulk-seo/#bulk_seo_snippet_og" target="_blank">How to <strong>optimize Social Media</strong> for each post.</a>
82
  </li>
83
  <li class="list-group-item text-left">
84
+ <a href="https://howto.squirrly.co/kb/bulk-seo/#bulk_seo_snippet_jsonld" target="_blank">How to activate <strong>Rich Snippets</strong> for Google.</a>
85
+ </li>
86
+ <li class="list-group-item text-left">
87
+ <a href="https://howto.squirrly.co/kb/google-analytics-tracking-tool/#amp_support" target="_blank">How to activate <strong>AMP Support</strong>.</a>
88
+ </li>
89
+ <li class="list-group-item text-left">
90
+ <a href="https://howto.squirrly.co/kb/google-analytics-tracking-tool/#receive_tracking_code" target="_blank">How to activate <strong>GA4 Tracking</strong>.</a>
91
  </li>
92
  </ul>
93
  <div class="text-center m-2">
94
+ <a href="https://howto.squirrly.co/kb/seo-automation/" target="_blank">[ go to knowledge base ]</a></div>
95
  <?php } elseif ($page == 'sq_focuspages') { ?>
96
  <ul class="list-group list-group-flush">
97
  <li class="list-group-item text-left">
98
+ <a href="https://howto.squirrly.co/kb/focus-pages-page-audits/#add_new_focus_page" target="_blank">How to <strong>add a new</strong> Focus Page.</a>
99
  </li>
100
  <li class="list-group-item text-left">
101
+ <a href="https://howto.squirrly.co/kb/focus-pages-page-audits/#remove_focus_page" target="_blank">How to <strong>remove a</strong> Focus Page.</a>
102
  </li>
103
  <li class="list-group-item text-left">
104
+ <a href="https://howto.squirrly.co/kb/focus-pages-page-audits/#chance_to_rank" target="_blank">What is <strong>Chance to Rank</strong>?</a>
105
  </li>
106
  <li class="list-group-item text-left">
107
+ <a href="https://howto.squirrly.co/kb/focus-pages-page-audits/#keyword" target="_blank">How to <strong>add a keyword</strong> in a Focus Page.</a>
108
  </li>
109
  </ul>
110
  <div class="text-center m-2">
111
+ <a href="https://howto.squirrly.co/kb/focus-pages-page-audits/" target="_blank">[ go to knowledge base ]</a></div>
112
  <?php } elseif ($page == 'sq_audits') { ?>
113
  <ul class="list-group list-group-flush">
114
  <li class="list-group-item text-left">
115
  <a href="https://howto.squirrly.co/kb/seo-audit/#how_seo_audit_works" target="_blank">How does the Audit work?</a>
116
  </li>
117
  <li class="list-group-item text-left">
118
+ <a href="https://howto.squirrly.co/kb/seo-audit/#add_new_audit_page" target="_blank">How to <strong>add a page</strong> in Audit.</a>
119
  </li>
120
  <li class="list-group-item text-left">
121
+ <a href="https://howto.squirrly.co/kb/seo-audit/#delete_page" target="_blank">How to <strong>remove a page</strong> from Audits.</a>
122
  </li>
123
  <li class="list-group-item text-left">
124
+ <a href="https://howto.squirrly.co/kb/seo-audit/#google_search_console" target="_blank">Connect to <strong>Google Search Console</strong>.</a>
125
  </li>
126
  <li class="list-group-item text-left">
127
+ <a href="https://howto.squirrly.co/kb/seo-audit/#google_analytics" target="_blank">Connect to <strong>Google Analytics</strong>.</a>
128
  </li>
129
  </ul>
130
  <div class="text-center m-2">
131
+ <a href="https://howto.squirrly.co/kb/seo-audit/" target="_blank">[ go to knowledge base ]</a></div>
132
  <?php } elseif ($page == 'sq_rankings') { ?>
133
  <ul class="list-group list-group-flush">
134
  <li class="list-group-item text-left">
135
+ <a href="https://howto.squirrly.co/kb/ranking-serp-checker/#add_keyword_ranking" target="_blank">How to <strong>add a Keyword</strong> in Rankings.</a>
136
+ </li>
137
+ <li class="list-group-item text-left">
138
+ <a href="https://howto.squirrly.co/kb/ranking-serp-checker/#sync_keyword_ranking" target="_blank">How to <strong>sync a Keyword</strong> with GSC.</a>
139
  </li>
140
  <li class="list-group-item text-left">
141
+ <a href="https://howto.squirrly.co/kb/ranking-serp-checker/#remove_keyword_ranking" target="_blank">How to <strong>remove a keyword</strong> from Rankings.</a>
142
  </li>
143
  <li class="list-group-item text-left">
144
+ <a href="https://howto.squirrly.co/kb/ranking-serp-checker/#check_keyword_information" target="_blank">Check the Keyword <strong>Impressions, Clicks and Optimization</strong>.</a>
145
  </li>
146
  <li class="list-group-item text-left">
147
  <a href="https://fourhourseo.com/why-does-neil-patel-use-squirrly-seo-for-every-blog-post-that-he-publishes/" target="_blank">Why Does Neil Patel Use Squirrly SEO For Every Blog Post that He Publishes?</a>
148
  </li>
149
  </ul>
150
  <div class="text-center m-2">
151
+ <a href="https://howto.squirrly.co/kb/ranking-serp-checker/" target="_blank">[ go to knowledge base ]</a></div>
152
  <?php } ?>
153
  </div>
154
  </div>
view/Errors/Connect.php CHANGED
@@ -36,7 +36,28 @@ $page = apply_filters('sq_page', SQ_Classes_Helpers_Tools::getValue('page', ''))
36
 
37
  <?php if ($page == 'sq_dashboard') { ?>
38
  <div class="mt-5">
39
- <?php SQ_Classes_ObjController::getClass('SQ_Core_BlockFeatures')->init(); ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
40
  </div>
41
  <?php } ?>
42
  </div>
36
 
37
  <?php if ($page == 'sq_dashboard') { ?>
38
  <div class="mt-5">
39
+ <div class="card col-12 my-3 py-3">
40
+ <div class="card-body m-0 p-0">
41
+ <div class="row text-left m-0 p-0">
42
+ <div class="px-5 py-3" style="max-width: 350px;width: 40%;">
43
+ <img src="<?php echo _SQ_ASSETS_URL_ . 'img/squirrly_features.png' ?>" style="width: 250px">
44
+ </div>
45
+ <div class="col px-2 py-3">
46
+ <div class="col-12 m-0 p-0">
47
+ <h3 class="card-title" style="color: green;"><?php echo esc_html__("What's Included in Squirrly SEO Plugin", _SQ_PLUGIN_NAME_); ?></h3>
48
+ </div>
49
+
50
+ <div class="sq_separator"></div>
51
+ <div class="col-12 m-2 p-0">
52
+ <div class="card-title-description m-2 text-black-50"><?php echo sprintf(esc_html__("With a total of over %s400%s free in-depth features that only Squirrly can offer.", _SQ_PLUGIN_NAME_), '<strong>', '</strong>'); ?></div>
53
+ </div>
54
+ <div class="col-12 m-0 p-4 text-right">
55
+ <a href="<?php echo SQ_Classes_Helpers_Tools::getAdminUrl('sq_features') ?>" class="btn btn-sm btn-success m-0 py-2 px-4"><?php echo esc_html__("See what features are included in Squirrly SEO", _SQ_PLUGIN_NAME_); ?></a>
56
+ </div>
57
+ </div>
58
+ </div>
59
+ </div>
60
+ </div>
61
  </div>
62
  <?php } ?>
63
  </div>
view/Features.php CHANGED
@@ -11,7 +11,7 @@
11
  <?php if (SQ_Classes_Helpers_Tools::getMenuVisible('show_ads')) { ?>
12
  <div class="card col-12 p-0 my-2">
13
  <div class="my-3 py-3">
14
- <div class="col-12 row m-0">
15
  <div class="checker col-12 row m-0 p-0 text-center">
16
  <div class="col-12 my-2 mx-auto p-0 font-weight-bold" style="font-size: 18px;"><?php echo esc_html__("We Need Your Support", _SQ_PLUGIN_NAME_) ?></div>
17
 
@@ -34,7 +34,7 @@
34
  <?php if (current_user_can('sq_manage_snippets')) { ?>
35
  <div class="card col-12 p-0 my-2">
36
  <div class="my-4 py-4">
37
- <div class="col-12 row m-0">
38
  <div class="checker col-12 row m-0 p-0">
39
  <div class="col-12 p-0 m-0 sq-switch sq-switch-sm sq_save_ajax">
40
  <input type="checkbox" id="sq_seoexpert" name="sq_seoexpert" class="sq-switch" data-action="sq_ajax_seosettings_save" data-input="sq_seoexpert" data-name="sq_seoexpert" <?php echo(SQ_Classes_Helpers_Tools::getOption('sq_seoexpert') ? 'checked="checked"' : '') ?> value="1"/>
11
  <?php if (SQ_Classes_Helpers_Tools::getMenuVisible('show_ads')) { ?>
12
  <div class="card col-12 p-0 my-2">
13
  <div class="my-3 py-3">
14
+ <div class="col-12 row py-0 m-0">
15
  <div class="checker col-12 row m-0 p-0 text-center">
16
  <div class="col-12 my-2 mx-auto p-0 font-weight-bold" style="font-size: 18px;"><?php echo esc_html__("We Need Your Support", _SQ_PLUGIN_NAME_) ?></div>
17
 
34
  <?php if (current_user_can('sq_manage_snippets')) { ?>
35
  <div class="card col-12 p-0 my-2">
36
  <div class="my-4 py-4">
37
+ <div class="col-12 row py-0 m-0">
38
  <div class="checker col-12 row m-0 p-0">
39
  <div class="col-12 p-0 m-0 sq-switch sq-switch-sm sq_save_ajax">
40
  <input type="checkbox" id="sq_seoexpert" name="sq_seoexpert" class="sq-switch" data-action="sq_ajax_seosettings_save" data-input="sq_seoexpert" data-name="sq_seoexpert" <?php echo(SQ_Classes_Helpers_Tools::getOption('sq_seoexpert') ? 'checked="checked"' : '') ?> value="1"/>
view/FocusPages/FocusPageStats.php CHANGED
@@ -147,7 +147,7 @@
147
  echo '<h6 class="col-12 px-0 text-success" style="line-height: 25px;font-size: 14px;"><i class="fa fa-arrow-up" style="font-size: 9px !important;margin: 0 5px;vertical-align: middle;"></i> ' . $value . '</h6>';
148
  }
149
  ?>
150
- <a class="btn btn-sm btn-success" href="https://twitter.com/intent/tweet?text=<?php echo urlencode('I love the results I get for my Focus Page with Squirrly SEO plugin for #WordPress. @SquirrlyHQ #SEO') ?>">Share Your Success</a><?php
151
  } else {
152
  echo '<h4 class="col-12 px-0 text-info">' . esc_html__("No progress found yet", _SQ_PLUGIN_NAME_) . '</h4>';
153
  } ?>
147
  echo '<h6 class="col-12 px-0 text-success" style="line-height: 25px;font-size: 14px;"><i class="fa fa-arrow-up" style="font-size: 9px !important;margin: 0 5px;vertical-align: middle;"></i> ' . $value . '</h6>';
148
  }
149
  ?>
150
+ <a class="mt-2 btn btn-sm btn-light border" href="https://twitter.com/intent/tweet?text=<?php echo urlencode('I love the results I get for my Focus Page with Squirrly SEO plugin for #WordPress. @SquirrlyHQ #SEO') ?>">Share Your Success</a><?php
151
  } else {
152
  echo '<h4 class="col-12 px-0 text-info">' . esc_html__("No progress found yet", _SQ_PLUGIN_NAME_) . '</h4>';
153
  } ?>
view/Onboarding/Step2.1.php DELETED
@@ -1,69 +0,0 @@
1
- <?php defined('ABSPATH') || die('Cheatin\' uh?'); ?>
2
- <div id="sq_wrap">
3
- <div class="d-flex flex-row my-0 bg-white" style="clear: both !important;">
4
- <div class="d-flex flex-row flex-nowrap flex-grow-1 bg-white px-1 m-0">
5
- <div class="flex-grow-1 px-1 sq_flex">
6
-
7
- <div class="card col-12 p-0">
8
-
9
- <div class="card-body p-2 bg-title rounded-top row">
10
- <div class="col-6 m-0 p-0 py-2 bg-title rounded-top">
11
- <div class="sq_icons sq_squirrly_icon m-1 mx-3"></div>
12
- <h3 class="card-title"><?php echo esc_html__("14 Days Journey", _SQ_PLUGIN_NAME_); ?></h3>
13
- </div>
14
- <div class="col-6 m-0 p-0 py-2 text-right">
15
- <a href="<?php echo SQ_Classes_Helpers_Tools::getAdminUrl('sq_onboarding', 'step2.2') ?>" class="btn rounded-0 btn-success btn-lg px-3 mx-2 float-sm-right"><?php echo esc_html__("Continue", _SQ_PLUGIN_NAME_) . ' >'; ?></a>
16
- </div>
17
- </div>
18
-
19
- <div class="card col-12 p-0 m-0 border-0 border-0">
20
- <div class="card-body p-0">
21
- <div class="col-12 m-0 p-0">
22
- <div class="card col-12 p-0 border-0 ">
23
-
24
- <div class="col-12 pt-0 pb-4 ">
25
-
26
- <div class="col-12 card-title py-3 px-4 text-center" style="font-size: 24px; line-height: 35px"><?php echo esc_html__("All you need now is to start driving One of your most valuable pages to Better Rankings.", _SQ_PLUGIN_NAME_); ?></div>
27
- <div class="row py-5 px-5 text-black-50">
28
- <div class="col-6">
29
- <img src="<?php echo _SQ_ASSETS_URL_ . 'img/onboarding/racing_car.png' ?>" style="width: 100%" >
30
- </div>
31
- <div class="col-6">
32
- <div style="font-size: 22px; color: rebeccapurple; line-height: 35px" class="mt-5 mb-2"><?php echo esc_html__("To drive it in the right direction, you have the chance to join (for Free) the 14 Days Journey to Better Rankings.", _SQ_PLUGIN_NAME_); ?></div>
33
- </div>
34
- </div>
35
-
36
- <div class="col-12 m-3 px-5 clear">
37
- <div style="font-size: 18px; color: rebeccapurple; line-height: 30px"><?php echo esc_html__("You'll get", _SQ_PLUGIN_NAME_); ?>:</div>
38
- <ul class="m-3 ml-5" style="list-style: disc !important;">
39
- <li class="mb-3 text-black-50" style="font-size: 16px"><?php echo sprintf(esc_html__("the %schance to fix in 14 days%s mistakes from years of ineffective SEO.", _SQ_PLUGIN_NAME_), '<strong>', '</strong>'); ?></li>
40
- <li class="mb-3 text-black-50" style="font-size: 16px"><?php echo sprintf(esc_html__("the skills you need to %ssucceed in 14 days%s.", _SQ_PLUGIN_NAME_), '<strong>', '</strong>'); ?></li>
41
- <li class="mb-3 text-black-50" style="font-size: 16px"><?php echo sprintf(esc_html__("access to the private %sJourneyTeam community%s where you can share your experience and talk about it (good and bad, all is accepted).", _SQ_PLUGIN_NAME_), '<a href="https://www.facebook.com/groups/SquirrlySEOCustomerService/" target="_blank" >', '</a>'); ?></li>
42
- <li class="mb-3 text-black-50" style="font-size: 16px"><?php echo sprintf(esc_html__("receive%s help from the JourneyTeam%s and Private Feedback on your journey from Squirrly.", _SQ_PLUGIN_NAME_), '<a href="https://www.facebook.com/groups/SquirrlySEOCustomerService/" target="_blank" >', '</a>'); ?></li>
43
- <li class="mb-3 text-black-50" style="font-size: 16px"><?php echo sprintf(esc_html__("an %sexact recipe to follow for 14 Days%s to bring one of your pages up in rankings, for a hands-on experience.", _SQ_PLUGIN_NAME_), '<strong>', '</strong>'); ?></li>
44
- <li class="mb-3 text-black-50" style="font-size: 16px"><?php echo sprintf(esc_html__("%sall the costs%s (to third parties) involved with APIs, technology, cloud computing, etc. %sare fully sponsored by Squirrly%s. We sponsor every new member who wishes to become part of the winning JourneyTeam.", _SQ_PLUGIN_NAME_), '<strong>', '</strong>', '<strong>', '</strong>'); ?></li>
45
- </ul>
46
-
47
-
48
- </div>
49
- <div class="col-12 my-3 p-0 py-3 border-top">
50
- <a href="<?php echo SQ_Classes_Helpers_Tools::getAdminUrl('sq_onboarding', 'step2.2') ?>" class="btn rounded-0 btn-success btn-lg px-3 mx-4 float-sm-right"><?php echo esc_html__("Continue", _SQ_PLUGIN_NAME_) . ' >'; ?></a>
51
- </div>
52
-
53
- </div>
54
-
55
- </div>
56
-
57
- </div>
58
-
59
- </div>
60
- </div>
61
-
62
- </div>
63
-
64
-
65
- </div>
66
- </div>
67
- </div>
68
- </div>
69
- </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
view/Onboarding/Step2.2.php DELETED
@@ -1,89 +0,0 @@
1
- <?php defined('ABSPATH') || die('Cheatin\' uh?'); ?>
2
- <div id="sq_wrap">
3
- <div class="d-flex flex-row my-0 bg-white" style="clear: both !important;">
4
- <div class="d-flex flex-row flex-nowrap flex-grow-1 bg-white px-1 m-0">
5
- <div class="flex-grow-1 px-1 sq_flex">
6
-
7
- <div class="card col-12 p-0" style="min-width: 850px;">
8
- <div class="card-body p-2 bg-title rounded-top row">
9
- <div class="col-6 m-0 p-0 py-2 bg-title rounded-top">
10
- <div class="sq_icons sq_squirrly_icon m-1 mx-3"></div>
11
- <h3 class="card-title"><?php echo esc_html__("Start the 14 Days Journey", _SQ_PLUGIN_NAME_); ?></h3>
12
- </div>
13
- <div class="col-6 m-0 p-0 py-2 text-right">
14
- <a href="<?php echo SQ_Classes_Helpers_Tools::getAdminUrl('sq_dashboard') ?>" class="btn btn-default btn-lg px-3 mx-4 float-sm-right border rounded-circle">X</a>
15
- </div>
16
- </div>
17
-
18
- <div class="col-12 p-0 m-0 border-0 tab-panel border-0">
19
- <div class="p-0">
20
- <div class="col-12 m-0 p-0">
21
- <div class="col-12 p-0 border-0 ">
22
- <div class="col-12 pt-0 pb-4 tab-panel">
23
- <div class="col-12 m-auto px-5 tab-panel">
24
- <?php if (SQ_Classes_Helpers_Tools::getOption('sq_seojourney')) { ?>
25
- <div class="col-12 py-3 pt-5 text-success text-center" style="font-size: 28px; color: rebeccapurple; line-height: 30px"><?php echo sprintf(esc_html__("Awesome! You are on your way to better results.", _SQ_PLUGIN_NAME_), '<br />'); ?></div>
26
- <div class="p-0 m-0 mb-5 text-center">
27
- <div class="col-12" style="font-size: 18px"><?php echo sprintf(esc_html__("You will receive the %sdaily recipe%s in your %sDashboard%s.", _SQ_PLUGIN_NAME_), '<strong>', '</strong>', '<strong>', '</strong>'); ?></div>
28
- </div>
29
- <div class="col-12 m-3 px-4 text-center justify-content-center">
30
- <img src="<?php echo _SQ_ASSETS_URL_ . 'img/onboarding/racing_car start.png' ?>" style="max-width: 60%;">
31
- </div>
32
- <div class="col-12 m-3 px-4 clear">
33
- <div class="my-3" style="font-size: 16px; line-height: 30px"><?php echo sprintf(esc_html__("%sJoin%s the rest of the %sJourneyTeam on the Facebook Group%s and if you want you can share with the members that you have started your Journey.", _SQ_PLUGIN_NAME_), '<strong>', '</strong>', '<strong><a href="https://www.facebook.com/groups/SquirrlySEOCustomerService/" target="_blank" >', '</a></strong>'); ?></div>
34
- <div class="my-3" style="font-size: 16px; line-height: 30px"><?php echo sprintf(esc_html__("%sIn 14 Days you can tell us how it went%s (via messages on our %sFacebook Page%s) and we'll tell you what you can do to further improve the results you got during the 14 Days.", _SQ_PLUGIN_NAME_), '<strong>', '</strong>', '<strong><a href="https://www.facebook.com/Squirrly.co/" target="_blank" >', '</a></strong>'); ?></div>
35
- </div>
36
- <div class="p-0 m-0 mb-3 text-center">
37
- <a href="<?php echo SQ_Classes_Helpers_Tools::getAdminUrl('sq_dashboard') ?>" class="btn btn-lg bg-success text-white px-5 mt-3">
38
- <?php echo esc_html__("Close", _SQ_PLUGIN_NAME_) ?>
39
- </a>
40
- </div>
41
- <?php } else { ?>
42
- <h2 class="col-12 py-3 text-center"><?php echo esc_html__("Choose how to continue", _SQ_PLUGIN_NAME_); ?>:</h2>
43
- <div class="row flex-nowrap py-3">
44
- <div class="col text-center">
45
-
46
- <form method="post" class="p-0 m-0">
47
- <img src="<?php echo _SQ_ASSETS_URL_ . 'img/onboarding/racing_car start.png' ?>" class="float-left mr-4" style="max-width: 100%;">
48
-
49
- <?php SQ_Classes_Helpers_Tools::setNonce('sq_onboarding_commitment', 'sq_nonce'); ?>
50
- <input type="hidden" name="action" value="sq_onboarding_commitment"/>
51
- <button type="submit" class="btn btn-lg btn-success px-5 mt-3">
52
- <?php echo esc_html__("Let's Start My 14 Days Journey", _SQ_PLUGIN_NAME_) ?>
53
- </button>
54
- </form>
55
- </div>
56
- <div class="col text-center">
57
- <img src="<?php echo _SQ_ASSETS_URL_ . 'img/onboarding/racing_car_finish_rusty.png' ?>" class="float-left mr-4" style="max-width: 100%;">
58
-
59
- <a href="<?php echo SQ_Classes_Helpers_Tools::getAdminUrl('sq_dashboard') ?>" class="btn btn-lg bg-transparent text-black-50 my-2">
60
- <?php echo esc_html__("Nah, there is little interest in this", _SQ_PLUGIN_NAME_) ?>
61
- </a>
62
- </div>
63
- </div>
64
- <?php } ?>
65
-
66
- </div>
67
- <?php if (!SQ_Classes_Helpers_Tools::getOption('sq_seojourney')) { ?>
68
- <div class="col-12 my-3 p-0 py-3 border-top">
69
- <a href="<?php echo SQ_Classes_Helpers_Tools::getAdminUrl('sq_dashboard') ?>" class="btn rounded-0 btn-default btn-lg px-3 mx-4 float-sm-right"><?php echo esc_html__("Close Window", _SQ_PLUGIN_NAME_); ?></a>
70
- </div>
71
- <?php } ?>
72
-
73
- </div>
74
-
75
- </div>
76
-
77
- </div>
78
-
79
- </div>
80
- </div>
81
-
82
- </div>
83
-
84
-
85
- </div>
86
- </div>
87
- </div>
88
- </div>
89
- </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
view/Overview.php CHANGED
@@ -54,7 +54,7 @@
54
  <?php if (SQ_Classes_Helpers_Tools::getMenuVisible('show_ads')) { ?>
55
  <div class="card col-12 p-0 my-2">
56
  <div class="my-3 py-3">
57
- <div class="col-12 row m-0">
58
  <div class="checker col-12 row m-0 p-0 text-center">
59
  <div class="col-12 my-2 mx-auto p-0 font-weight-bold" style="font-size: 18px;"><?php echo esc_html__("We Need Your Support", _SQ_PLUGIN_NAME_) ?></div>
60
 
54
  <?php if (SQ_Classes_Helpers_Tools::getMenuVisible('show_ads')) { ?>
55
  <div class="card col-12 p-0 my-2">
56
  <div class="my-3 py-3">
57
+ <div class="col-12 row p-0 m-0">
58
  <div class="checker col-12 row m-0 p-0 text-center">
59
  <div class="col-12 my-2 mx-auto p-0 font-weight-bold" style="font-size: 18px;"><?php echo esc_html__("We Need Your Support", _SQ_PLUGIN_NAME_) ?></div>
60
 
view/Research/Briefcase.php CHANGED
@@ -55,6 +55,22 @@
55
  </div>
56
  </form>
57
  </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
58
  <?php } ?>
59
  <div class="card-body p-0">
60
  <div class="col-12 m-0 p-0">
@@ -405,7 +421,7 @@
405
  <?php } ?>
406
  <?php } elseif (SQ_Classes_Helpers_Tools::getIsset('skeyword') || SQ_Classes_Helpers_Tools::getIsset('slabel')) { ?>
407
  <div class="card-body">
408
- <h3 class="text-center"><?php echo esc_html($view->error); ?></h3>
409
  </div>
410
  <?php } else { ?>
411
 
55
  </div>
56
  </form>
57
  </div>
58
+ <?php }else{ ?>
59
+ <div class="row px-3">
60
+ <form method="get" class="form-inline col-12">
61
+ <input type="hidden" name="page" value="<?php echo SQ_Classes_Helpers_Tools::getValue('page') ?>">
62
+ <input type="hidden" name="tab" value="<?php echo SQ_Classes_Helpers_Tools::getValue('tab') ?>">
63
+ <div class="col-12 p-0 py-2">
64
+ <div class="d-flex flex-row justify-content-end p-0 m-0">
65
+ <input type="search" class="d-inline-block align-middle col-5 p-2 mr-2" id="post-search-input" autofocus name="skeyword" value="<?php echo SQ_Classes_Helpers_Sanitize::escapeKeyword(SQ_Classes_Helpers_Tools::getValue('skeyword')) ?>"/>
66
+ <input type="submit" class="btn btn-primary" value="<?php echo esc_html__("Search Keyword", _SQ_PLUGIN_NAME_) ?>"/>
67
+ <?php if (SQ_Classes_Helpers_Tools::getIsset('skeyword') || SQ_Classes_Helpers_Tools::getIsset('slabel')) { ?>
68
+ <button type="button" class="btn btn-info ml-1 p-v-xs" onclick="location.href = '<?php echo SQ_Classes_Helpers_Tools::getAdminUrl('sq_research', 'briefcase') ?>';" style="cursor: pointer"><?php echo esc_html__("Show All", _SQ_PLUGIN_NAME_) ?></button>
69
+ <?php } ?>
70
+ </div>
71
+ </div>
72
+ </form>
73
+ </div>
74
  <?php } ?>
75
  <div class="card-body p-0">
76
  <div class="col-12 m-0 p-0">
421
  <?php } ?>
422
  <?php } elseif (SQ_Classes_Helpers_Tools::getIsset('skeyword') || SQ_Classes_Helpers_Tools::getIsset('slabel')) { ?>
423
  <div class="card-body">
424
+ <h4 class="text-center"><?php echo $view->error; ?></h4>
425
  </div>
426
  <?php } else { ?>
427
 
view/Research/Labels.php CHANGED
@@ -22,11 +22,13 @@
22
  </div>
23
  <div id="sq_briefcaselabels" class="card col-12 p-0 tab-panel border-0">
24
  <?php do_action('sq_subscription_notices'); ?>
 
25
  <div class="card-body p-0">
26
- <button class="btn btn-lg btn-warning text-white px-5 mx-3" onclick="jQuery('.sq_add_labels_dialog').modal('show')" data-dismiss="modal">
27
  <i class="fa fa-plus-square-o"></i> <?php echo esc_html__("Add new Label", _SQ_PLUGIN_NAME_); ?>
28
  </button>
29
  </div>
 
30
 
31
  <div class="sq_add_labels_dialog modal" tabindex="-1" role="dialog">
32
  <div class="modal-dialog">
@@ -148,6 +150,9 @@
148
  <?php } else { ?>
149
  <div class="card-body">
150
  <h4 class="text-center"><?php echo esc_html__("Welcome to Briefcase Labels", _SQ_PLUGIN_NAME_); ?></h4>
 
 
 
151
  <div class="col-12 mt-5 mx-2">
152
  <h5 class="text-left my-3 text-info"><?php echo esc_html__("TIPS: How Should I Create My Labels?", _SQ_PLUGIN_NAME_); ?></h5>
153
  <ul>
22
  </div>
23
  <div id="sq_briefcaselabels" class="card col-12 p-0 tab-panel border-0">
24
  <?php do_action('sq_subscription_notices'); ?>
25
+ <?php if (is_array($view->labels) && !empty($view->labels)) { ?>
26
  <div class="card-body p-0">
27
+ <button class="btn btn-lg btn-primary px-5 mx-3" onclick="jQuery('.sq_add_labels_dialog').modal('show')" data-dismiss="modal">
28
  <i class="fa fa-plus-square-o"></i> <?php echo esc_html__("Add new Label", _SQ_PLUGIN_NAME_); ?>
29
  </button>
30
  </div>
31
+ <?php }?>
32
 
33
  <div class="sq_add_labels_dialog modal" tabindex="-1" role="dialog">
34
  <div class="modal-dialog">
150
  <?php } else { ?>
151
  <div class="card-body">
152
  <h4 class="text-center"><?php echo esc_html__("Welcome to Briefcase Labels", _SQ_PLUGIN_NAME_); ?></h4>
153
+ <div class="col-12 m-2 text-center">
154
+ <button class="btn btn-lg btn-primary" onclick="jQuery('.sq_add_labels_dialog').modal('show')" data-dismiss="modal"><i class="fa fa-plus-square-o"></i> <?php echo esc_html__("Add label to organize the keywords in Briefcase", _SQ_PLUGIN_NAME_); ?></button>
155
+ </div>
156
  <div class="col-12 mt-5 mx-2">
157
  <h5 class="text-left my-3 text-info"><?php echo esc_html__("TIPS: How Should I Create My Labels?", _SQ_PLUGIN_NAME_); ?></h5>
158
  <ul>
view/Research/Research.php CHANGED
@@ -41,7 +41,7 @@
41
  <h4 class="text-success text-center mt-5 mb-2"><?php echo esc_html__("Add a keyword to Briefcase", _SQ_PLUGIN_NAME_) ?></h4>
42
  <form method="post" class="p-0 m-0">
43
  <div class="col-8 offset-2">
44
- <input type="text" name="keyword" class="form-control mb-2" value="<?php echo SQ_Classes_Helpers_Tools::getValue('keyword', '') ?>">
45
  <div class="my-2 text-black-50 small text-center"><?php echo esc_html__("It's best if you focus on finding Long-Tail Keywords.", _SQ_PLUGIN_NAME_) ?></div>
46
  </div>
47
  <div class="col-12 mt-3 text-center">
@@ -62,7 +62,7 @@
62
  <h6 class="my-2 text-info">
63
  <strong><?php echo esc_html__("Enter a keyword that matches your business", _SQ_PLUGIN_NAME_) ?>:</strong>
64
  </h6>
65
- <input type="text" name="sq_input_keyword" class="form-control sq_input_keyword mb-2" value="<?php echo SQ_Classes_Helpers_Tools::getValue('keyword', '') ?>">
66
  <input type="hidden" name="post_id" value="<?php echo SQ_Classes_Helpers_Tools::getValue('post_id', false) ?>">
67
  <div class="my-2 text-black-50 small text-center"><?php echo esc_html__("Focus on finding Long Tail Keywords.", _SQ_PLUGIN_NAME_) ?></div>
68
  <h4 class="sq_research_error text-warning text-center" style="display: none"><?php echo esc_html__("You need to enter a keyword first", _SQ_PLUGIN_NAME_) ?></h4>
41
  <h4 class="text-success text-center mt-5 mb-2"><?php echo esc_html__("Add a keyword to Briefcase", _SQ_PLUGIN_NAME_) ?></h4>
42
  <form method="post" class="p-0 m-0">
43
  <div class="col-8 offset-2">
44
+ <input type="text" name="keyword" class="form-control mb-2" autofocus value="<?php echo SQ_Classes_Helpers_Tools::getValue('keyword', '') ?>">
45
  <div class="my-2 text-black-50 small text-center"><?php echo esc_html__("It's best if you focus on finding Long-Tail Keywords.", _SQ_PLUGIN_NAME_) ?></div>
46
  </div>
47
  <div class="col-12 mt-3 text-center">
62
  <h6 class="my-2 text-info">
63
  <strong><?php echo esc_html__("Enter a keyword that matches your business", _SQ_PLUGIN_NAME_) ?>:</strong>
64
  </h6>
65
+ <input type="text" name="sq_input_keyword" autofocus class="form-control sq_input_keyword mb-2" value="<?php echo SQ_Classes_Helpers_Tools::getValue('keyword', '') ?>">
66
  <input type="hidden" name="post_id" value="<?php echo SQ_Classes_Helpers_Tools::getValue('post_id', false) ?>">
67
  <div class="my-2 text-black-50 small text-center"><?php echo esc_html__("Focus on finding Long Tail Keywords.", _SQ_PLUGIN_NAME_) ?></div>
68
  <h4 class="sq_research_error text-warning text-center" style="display: none"><?php echo esc_html__("You need to enter a keyword first", _SQ_PLUGIN_NAME_) ?></h4>
view/Research/Suggested.php CHANGED
@@ -149,7 +149,7 @@
149
  <?php } else { ?>
150
  <div class="card-body">
151
  <h4 class="text-center"><?php echo esc_html__("Welcome to Suggested Keywords", _SQ_PLUGIN_NAME_); ?></h4>
152
- <h5 class="text-center"><?php echo esc_html__("Once a week, Squirrly checks all the keywords from your briefcase.", _SQ_PLUGIN_NAME_); ?></h5>
153
  <h5 class="text-center"><?php echo esc_html__("If it finds better keywords, they will be listed here", _SQ_PLUGIN_NAME_); ?></h5>
154
  <h6 class="text-center text-black-50 mt-3"><?php echo esc_html__("Until then, add keywords in Briefcase", _SQ_PLUGIN_NAME_); ?>:</h6>
155
  <div class="col-12 my-4 text-center">
149
  <?php } else { ?>
150
  <div class="card-body">
151
  <h4 class="text-center"><?php echo esc_html__("Welcome to Suggested Keywords", _SQ_PLUGIN_NAME_); ?></h4>
152
+ <h5 class="text-center mt-4"><?php echo esc_html__("Once a week, Squirrly checks all the keywords from your briefcase.", _SQ_PLUGIN_NAME_); ?></h5>
153
  <h5 class="text-center"><?php echo esc_html__("If it finds better keywords, they will be listed here", _SQ_PLUGIN_NAME_); ?></h5>
154
  <h6 class="text-center text-black-50 mt-3"><?php echo esc_html__("Until then, add keywords in Briefcase", _SQ_PLUGIN_NAME_); ?>:</h6>
155
  <div class="col-12 my-4 text-center">
view/SeoSettings/Jsonld.php CHANGED
@@ -171,12 +171,13 @@
171
  </div>
172
 
173
  <a name="localseo"></a>
174
- <?php if (!SQ_Classes_Helpers_Tools::getOption('sq_seoexpert')) { ?>
175
- <button type="button" class="show_advanced col-12 btn btn-light py-3 my-3 font-weight-bold border" style="font-size: 20px"><?php echo esc_html__("Setup JSON-LD Schema for Local SEO", _SQ_PLUGIN_NAME_); ?></button>
176
  <?php } ?>
177
 
178
- <div class="sq_advanced">
179
- <div class="bg-title p-2 mt-5">
 
180
  <h3 class="col-12 card-title"><?php echo esc_html__("GEO Location", _SQ_PLUGIN_NAME_); ?>
181
  <a href="https://howto.squirrly.co/kb/json-ld-structured-data/#local_seo" target="_blank"><i class="fa fa-question-circle m-0 p-0"></i></a>
182
  </h3>
@@ -186,15 +187,26 @@
186
  <?php echo esc_html__("GEO Settings", _SQ_PLUGIN_NAME_); ?>:
187
  <a href="https://howto.squirrly.co/kb/json-ld-structured-data/#local_seo" target="_blank"><i class="fa fa-question-circle m-0 px-2" style="display: inline;"></i></a>
188
  <div class="small text-black-50 my-1"><?php echo esc_html__("Latitude & Longitude of your store/business.", _SQ_PLUGIN_NAME_); ?></div>
 
 
 
189
  </div>
190
- <div class="col-4 py-0 pl-0 pr-2">
191
- <input type="text" class="form-control bg-input" name="sq_jsonld[Organization][place][geo][latitude]" value="<?php echo(($jsonld['Organization']['place']['geo']['latitude']) ? $jsonld['Organization']['place']['geo']['latitude'] : '') ?>" placeholder="<?php echo esc_html__("latitude", _SQ_PLUGIN_NAME_); ?>"/>
192
- </div>
193
- <div class="col-4 py-0 pl-2 pr-0">
194
- <input type="text" class="form-control bg-input" name="sq_jsonld[Organization][place][geo][longitude]" value="<?php echo(($jsonld['Organization']['place']['geo']['longitude']) ? $jsonld['Organization']['place']['geo']['longitude'] : '') ?>" placeholder="<?php echo esc_html__("longitude", _SQ_PLUGIN_NAME_); ?>"/>
 
 
 
 
 
 
 
195
  </div>
196
  </div>
197
 
 
198
  <div class="bg-title p-2 mt-5">
199
  <h3 class="col-12 card-title"><?php echo esc_html__("Opening Hours", _SQ_PLUGIN_NAME_); ?>
200
  <a href="https://howto.squirrly.co/kb/json-ld-structured-data/#local_seo_hours" target="_blank"><i class="fa fa-question-circle m-0 p-0"></i></a>
@@ -366,7 +378,7 @@
366
  </div>
367
  </div>
368
 
369
- <div class="col-12 row mb-1 ml-1">
370
  <div class="checker col-12 row my-2 py-1">
371
  <div class="col-12 p-0 sq-switch sq-switch-sm">
372
  <input type="hidden" name="sq_jsonld_product_defaults" value="0"/>
@@ -379,6 +391,8 @@
379
  </div>
380
  </div>
381
  <?php } ?>
 
 
382
  <div class="col-12 row mb-1 ml-1">
383
  <div class="checker col-12 row my-2 py-1">
384
  <div class="col-12 p-0 sq-switch sq-switch-sm">
@@ -464,7 +478,7 @@
464
  <div class="col-12 my-5 mx-2">
465
  <h5 class="text-left my-4 text-info"><?php echo esc_html__("Tips: How to optimize Json-LD Schema on all pages?", _SQ_PLUGIN_NAME_); ?></h5>
466
  <ul class="mx-3">
467
- <li style="font-size: 15px; list-style: initial;"><?php echo sprintf(esc_html__("Use the %s SEO Automation %s to setup the Json-LD type based on Post Types.", _SQ_PLUGIN_NAME_), '<a href="' . SQ_Classes_Helpers_Tools::getAdminUrl('sq_seosettings', 'automation') . '">', '</a>'); ?></li>
468
  <li style="font-size: 15px; list-style: initial;"><?php echo sprintf(esc_html__("Use %s Bulk SEO %s to optimize the JSON-LD in the SEO Snippet for each page on your website.", _SQ_PLUGIN_NAME_), '<a href="' . SQ_Classes_Helpers_Tools::getAdminUrl('sq_bulkseo', 'bulkseo') . '">', '</a>'); ?></li>
469
  </ul>
470
  </div>
171
  </div>
172
 
173
  <a name="localseo"></a>
174
+ <?php if (!SQ_Classes_Helpers_Tools::getOption('sq_auto_jsonld_local')) { ?>
175
+ <button type="button" class="col-12 btn btn-light py-3 my-3 font-weight-bold border" style="font-size: 20px" onclick="jQuery('.sq_locaseo').toggle()"><?php echo esc_html__("Setup JSON-LD Schema for Local SEO", _SQ_PLUGIN_NAME_); ?></button>
176
  <?php } ?>
177
 
178
+
179
+ <div class="sq_locaseo" <?php if (!SQ_Classes_Helpers_Tools::getOption('sq_auto_jsonld_local')) { ?>style="display: none;" <?php }?>>
180
+ <div class="bg-title p-2 mt-4">
181
  <h3 class="col-12 card-title"><?php echo esc_html__("GEO Location", _SQ_PLUGIN_NAME_); ?>
182
  <a href="https://howto.squirrly.co/kb/json-ld-structured-data/#local_seo" target="_blank"><i class="fa fa-question-circle m-0 p-0"></i></a>
183
  </h3>
187
  <?php echo esc_html__("GEO Settings", _SQ_PLUGIN_NAME_); ?>:
188
  <a href="https://howto.squirrly.co/kb/json-ld-structured-data/#local_seo" target="_blank"><i class="fa fa-question-circle m-0 px-2" style="display: inline;"></i></a>
189
  <div class="small text-black-50 my-1"><?php echo esc_html__("Latitude & Longitude of your store/business.", _SQ_PLUGIN_NAME_); ?></div>
190
+ <div class="small text-black-50 my-1">
191
+ <a href="https://www.latlong.net/convert-address-to-lat-long.html" target="_blank"><?php echo esc_html__("Get GEO Coordonates based on address.", _SQ_PLUGIN_NAME_); ?></a>
192
+ </div>
193
  </div>
194
+ <div class="col-8 p-0">
195
+ <div class="row px-3">
196
+ <div class="col-5 py-0 pl-0 pr-2">
197
+ <input type="text" class="form-control bg-input" name="sq_jsonld[Organization][place][geo][latitude]" value="<?php echo(($jsonld['Organization']['place']['geo']['latitude']) ? $jsonld['Organization']['place']['geo']['latitude'] : '') ?>" placeholder="<?php echo esc_html__("latitude", _SQ_PLUGIN_NAME_); ?>"/>
198
+ </div>
199
+ <div class="col-5 py-0 pl-2 pr-0">
200
+ <input type="text" class="form-control bg-input" name="sq_jsonld[Organization][place][geo][longitude]" value="<?php echo(($jsonld['Organization']['place']['geo']['longitude']) ? $jsonld['Organization']['place']['geo']['longitude'] : '') ?>" placeholder="<?php echo esc_html__("longitude", _SQ_PLUGIN_NAME_); ?>"/>
201
+ </div>
202
+ </div>
203
+ <div class="row px-3 pt-2">
204
+ <div class="col-10 text-black-50 p-0"><?php echo sprintf(esc_html__("Download the file %s for GEO Coordonates to import into %s Google Earth %s.", _SQ_PLUGIN_NAME_), '<strong><a href="' . SQ_Classes_ObjController::getClass('SQ_Controllers_Sitemaps')->getKmlUrl('locations') . '">' . SQ_Classes_ObjController::getClass('SQ_Controllers_Sitemaps')->getKmlUrl('locations') . '</a></strong>', '<a href="https://support.google.com/earth/answer/7365595?co=GENIE.Platform%3DDesktop&hl=en" target="_blank" >', '</a>'); ?></div>
205
+ </div>
206
  </div>
207
  </div>
208
 
209
+
210
  <div class="bg-title p-2 mt-5">
211
  <h3 class="col-12 card-title"><?php echo esc_html__("Opening Hours", _SQ_PLUGIN_NAME_); ?>
212
  <a href="https://howto.squirrly.co/kb/json-ld-structured-data/#local_seo_hours" target="_blank"><i class="fa fa-question-circle m-0 p-0"></i></a>
378
  </div>
379
  </div>
380
 
381
+ <div class="col-12 row mb-1 ml-1 sq_advanced">
382
  <div class="checker col-12 row my-2 py-1">
383
  <div class="col-12 p-0 sq-switch sq-switch-sm">
384
  <input type="hidden" name="sq_jsonld_product_defaults" value="0"/>
391
  </div>
392
  </div>
393
  <?php } ?>
394
+
395
+
396
  <div class="col-12 row mb-1 ml-1">
397
  <div class="checker col-12 row my-2 py-1">
398
  <div class="col-12 p-0 sq-switch sq-switch-sm">
478
  <div class="col-12 my-5 mx-2">
479
  <h5 class="text-left my-4 text-info"><?php echo esc_html__("Tips: How to optimize Json-LD Schema on all pages?", _SQ_PLUGIN_NAME_); ?></h5>
480
  <ul class="mx-3">
481
+ <li class="sq_advanced" style="font-size: 15px; list-style: initial;"><?php echo sprintf(esc_html__("Use the %s SEO Automation %s to setup the Json-LD type based on Post Types.", _SQ_PLUGIN_NAME_), '<a href="' . SQ_Classes_Helpers_Tools::getAdminUrl('sq_seosettings', 'automation') . '">', '</a>'); ?></li>
482
  <li style="font-size: 15px; list-style: initial;"><?php echo sprintf(esc_html__("Use %s Bulk SEO %s to optimize the JSON-LD in the SEO Snippet for each page on your website.", _SQ_PLUGIN_NAME_), '<a href="' . SQ_Classes_Helpers_Tools::getAdminUrl('sq_bulkseo', 'bulkseo') . '">', '</a>'); ?></li>
483
  </ul>
484
  </div>
view/SeoSettings/Sitemap.php CHANGED
@@ -110,6 +110,7 @@
110
  <input type="checkbox" id="sq_sitemap_home" name="sitemap[sitemap-home]" class="sq-switch" value="1" <?php echo(($sitemap['sitemap-home'][1] == 1) ? 'checked="checked"' : ''); ?> />
111
  <label for="sq_sitemap_home" class="ml-2"><?php echo esc_html__("Home Page", _SQ_PLUGIN_NAME_); ?></label>
112
  <div class="offset-2 small text-black-50"><?php echo esc_html__("Build the sitemap for the home page.", _SQ_PLUGIN_NAME_); ?></div>
 
113
  <?php
114
  $pname = 'home';
115
  if (isset($patterns[$pname]['do_sitemap']) && !$patterns[$pname]['do_sitemap']) { ?>
@@ -131,6 +132,7 @@
131
  <a href="https://howto.squirrly.co/kb/sitemap-xml-settings/#news_sitemap" target="_blank"><i class="fa fa-question-circle m-0 px-2" style="display: inline;"></i></a>
132
  </label>
133
  <div class="offset-2 small text-black-50"><?php echo sprintf(esc_html__("Only if you have a news website. Make sure you submit your website to %sGoogle News%s first.", _SQ_PLUGIN_NAME_), '<a href="https://partnerdash.google.com/partnerdash/d/news" target="_blank">', '</a>'); ?></div>
 
134
  </div>
135
  </div>
136
  </div>
@@ -144,6 +146,7 @@
144
  <input type="checkbox" id="sq_sitemap_post" name="sitemap[sitemap-post]" class="sq-switch" value="1" <?php echo(($sitemap['sitemap-post'][1] == 1) ? 'checked="checked"' : ''); ?> />
145
  <label for="sq_sitemap_post" class="ml-2"><?php echo esc_html__("Posts", _SQ_PLUGIN_NAME_); ?></label>
146
  <div class="offset-2 small text-black-50"><?php echo esc_html__("Build the sitemap for your posts.", _SQ_PLUGIN_NAME_); ?></div>
 
147
  <?php
148
  $pname = 'post';
149
  if (isset($patterns[$pname]['do_sitemap']) && !$patterns[$pname]['do_sitemap']) { ?>
@@ -163,6 +166,7 @@
163
  <input type="checkbox" id="sq_sitemap_attachment" name="sitemap[sitemap-attachment]" class="sq-switch" value="1" <?php echo(($sitemap['sitemap-attachment'][1] == 1) ? 'checked="checked"' : ''); ?> />
164
  <label for="sq_sitemap_attachment" class="ml-2"><?php echo esc_html__("Attachments", _SQ_PLUGIN_NAME_); ?></label>
165
  <div class="offset-2 small text-black-50"><?php echo esc_html__("Only recommended if you have a photography website.", _SQ_PLUGIN_NAME_); ?></div>
 
166
  <?php
167
  $pname = 'attachment';
168
  if (isset($patterns[$pname]['do_sitemap']) && !$patterns[$pname]['do_sitemap']) { ?>
@@ -184,6 +188,7 @@
184
  <input type="checkbox" id="sq_sitemap_category" name="sitemap[sitemap-category]" class="sq-switch" value="1" <?php echo(($sitemap['sitemap-category'][1] == 1) ? 'checked="checked"' : ''); ?> />
185
  <label for="sq_sitemap_category" class="ml-2"><?php echo esc_html__("Categories", _SQ_PLUGIN_NAME_); ?></label>
186
  <div class="offset-2 small text-black-50"><?php echo esc_html__("Build the sitemap for your post categories.", _SQ_PLUGIN_NAME_); ?></div>
 
187
  <?php
188
  $pname = 'category';
189
  if (isset($patterns[$pname]['do_sitemap']) && !$patterns[$pname]['do_sitemap']) { ?>
@@ -204,6 +209,7 @@
204
  <input type="checkbox" id="sq_sitemap_post_tag" name="sitemap[sitemap-post_tag]" class="sq-switch" value="1" <?php echo(($sitemap['sitemap-post_tag'][1] == 1) ? 'checked="checked"' : ''); ?> />
205
  <label for="sq_sitemap_post_tag" class="ml-2"><?php echo esc_html__("Tags", _SQ_PLUGIN_NAME_); ?></label>
206
  <div class="offset-2 small text-black-50"><?php echo esc_html__("Build the sitemap for your post tags.", _SQ_PLUGIN_NAME_); ?></div>
 
207
  <?php
208
  $pname = 'tag';
209
  if (isset($patterns[$pname]['do_sitemap']) && !$patterns[$pname]['do_sitemap']) { ?>
@@ -225,6 +231,7 @@
225
  <input type="checkbox" id="sq_sitemap_page" name="sitemap[sitemap-page]" class="sq-switch" value="1" <?php echo(($sitemap['sitemap-page'][1] == 1) ? 'checked="checked"' : ''); ?> />
226
  <label for="sq_sitemap_page" class="ml-2"><?php echo esc_html__("Pages", _SQ_PLUGIN_NAME_); ?></label>
227
  <div class="offset-2 small text-black-50"><?php echo esc_html__("Build the sitemap for your pages.", _SQ_PLUGIN_NAME_); ?></div>
 
228
  <?php
229
  $pname = 'page';
230
  if (isset($patterns[$pname]['do_sitemap']) && !$patterns[$pname]['do_sitemap']) { ?>
@@ -244,6 +251,7 @@
244
  <input type="checkbox" id="sq_sitemap_archive" name="sitemap[sitemap-archive]" class="sq-switch" value="1" <?php echo(($sitemap['sitemap-archive'][1] == 1) ? 'checked="checked"' : ''); ?> />
245
  <label for="sq_sitemap_archive" class="ml-2"><?php echo esc_html__("Archive", _SQ_PLUGIN_NAME_); ?></label>
246
  <div class="offset-2 small text-black-50"><?php echo esc_html__("Build the sitemap for your archive links.", _SQ_PLUGIN_NAME_); ?></div>
 
247
  <?php
248
  $pname = 'archive';
249
  if (isset($patterns[$pname]['do_sitemap']) && !$patterns[$pname]['do_sitemap']) { ?>
@@ -265,6 +273,7 @@
265
  <input type="checkbox" id="sq_sitemap_custom-tax" name="sitemap[sitemap-custom-tax]" class="sq-switch" value="1" <?php echo(($sitemap['sitemap-custom-tax'][1] == 1) ? 'checked="checked"' : ''); ?> />
266
  <label for="sq_sitemap_custom-tax" class="ml-2"><?php echo esc_html__("Custom Taxonomies", _SQ_PLUGIN_NAME_); ?></label>
267
  <div class="offset-2 small text-black-50"><?php echo esc_html__("Build the sitemap for your custom post type categories and tags.", _SQ_PLUGIN_NAME_); ?></div>
 
268
  </div>
269
  </div>
270
  </div>
@@ -275,6 +284,7 @@
275
  <input type="checkbox" id="sq_sitemap_custom-post" name="sitemap[sitemap-custom-post]" class="sq-switch" value="1" <?php echo(($sitemap['sitemap-custom-post'][1] == 1) ? 'checked="checked"' : ''); ?> />
276
  <label for="sq_sitemap_custom-post" class="ml-2"><?php echo esc_html__("Custom Posts", _SQ_PLUGIN_NAME_); ?></label>
277
  <div class="offset-2 small text-black-50"><?php echo esc_html__("Build the sitemap for your custom post types (other than WP posts and pages).", _SQ_PLUGIN_NAME_); ?></div>