Version Description
- 08/06/2019 =
- Update - Present the main features in Tutorial
- Fix - Ignore the www. on external links in focus page > outbound links
- Fix - URL decode for arabic language in Bulk SEO and Focus Pages
- Fix - Focus Pages Nofollow to External Links
- Fix - Corrected Innner links in Focus Pages
- Fix - Fixed Squirrly SEO Buffer on shutdown
- Fix - Fixed CSS issues within the plugin
- Fix - Changed JSON-LD Type with JSON-LD Code in Squirrly SEO Snippet
- fix - Fix the bulkseo.js to load the correct assistant on tab change
Download this release
Release Info
Developer | cifi |
Plugin | SEO SQUIRRLY™ |
Version | 9.2.00 |
Comparing to | |
See all releases |
Code changes from version 9.1.19 to 9.2.00
- classes/RemoteController.php +29 -9
- classes/helpers/Tools.php +3 -3
- config.json +1 -0
- controllers/Frontend.php +2 -2
- controllers/Menu.php +12 -5
- controllers/Onboarding.php +4 -4
- controllers/Post.php +68 -45
- controllers/PostsList.php +4 -3
- controllers/SeoSettings.php +26 -10
- core/BlockJorney.php +1 -1
- models/Assistant.php +10 -10
- models/Compatibility.php +8 -3
- models/Frontend.php +9 -8
- models/Menu.php +13 -13
- models/Rollback.php +117 -0
- models/Sitemaps.php +6 -1
- models/bulkseo/Metas.php +1 -1
- models/bulkseo/Opengraph.php +1 -1
- models/bulkseo/Twittercard.php +1 -1
- models/bulkseo/Visibility.php +6 -6
- models/focuspages/Accuracy.php +1 -1
- models/focuspages/Audit.php +1 -1
- models/focuspages/Authority.php +1 -1
- models/focuspages/Backlinks.php +1 -1
- models/focuspages/Clicks.php +1 -1
- models/focuspages/Content.php +1 -1
- models/focuspages/Ctr.php +1 -1
- models/focuspages/Image.php +1 -1
- models/focuspages/Impressions.php +1 -1
- models/focuspages/Indexability.php +1 -1
- models/focuspages/Innerlinks.php +2 -2
- models/focuspages/Keyword.php +1 -1
- models/focuspages/Length.php +1 -1
- models/focuspages/Nofollow.php +18 -22
- models/focuspages/Onpage.php +1 -1
- models/focuspages/Ranking.php +1 -1
- models/focuspages/Snippet.php +1 -1
- models/focuspages/Social.php +1 -1
- models/focuspages/Strategy.php +1 -1
- models/focuspages/Traffic.php +6 -5
- models/services/JsonLD.php +2 -2
- readme.txt +27 -0
- squirrly.php +5 -4
- view/Audits/Audits.php +7 -10
- view/Blocks/Audits.php +8 -30
- view/Blocks/FocusPages.php +1 -1
- view/Blocks/KRFound.php +3 -3
- view/Blocks/KRHistory.php +3 -3
- view/Blocks/Ranks.php +5 -26
- view/Blocks/SEOIssues.php +3 -3
- view/Blocks/Snippet.php +1 -1
- view/FocusPages/Addpage.php +1 -1
- view/FocusPages/FocusPageRow.php +2 -2
- view/Onboarding/Step1.1.php +72 -24
- view/Onboarding/Step1.2.php +63 -0
- view/Onboarding/Step1.3.php +56 -0
- view/Onboarding/Step1.4.php +56 -0
- view/Onboarding/Step1.5.php +66 -0
- view/Onboarding/Step1.php +0 -62
- view/Onboarding/Step2.1.php +68 -0
- view/Onboarding/{Step2.php → Step2.2.php} +10 -17
- view/Onboarding/Step3.php +9 -6
- view/Onboarding/Step4.php +8 -10
- view/Ranking/Gscsync.php +2 -2
- view/Ranking/Rankings.php +2 -2
- view/Research/Briefcase.php +2 -2
- view/Research/Suggested.php +2 -2
- view/SeoSettings/Backup.php +24 -3
- view/SeoSettings/BulkseoRow.php +1 -1
- view/SeoSettings/Jsonld.php +1 -1
- view/assets/css/fontawesome.css +7 -3
- view/assets/css/fontawesome.min.css +1 -2922
- view/assets/css/fullwidth.css +6 -1
- view/assets/css/fullwidth.min.css +1 -1
- view/assets/css/global.css +9 -3
- view/assets/css/global.min.css +1 -1
- view/assets/css/onboarding.css +70 -0
- view/assets/css/onboarding.min.css +1 -0
- view/assets/css/post.min.css +1 -1
- view/assets/css/snippet.css +39 -31
- view/assets/css/snippet.min.css +1 -1
- view/assets/js/bulkseo.js +11 -4
- view/assets/js/bulkseo.min.js +11 -8
- view/assets/js/global.js +1 -1
- view/assets/js/global.min.js +1 -1
- view/assets/js/onboarding.js +22 -0
- view/assets/js/onboarding.min.js +5 -1
classes/RemoteController.php
CHANGED
@@ -148,6 +148,7 @@ class SQ_Classes_RemoteController {
|
|
148 |
}
|
149 |
|
150 |
$response = self::cleanResponce(wp_remote_retrieve_body($response)); //clear and get the body
|
|
|
151 |
SQ_Debug::dump('wp_remote_get', $method, $url, $options, $response); //output debug
|
152 |
return $response;
|
153 |
}
|
@@ -162,6 +163,31 @@ class SQ_Classes_RemoteController {
|
|
162 |
}
|
163 |
|
164 |
/********************** API CALLs ******************************/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
165 |
/**
|
166 |
* Login user to API
|
167 |
*
|
@@ -213,9 +239,7 @@ class SQ_Classes_RemoteController {
|
|
213 |
$json = json_decode(self::apiCall('api/user/checkin', $args));
|
214 |
|
215 |
if (isset($json->error) && $json->error <> '') {
|
216 |
-
|
217 |
-
SQ_Classes_Helpers_Tools::saveOptions('sq_api',false);
|
218 |
-
}
|
219 |
|
220 |
return (new WP_Error('api_error', $json->error));
|
221 |
}
|
@@ -248,9 +272,7 @@ class SQ_Classes_RemoteController {
|
|
248 |
if ($json = json_decode(self::apiCall('api/user/stats', $args))) {
|
249 |
|
250 |
if (isset($json->error) && $json->error <> '') {
|
251 |
-
|
252 |
-
SQ_Classes_Helpers_Tools::saveOptions('sq_api',false);
|
253 |
-
}
|
254 |
|
255 |
return (new WP_Error('api_error', $json->error));
|
256 |
}
|
@@ -389,9 +411,7 @@ class SQ_Classes_RemoteController {
|
|
389 |
$json = json_decode(self::apiCall('api/briefcase/stats', $args));
|
390 |
|
391 |
if (isset($json->error) && $json->error <> '') {
|
392 |
-
|
393 |
-
SQ_Classes_Helpers_Tools::saveOptions('sq_api',false);
|
394 |
-
}
|
395 |
|
396 |
return (new WP_Error('api_error', $json->error));
|
397 |
}
|
148 |
}
|
149 |
|
150 |
$response = self::cleanResponce(wp_remote_retrieve_body($response)); //clear and get the body
|
151 |
+
|
152 |
SQ_Debug::dump('wp_remote_get', $method, $url, $options, $response); //output debug
|
153 |
return $response;
|
154 |
}
|
163 |
}
|
164 |
|
165 |
/********************** API CALLs ******************************/
|
166 |
+
/**
|
167 |
+
* @param array $args
|
168 |
+
* @return array|mixed|object|WP_Error
|
169 |
+
*/
|
170 |
+
public static function connect($args = array()) {
|
171 |
+
self::$apiversion = 1; //api v2
|
172 |
+
self::$apimethod = 'get'; //call method
|
173 |
+
$json = json_decode(self::apiCall('user/connect', $args));
|
174 |
+
|
175 |
+
if (isset($json->error) && $json->error <> '') {
|
176 |
+
if ($json->error == 'invalid_token') {
|
177 |
+
SQ_Classes_Helpers_Tools::saveOptions('sq_api', false);
|
178 |
+
}
|
179 |
+
if ($json->error == 'disconnected') {
|
180 |
+
SQ_Classes_Helpers_Tools::saveOptions('sq_api', false);
|
181 |
+
}
|
182 |
+
if ($json->error == 'banned') {
|
183 |
+
SQ_Classes_Helpers_Tools::saveOptions('sq_api', false);
|
184 |
+
}
|
185 |
+
return (new WP_Error('api_error', $json->error));
|
186 |
+
}
|
187 |
+
|
188 |
+
return $json;
|
189 |
+
}
|
190 |
+
|
191 |
/**
|
192 |
* Login user to API
|
193 |
*
|
239 |
$json = json_decode(self::apiCall('api/user/checkin', $args));
|
240 |
|
241 |
if (isset($json->error) && $json->error <> '') {
|
242 |
+
self::connect(); //connect the website
|
|
|
|
|
243 |
|
244 |
return (new WP_Error('api_error', $json->error));
|
245 |
}
|
272 |
if ($json = json_decode(self::apiCall('api/user/stats', $args))) {
|
273 |
|
274 |
if (isset($json->error) && $json->error <> '') {
|
275 |
+
self::connect(); //connect the website
|
|
|
|
|
276 |
|
277 |
return (new WP_Error('api_error', $json->error));
|
278 |
}
|
411 |
$json = json_decode(self::apiCall('api/briefcase/stats', $args));
|
412 |
|
413 |
if (isset($json->error) && $json->error <> '') {
|
414 |
+
self::connect(); //connect the website
|
|
|
|
|
415 |
|
416 |
return (new WP_Error('api_error', $json->error));
|
417 |
}
|
classes/helpers/Tools.php
CHANGED
@@ -165,7 +165,7 @@ class SQ_Classes_Helpers_Tools {
|
|
165 |
)),
|
166 |
|
167 |
//Sitemap
|
168 |
-
'sq_auto_sitemap' =>
|
169 |
'sq_sitemap_ping' => 0,
|
170 |
'sq_sitemap_show' => array(
|
171 |
'images' => 1,
|
@@ -267,14 +267,14 @@ class SQ_Classes_Helpers_Tools {
|
|
267 |
'fbadminapp' => "",
|
268 |
|
269 |
'facebook_site' => "",
|
270 |
-
'twitter_site' => "",
|
271 |
'twitter' => "",
|
272 |
'instagram_url' => "",
|
273 |
'linkedin_url' => "",
|
274 |
'myspace_url' => "",
|
275 |
'pinterest_url' => "",
|
276 |
'youtube_url' => "",
|
277 |
-
'twitter_card_type' => "
|
278 |
'plus_publisher' => ""
|
279 |
),
|
280 |
|
165 |
)),
|
166 |
|
167 |
//Sitemap
|
168 |
+
'sq_auto_sitemap' => 1,
|
169 |
'sq_sitemap_ping' => 0,
|
170 |
'sq_sitemap_show' => array(
|
171 |
'images' => 1,
|
267 |
'fbadminapp' => "",
|
268 |
|
269 |
'facebook_site' => "",
|
270 |
+
'twitter_site' => "https://twitter.com/twitter",
|
271 |
'twitter' => "",
|
272 |
'instagram_url' => "",
|
273 |
'linkedin_url' => "",
|
274 |
'myspace_url' => "",
|
275 |
'pinterest_url' => "",
|
276 |
'youtube_url' => "",
|
277 |
+
'twitter_card_type' => "summary_large_image",
|
278 |
'plus_publisher' => ""
|
279 |
),
|
280 |
|
config.json
CHANGED
@@ -101,6 +101,7 @@
|
|
101 |
"sq_seosettings_importall",
|
102 |
"sq_seosettings_ga_revoke",
|
103 |
"sq_seosettings_gsc_revoke",
|
|
|
104 |
"sq_ajax_seosettings_save",
|
105 |
"sq_ajax_automation_addpostype",
|
106 |
"sq_ajax_automation_deletepostype",
|
101 |
"sq_seosettings_importall",
|
102 |
"sq_seosettings_ga_revoke",
|
103 |
"sq_seosettings_gsc_revoke",
|
104 |
+
"sq_rollback",
|
105 |
"sq_ajax_seosettings_save",
|
106 |
"sq_ajax_automation_addpostype",
|
107 |
"sq_ajax_automation_deletepostype",
|
controllers/Frontend.php
CHANGED
@@ -70,7 +70,7 @@ class SQ_Controllers_Frontend extends SQ_Classes_FrontController {
|
|
70 |
add_filter('rocket_buffer', array($this->model, 'getBuffer'), PHP_INT_MAX);
|
71 |
}
|
72 |
|
73 |
-
add_action('shutdown', array($this->model, 'getBuffer'));
|
74 |
}
|
75 |
|
76 |
/**
|
@@ -127,7 +127,7 @@ class SQ_Controllers_Frontend extends SQ_Classes_FrontController {
|
|
127 |
/**
|
128 |
* Load Squirrly Assistant in frontend
|
129 |
*/
|
130 |
-
public function loadAssistant(){
|
131 |
if (!is_admin() && function_exists('is_user_logged_in') && is_user_logged_in()) {
|
132 |
global $wp_the_query;
|
133 |
|
70 |
add_filter('rocket_buffer', array($this->model, 'getBuffer'), PHP_INT_MAX);
|
71 |
}
|
72 |
|
73 |
+
add_action('shutdown', array($this->model, 'getBuffer'), PHP_INT_MAX);
|
74 |
}
|
75 |
|
76 |
/**
|
127 |
/**
|
128 |
* Load Squirrly Assistant in frontend
|
129 |
*/
|
130 |
+
public function loadAssistant() {
|
131 |
if (!is_admin() && function_exists('is_user_logged_in') && is_user_logged_in()) {
|
132 |
global $wp_the_query;
|
133 |
|
controllers/Menu.php
CHANGED
@@ -46,7 +46,7 @@ class SQ_Controllers_Menu extends SQ_Classes_FrontController {
|
|
46 |
//redirect users to onboarding if necessary
|
47 |
if (!$onboarding = SQ_Classes_Helpers_Tools::getOption('sq_onboarding')) {
|
48 |
if (SQ_Classes_Helpers_Tools::getValue('page') !== 'sq_onboarding') {
|
49 |
-
wp_safe_redirect(SQ_Classes_Helpers_Tools::getAdminUrl('sq_onboarding'
|
50 |
die();
|
51 |
}
|
52 |
}
|
@@ -75,6 +75,13 @@ class SQ_Controllers_Menu extends SQ_Classes_FrontController {
|
|
75 |
/* add the plugin menu in admin */
|
76 |
if (current_user_can('manage_options')) {
|
77 |
try {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
78 |
//check if activated
|
79 |
if (get_transient('sq_activate') == 1) {
|
80 |
// Delete the redirect transient
|
@@ -86,8 +93,10 @@ class SQ_Controllers_Menu extends SQ_Classes_FrontController {
|
|
86 |
//Check if there are expected upgrades
|
87 |
SQ_Classes_Helpers_Tools::checkUpgrade();
|
88 |
|
89 |
-
|
90 |
-
|
|
|
|
|
91 |
}
|
92 |
|
93 |
if (get_transient('sq_rewrite') == 1) {
|
@@ -99,8 +108,6 @@ class SQ_Controllers_Menu extends SQ_Classes_FrontController {
|
|
99 |
SQ_Classes_Error::setMessage(sprintf(__("An error occurred during activation. If this error persists, please contact us at: %s", _SQ_PLUGIN_NAME_), _SQ_SUPPORT_EMAIL_));
|
100 |
}
|
101 |
|
102 |
-
//This option is use for custom Package installs
|
103 |
-
SQ_Classes_ObjController::getClass('SQ_Classes_Helpers_DevKit')->updatePluginData(); //update text in case of devkit
|
104 |
|
105 |
}
|
106 |
|
46 |
//redirect users to onboarding if necessary
|
47 |
if (!$onboarding = SQ_Classes_Helpers_Tools::getOption('sq_onboarding')) {
|
48 |
if (SQ_Classes_Helpers_Tools::getValue('page') !== 'sq_onboarding') {
|
49 |
+
wp_safe_redirect(SQ_Classes_Helpers_Tools::getAdminUrl('sq_onboarding'));
|
50 |
die();
|
51 |
}
|
52 |
}
|
75 |
/* add the plugin menu in admin */
|
76 |
if (current_user_can('manage_options')) {
|
77 |
try {
|
78 |
+
|
79 |
+
if (SQ_Classes_Helpers_Tools::getOption('sq_api') == '') {
|
80 |
+
//This option is use for custom Package installs
|
81 |
+
//update text in case of devkit
|
82 |
+
SQ_Classes_ObjController::getClass('SQ_Classes_Helpers_DevKit')->updatePluginData();
|
83 |
+
}
|
84 |
+
|
85 |
//check if activated
|
86 |
if (get_transient('sq_activate') == 1) {
|
87 |
// Delete the redirect transient
|
93 |
//Check if there are expected upgrades
|
94 |
SQ_Classes_Helpers_Tools::checkUpgrade();
|
95 |
|
96 |
+
if (SQ_Classes_Helpers_Tools::getOption('sq_api') == '') {
|
97 |
+
wp_safe_redirect(SQ_Classes_Helpers_Tools::getAdminUrl('sq_dashboard'));
|
98 |
+
die();
|
99 |
+
}
|
100 |
}
|
101 |
|
102 |
if (get_transient('sq_rewrite') == 1) {
|
108 |
SQ_Classes_Error::setMessage(sprintf(__("An error occurred during activation. If this error persists, please contact us at: %s", _SQ_PLUGIN_NAME_), _SQ_SUPPORT_EMAIL_));
|
109 |
}
|
110 |
|
|
|
|
|
111 |
|
112 |
}
|
113 |
|
controllers/Onboarding.php
CHANGED
@@ -13,7 +13,7 @@ class SQ_Controllers_Onboarding extends SQ_Classes_FrontController {
|
|
13 |
//Clear the Scripts and Styles from other plugins
|
14 |
SQ_Classes_ObjController::getClass('SQ_Models_Compatibility')->clearStyles();
|
15 |
|
16 |
-
$tab = SQ_Classes_Helpers_Tools::getValue('tab', 'step1');
|
17 |
|
18 |
SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('bootstrap-reboot');
|
19 |
SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('bootstrap');
|
@@ -25,15 +25,15 @@ class SQ_Controllers_Onboarding extends SQ_Classes_FrontController {
|
|
25 |
SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('navbar');
|
26 |
SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('onboarding');
|
27 |
|
28 |
-
if (method_exists($this, $tab)) {
|
29 |
-
call_user_func(array($this, $tab));
|
30 |
}
|
31 |
|
32 |
//@ob_flush();
|
33 |
echo $this->getView('Onboarding/' . ucfirst($tab));
|
34 |
}
|
35 |
|
36 |
-
public function
|
37 |
//Set the onboarding version
|
38 |
SQ_Classes_Helpers_Tools::saveOptions('sq_onboarding', SQ_VERSION);
|
39 |
}
|
13 |
//Clear the Scripts and Styles from other plugins
|
14 |
SQ_Classes_ObjController::getClass('SQ_Models_Compatibility')->clearStyles();
|
15 |
|
16 |
+
$tab = SQ_Classes_Helpers_Tools::getValue('tab', 'step1.1');
|
17 |
|
18 |
SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('bootstrap-reboot');
|
19 |
SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('bootstrap');
|
25 |
SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('navbar');
|
26 |
SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('onboarding');
|
27 |
|
28 |
+
if (method_exists($this, preg_replace("/[^a-zA-Z0-9]/", "", $tab))) {
|
29 |
+
call_user_func(array($this, preg_replace("/[^a-zA-Z0-9]/", "", $tab)));
|
30 |
}
|
31 |
|
32 |
//@ob_flush();
|
33 |
echo $this->getView('Onboarding/' . ucfirst($tab));
|
34 |
}
|
35 |
|
36 |
+
public function step11() {
|
37 |
//Set the onboarding version
|
38 |
SQ_Classes_Helpers_Tools::saveOptions('sq_onboarding', SQ_VERSION);
|
39 |
}
|
controllers/Post.php
CHANGED
@@ -27,6 +27,10 @@ class SQ_Controllers_Post extends SQ_Classes_FrontController {
|
|
27 |
add_filter('wp_insert_post_data', array($this, 'checkSeo'), 11, 2);
|
28 |
add_filter('wp_insert_post_data', array($this, 'removeHighlight'), 12, 2);
|
29 |
add_filter('wp_insert_post_data', array($this, 'checkImage'), 13, 2);
|
|
|
|
|
|
|
|
|
30 |
|
31 |
if (SQ_Classes_Helpers_Tools::getOption('sq_auto_sitemap')) {
|
32 |
add_action('transition_post_status', array(SQ_Classes_ObjController::getClass('SQ_Controllers_Sitemaps'), 'refreshSitemap'), 9999, 3);
|
@@ -143,67 +147,86 @@ class SQ_Controllers_Post extends SQ_Classes_FrontController {
|
|
143 |
return $post_data;
|
144 |
}
|
145 |
|
146 |
-
|
147 |
-
|
148 |
-
|
149 |
-
* @param array $post_data
|
150 |
-
* @param array $postarr
|
151 |
-
* @return array
|
152 |
-
*/
|
153 |
-
public function checkSeo($post_data, $postarr) {
|
154 |
-
if (!isset($post_data['post_content']) || !isset($postarr['ID'])) {
|
155 |
-
return $post_data;
|
156 |
}
|
157 |
|
158 |
-
|
|
|
|
|
|
|
|
|
159 |
|
160 |
-
|
161 |
|
162 |
-
|
163 |
-
$args['seo'] = implode(',', $seo);
|
164 |
|
165 |
-
|
|
|
166 |
|
167 |
-
|
168 |
-
$args['permalink'] = get_permalink($postarr['ID']);
|
169 |
-
$args['author'] = $post_data['post_author'];
|
170 |
-
$args['post_id'] = $postarr['ID'];
|
171 |
|
172 |
-
|
173 |
-
|
174 |
-
|
175 |
-
|
176 |
-
|
177 |
-
|
178 |
-
|
179 |
-
|
|
|
|
|
|
|
|
|
|
|
180 |
|
181 |
-
|
182 |
|
183 |
-
|
184 |
-
|
185 |
-
|
186 |
|
187 |
-
|
188 |
-
|
|
|
189 |
}
|
190 |
}
|
|
|
191 |
|
192 |
-
|
193 |
-
|
194 |
-
|
195 |
-
|
196 |
-
|
197 |
-
|
198 |
-
|
199 |
-
|
|
|
|
|
200 |
}
|
201 |
|
202 |
-
//
|
203 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
204 |
|
205 |
-
|
206 |
-
|
|
|
|
|
|
|
|
|
207 |
|
208 |
return $post_data;
|
209 |
}
|
27 |
add_filter('wp_insert_post_data', array($this, 'checkSeo'), 11, 2);
|
28 |
add_filter('wp_insert_post_data', array($this, 'removeHighlight'), 12, 2);
|
29 |
add_filter('wp_insert_post_data', array($this, 'checkImage'), 13, 2);
|
30 |
+
add_filter('save_post', array($this, 'sendSeo'), 11, 2);
|
31 |
+
|
32 |
+
//Hook the Move To Trash action
|
33 |
+
add_action('wp_trash_post', array(SQ_Classes_ObjController::getClass('SQ_Models_PostsList'), 'hookUpdateStatus'));
|
34 |
|
35 |
if (SQ_Classes_Helpers_Tools::getOption('sq_auto_sitemap')) {
|
36 |
add_action('transition_post_status', array(SQ_Classes_ObjController::getClass('SQ_Controllers_Sitemaps'), 'refreshSitemap'), 9999, 3);
|
147 |
return $post_data;
|
148 |
}
|
149 |
|
150 |
+
public function sendSeo($postID, $post) {
|
151 |
+
if (!isset($post->ID)) {
|
152 |
+
return;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
153 |
}
|
154 |
|
155 |
+
//If the post is a new or edited post
|
156 |
+
if (wp_is_post_autosave($post->ID) == '' &&
|
157 |
+
get_post_status($post->ID) != 'auto-draft' &&
|
158 |
+
get_post_status($post->ID) != 'inherit'
|
159 |
+
) {
|
160 |
|
161 |
+
$args = array();
|
162 |
|
163 |
+
$seo = SQ_Classes_Helpers_Tools::getValue('sq_seo', '');
|
|
|
164 |
|
165 |
+
if (is_array($seo) && count((array)$seo) > 0)
|
166 |
+
$args['seo'] = implode(',', $seo);
|
167 |
|
168 |
+
$args['keyword'] = SQ_Classes_Helpers_Tools::getValue('sq_keyword', '');
|
|
|
|
|
|
|
169 |
|
170 |
+
$args['status'] = $post->post_status;
|
171 |
+
$args['permalink'] = get_permalink($post->ID);
|
172 |
+
$args['author'] = $post->post_author;
|
173 |
+
$args['post_id'] = $post->ID;
|
174 |
+
|
175 |
+
if ($args['permalink']) {
|
176 |
+
if (SQ_Classes_Helpers_Tools::getOption('sq_force_savepost')) {
|
177 |
+
SQ_Classes_RemoteController::savePost($args);
|
178 |
+
} else {
|
179 |
+
$process = array();
|
180 |
+
if (get_option('sq_seopost') !== false) {
|
181 |
+
$process = json_decode(get_option('sq_seopost'), true);
|
182 |
+
}
|
183 |
|
184 |
+
$process[] = $args;
|
185 |
|
186 |
+
//save for later send to api
|
187 |
+
update_option('sq_seopost', json_encode($process));
|
188 |
+
wp_schedule_single_event(time(), 'sq_cron_process_single');
|
189 |
|
190 |
+
//If the queue is too big ... means that the cron is not working
|
191 |
+
if (count((array)$process) > 5) SQ_Classes_Helpers_Tools::saveOptions('sq_force_savepost', 1);
|
192 |
+
}
|
193 |
}
|
194 |
}
|
195 |
+
}
|
196 |
|
197 |
+
/**
|
198 |
+
* Check the SEO from Squirrly Live Assistant
|
199 |
+
*
|
200 |
+
* @param array $post_data
|
201 |
+
* @param array $postarr
|
202 |
+
* @return array
|
203 |
+
*/
|
204 |
+
public function checkSeo($post_data, $postarr) {
|
205 |
+
if (!isset($post_data['post_content']) || !isset($postarr['ID'])) {
|
206 |
+
return $post_data;
|
207 |
}
|
208 |
|
209 |
+
//If the post is a new or edited post
|
210 |
+
if (wp_is_post_autosave($postarr['ID']) == '' &&
|
211 |
+
get_post_status($postarr['ID']) != 'auto-draft' &&
|
212 |
+
get_post_status($postarr['ID']) != 'inherit'
|
213 |
+
) {
|
214 |
+
//Save the keyword for this post
|
215 |
+
if ($json = $this->model->getKeyword($postarr['ID'])) {
|
216 |
+
$json->keyword = addslashes(SQ_Classes_Helpers_Tools::getValue('sq_keyword'));
|
217 |
+
$this->model->saveKeyword($postarr['ID'], $json);
|
218 |
+
} else {
|
219 |
+
$args = array();
|
220 |
+
$args['keyword'] = addslashes(SQ_Classes_Helpers_Tools::getValue('sq_keyword'));
|
221 |
+
$this->model->saveKeyword($postarr['ID'], json_decode(json_encode($args)));
|
222 |
+
}
|
223 |
|
224 |
+
//Save the snippet in case is edited in backend and not saved
|
225 |
+
SQ_Classes_ObjController::getClass('SQ_Models_Snippet')->saveSEO();
|
226 |
+
|
227 |
+
//check for custom SEO
|
228 |
+
$this->_checkBriefcaseKeywords($postarr['ID']);
|
229 |
+
}
|
230 |
|
231 |
return $post_data;
|
232 |
}
|
controllers/PostsList.php
CHANGED
@@ -48,9 +48,10 @@ class SQ_Controllers_PostsList extends SQ_Classes_FrontController {
|
|
48 |
}
|
49 |
|
50 |
//Update post status on API
|
51 |
-
add_action('before_delete_post', array($this->model, 'hookUpdateStatus'));
|
52 |
-
add_action('untrashed_post', array($this->model, 'hookUpdateStatus'));
|
53 |
-
add_action('trashed_post', array($this->model, 'hookUpdateStatus'));
|
|
|
54 |
}
|
55 |
|
56 |
/**
|
48 |
}
|
49 |
|
50 |
//Update post status on API
|
51 |
+
add_action('before_delete_post', array($this->model, 'hookUpdateStatus'), 10, 1);
|
52 |
+
add_action('untrashed_post', array($this->model, 'hookUpdateStatus'), 10, 1);
|
53 |
+
add_action('trashed_post', array($this->model, 'hookUpdateStatus'), 10, 1);
|
54 |
+
|
55 |
}
|
56 |
|
57 |
/**
|
controllers/SeoSettings.php
CHANGED
@@ -253,7 +253,6 @@ class SQ_Controllers_SeoSettings extends SQ_Classes_FrontController {
|
|
253 |
*/
|
254 |
public function action() {
|
255 |
parent::action();
|
256 |
-
SQ_Classes_Helpers_Tools::setHeader('json');
|
257 |
|
258 |
switch (SQ_Classes_Helpers_Tools::getValue('action')) {
|
259 |
|
@@ -653,18 +652,38 @@ class SQ_Controllers_SeoSettings extends SQ_Classes_FrontController {
|
|
653 |
}
|
654 |
break;
|
655 |
|
|
|
|
|
|
|
656 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
657 |
/**************************** Ajax *******************************************************/
|
658 |
case "sq_ajax_seosettings_save":
|
|
|
659 |
$response = array();
|
660 |
if (!current_user_can('sq_manage_settings')) {
|
661 |
$response['error'] = SQ_Classes_Error::showNotices(__("You do not have permission to perform this action", _SQ_PLUGIN_NAME_), 'sq_error');
|
662 |
-
SQ_Classes_Helpers_Tools::setHeader('json');
|
663 |
echo json_encode($response);
|
664 |
exit();
|
665 |
}
|
666 |
|
667 |
-
SQ_Classes_Helpers_Tools::setHeader('json');
|
668 |
|
669 |
$name = SQ_Classes_Helpers_Tools::getValue('input', false);
|
670 |
$value = SQ_Classes_Helpers_Tools::getValue('value', false);
|
@@ -682,15 +701,14 @@ class SQ_Controllers_SeoSettings extends SQ_Classes_FrontController {
|
|
682 |
|
683 |
/************************ Automation ********************************************************/
|
684 |
case 'sq_ajax_automation_addpostype':
|
|
|
685 |
$response = array();
|
686 |
if (!current_user_can('sq_manage_settings')) {
|
687 |
$response['error'] = SQ_Classes_Error::showNotices(__("You do not have permission to perform this action", _SQ_PLUGIN_NAME_), 'sq_error');
|
688 |
-
SQ_Classes_Helpers_Tools::setHeader('json');
|
689 |
echo json_encode($response);
|
690 |
exit();
|
691 |
}
|
692 |
|
693 |
-
SQ_Classes_Helpers_Tools::setHeader('json');
|
694 |
|
695 |
//Get the new post type
|
696 |
$posttype = SQ_Classes_Helpers_Tools::getValue('value', false);
|
@@ -720,15 +738,14 @@ class SQ_Controllers_SeoSettings extends SQ_Classes_FrontController {
|
|
720 |
exit();
|
721 |
|
722 |
case 'sq_ajax_automation_deletepostype':
|
|
|
723 |
$response = array();
|
724 |
if (!current_user_can('sq_manage_settings')) {
|
725 |
$response['error'] = SQ_Classes_Error::showNotices(__("You do not have permission to perform this action", _SQ_PLUGIN_NAME_), 'sq_error');
|
726 |
-
SQ_Classes_Helpers_Tools::setHeader('json');
|
727 |
echo json_encode($response);
|
728 |
exit();
|
729 |
}
|
730 |
|
731 |
-
SQ_Classes_Helpers_Tools::setHeader('json');
|
732 |
|
733 |
//Get the new post type
|
734 |
$posttype = SQ_Classes_Helpers_Tools::getValue('value', false);
|
@@ -757,10 +774,10 @@ class SQ_Controllers_SeoSettings extends SQ_Classes_FrontController {
|
|
757 |
exit();
|
758 |
|
759 |
case 'sq_ajax_assistant_bulkseo':
|
|
|
760 |
$response = array();
|
761 |
if (!current_user_can('sq_manage_snippet')) {
|
762 |
$response['error'] = SQ_Classes_Error::showNotices(__("You do not have permission to perform this action", _SQ_PLUGIN_NAME_), 'sq_error');
|
763 |
-
SQ_Classes_Helpers_Tools::setHeader('json');
|
764 |
echo json_encode($response);
|
765 |
exit();
|
766 |
}
|
@@ -795,15 +812,14 @@ class SQ_Controllers_SeoSettings extends SQ_Classes_FrontController {
|
|
795 |
exit();
|
796 |
|
797 |
case 'sq_ajax_sla_sticky':
|
|
|
798 |
$response = array();
|
799 |
if (!current_user_can('sq_manage_snippet')) {
|
800 |
$response['error'] = SQ_Classes_Error::showNotices(__("You do not have permission to perform this action", _SQ_PLUGIN_NAME_), 'sq_error');
|
801 |
-
SQ_Classes_Helpers_Tools::setHeader('json');
|
802 |
echo json_encode($response);
|
803 |
exit();
|
804 |
}
|
805 |
|
806 |
-
SQ_Classes_Helpers_Tools::setHeader('json');
|
807 |
SQ_Classes_Helpers_Tools::saveUserMeta('sq_auto_sticky', (int)SQ_Classes_Helpers_Tools::getValue('sq_auto_sticky'));
|
808 |
echo json_encode(array());
|
809 |
exit();
|
253 |
*/
|
254 |
public function action() {
|
255 |
parent::action();
|
|
|
256 |
|
257 |
switch (SQ_Classes_Helpers_Tools::getValue('action')) {
|
258 |
|
652 |
}
|
653 |
break;
|
654 |
|
655 |
+
case 'sq_rollback':
|
656 |
+
SQ_Classes_Helpers_Tools::setHeader('html');
|
657 |
+
$plugin_slug = basename(_SQ_PLUGIN_NAME_, '.php');
|
658 |
|
659 |
+
|
660 |
+
$rollback = SQ_Classes_ObjController::getClass('SQ_Models_Rollback');
|
661 |
+
|
662 |
+
$rollback->set_plugin(array(
|
663 |
+
'version' => SQ_STABLE_VERSION,
|
664 |
+
'plugin_name' => _SQ_ROOT_DIR_ ,
|
665 |
+
'plugin_slug' => $plugin_slug,
|
666 |
+
'package_url' => sprintf('https://downloads.wordpress.org/plugin/%s.%s.zip', $plugin_slug, SQ_STABLE_VERSION),
|
667 |
+
));
|
668 |
+
|
669 |
+
$rollback->run();
|
670 |
+
|
671 |
+
wp_die(
|
672 |
+
'', __('Rollback to Previous Version', _SQ_PLUGIN_NAME_), [
|
673 |
+
'response' => 200,
|
674 |
+
]
|
675 |
+
);
|
676 |
+
exit();
|
677 |
/**************************** Ajax *******************************************************/
|
678 |
case "sq_ajax_seosettings_save":
|
679 |
+
SQ_Classes_Helpers_Tools::setHeader('json');
|
680 |
$response = array();
|
681 |
if (!current_user_can('sq_manage_settings')) {
|
682 |
$response['error'] = SQ_Classes_Error::showNotices(__("You do not have permission to perform this action", _SQ_PLUGIN_NAME_), 'sq_error');
|
|
|
683 |
echo json_encode($response);
|
684 |
exit();
|
685 |
}
|
686 |
|
|
|
687 |
|
688 |
$name = SQ_Classes_Helpers_Tools::getValue('input', false);
|
689 |
$value = SQ_Classes_Helpers_Tools::getValue('value', false);
|
701 |
|
702 |
/************************ Automation ********************************************************/
|
703 |
case 'sq_ajax_automation_addpostype':
|
704 |
+
SQ_Classes_Helpers_Tools::setHeader('json');
|
705 |
$response = array();
|
706 |
if (!current_user_can('sq_manage_settings')) {
|
707 |
$response['error'] = SQ_Classes_Error::showNotices(__("You do not have permission to perform this action", _SQ_PLUGIN_NAME_), 'sq_error');
|
|
|
708 |
echo json_encode($response);
|
709 |
exit();
|
710 |
}
|
711 |
|
|
|
712 |
|
713 |
//Get the new post type
|
714 |
$posttype = SQ_Classes_Helpers_Tools::getValue('value', false);
|
738 |
exit();
|
739 |
|
740 |
case 'sq_ajax_automation_deletepostype':
|
741 |
+
SQ_Classes_Helpers_Tools::setHeader('json');
|
742 |
$response = array();
|
743 |
if (!current_user_can('sq_manage_settings')) {
|
744 |
$response['error'] = SQ_Classes_Error::showNotices(__("You do not have permission to perform this action", _SQ_PLUGIN_NAME_), 'sq_error');
|
|
|
745 |
echo json_encode($response);
|
746 |
exit();
|
747 |
}
|
748 |
|
|
|
749 |
|
750 |
//Get the new post type
|
751 |
$posttype = SQ_Classes_Helpers_Tools::getValue('value', false);
|
774 |
exit();
|
775 |
|
776 |
case 'sq_ajax_assistant_bulkseo':
|
777 |
+
SQ_Classes_Helpers_Tools::setHeader('json');
|
778 |
$response = array();
|
779 |
if (!current_user_can('sq_manage_snippet')) {
|
780 |
$response['error'] = SQ_Classes_Error::showNotices(__("You do not have permission to perform this action", _SQ_PLUGIN_NAME_), 'sq_error');
|
|
|
781 |
echo json_encode($response);
|
782 |
exit();
|
783 |
}
|
812 |
exit();
|
813 |
|
814 |
case 'sq_ajax_sla_sticky':
|
815 |
+
SQ_Classes_Helpers_Tools::setHeader('json');
|
816 |
$response = array();
|
817 |
if (!current_user_can('sq_manage_snippet')) {
|
818 |
$response['error'] = SQ_Classes_Error::showNotices(__("You do not have permission to perform this action", _SQ_PLUGIN_NAME_), 'sq_error');
|
|
|
819 |
echo json_encode($response);
|
820 |
exit();
|
821 |
}
|
822 |
|
|
|
823 |
SQ_Classes_Helpers_Tools::saveUserMeta('sq_auto_sticky', (int)SQ_Classes_Helpers_Tools::getValue('sq_auto_sticky'));
|
824 |
echo json_encode(array());
|
825 |
exit();
|
core/BlockJorney.php
CHANGED
@@ -10,7 +10,7 @@ class SQ_Core_BlockJorney extends SQ_Classes_BlockController {
|
|
10 |
if (!$seojorney = SQ_Classes_Helpers_Tools::getOption('sq_seojourney')) {
|
11 |
?>
|
12 |
<div class="col-sm-12 m-0 p-3 text-center">
|
13 |
-
<a href="<?php echo SQ_Classes_Helpers_Tools::getAdminUrl('sq_onboarding', 'step2') ?>" class="btn btn-success m-2 py-2 px-4" style="font-size: 20px;"><?php echo __("I'm ready to start the 14 Days Journey To Better Ranking", _SQ_PLUGIN_NAME_); ?></a>
|
14 |
</div>
|
15 |
<?php
|
16 |
return false;
|
10 |
if (!$seojorney = SQ_Classes_Helpers_Tools::getOption('sq_seojourney')) {
|
11 |
?>
|
12 |
<div class="col-sm-12 m-0 p-3 text-center">
|
13 |
+
<a href="<?php echo SQ_Classes_Helpers_Tools::getAdminUrl('sq_onboarding', 'step2.1') ?>" class="btn btn-success m-2 py-2 px-4" style="font-size: 20px;"><?php echo __("I'm ready to start the 14 Days Journey To Better Ranking", _SQ_PLUGIN_NAME_); ?></a>
|
14 |
</div>
|
15 |
<?php
|
16 |
return false;
|
models/Assistant.php
CHANGED
@@ -139,6 +139,11 @@ class SQ_Models_Assistant {
|
|
139 |
),
|
140 |
);
|
141 |
$tasks['sq_seosettings'] = array(
|
|
|
|
|
|
|
|
|
|
|
142 |
'setup_metas' => array(
|
143 |
'title' => __("Activate METAs", _SQ_PLUGIN_NAME_),
|
144 |
'description' => sprintf(__("Activate the META settings from the Squirrly SEO Plugin. %s You can import ALL meta settings you've made with other plugins in WordPress into your Squirrly SEO Plugin. That way everything will be kept 100%% intact, without any head-aches. %s To complete this task you need to activate: %s - Optimize the Titles%s- Optimize Descriptions %s - Add Canonical META Link %s Make sure you click on SAVE settings after you switch anything on or off.", _SQ_PLUGIN_NAME_), '<br /><br />', '<br /><br />', '<br />', '<br />', '<br />', '<br /><br />'),
|
@@ -159,6 +164,11 @@ class SQ_Models_Assistant {
|
|
159 |
'description' => sprintf(__("Go to the Social Media section. %s - Activate Twitter Card. (switch the toggle to ON) %s - Add your Twitter profile URL %s The Twitter Card will help you control the way your posts look when people share your URLs on Twitter. %s It will also make your social media posts look great and gain you clicks to your site.", _SQ_PLUGIN_NAME_), '<br /><br />', '<br />', '<br /><br />', '<br /><br />'),
|
160 |
'function' => 'checkSettingsSocialTWC',
|
161 |
),
|
|
|
|
|
|
|
|
|
|
|
162 |
'setup_ganalytics' => array(
|
163 |
'title' => __("Activate Google Analytics", _SQ_PLUGIN_NAME_),
|
164 |
'description' => sprintf(__("Go to the Tracking Tools section. %s Add your Google Analytics ID to complete this setting. (find it in the tracking code that Google Analytics tells you to place on your site) %s Squirrly SEO will then add (automatically) your Google Analytics tracking code (in the format you desire) to every page of your site (according to rules you can modify in the Automation section).", _SQ_PLUGIN_NAME_), '<br /><br />', '<br /><br />'),
|
@@ -174,16 +184,6 @@ class SQ_Models_Assistant {
|
|
174 |
'description' => sprintf(__("Go to the Connection section of the Settings. %s This section makes it super easy to integrate different (important) 3rd party services with your WordPress. %s Alexa META Code is 100%% optional, but the rest are very important to add. %s Enter your Pinterest code, especially if you plan to expand your presence on Pinterest. It will activate Rich Pins, which will completely boost your sales and visibility for any product or post that has great images.", _SQ_PLUGIN_NAME_), '<br /><br />', '<br /><br />', '<br /><br />'),
|
175 |
'function' => 'checkSettingsWebmasters',
|
176 |
),
|
177 |
-
'setup_sitemap' => array(
|
178 |
-
'title' => __("Activate Sitemap XML", _SQ_PLUGIN_NAME_),
|
179 |
-
'description' => sprintf(__("Activate your Sitemap XML setting. Squirrly SEO will then generate your sitemap, according to different items you can set up. %s Use this to tell Google how often you bring new content to your site. %s Also, choose for which types of URLs you'll want to have sitemaps. It depends on your strategy. Leave the defaults if you're uncertain. Squirrly SEO chooses the best defaults for you. %s Make sure you include Images and Videos in the sitemap. It has been identified as a ranking factor, so it's good to have that.", _SQ_PLUGIN_NAME_), '<br /><br />', '<br /><br />', '<br /><br />'),
|
180 |
-
'function' => 'checkSettingsSitemap',
|
181 |
-
),
|
182 |
-
'setup_patterns' => array(
|
183 |
-
'title' => __("Activate Meta Automation", _SQ_PLUGIN_NAME_),
|
184 |
-
'description' => sprintf(__("The Automation Features of Squirrly SEO are extremely powerful. %s They help Non-SEO experts avoid many mistakes they would normally make. %s They help experts control any WordPress site at a level that has never been possible before. (just make sure you click to see the Advanced settings). %s You'll be able to configure automations according to any post type. %s Turn the toggle to ON for : Activate Patterns to complete this task.", _SQ_PLUGIN_NAME_), '<br /><br />', '<br /><br />', '<br /><br />', '<br /><br />'),
|
185 |
-
'function' => 'checkSettingsPatterns',
|
186 |
-
),
|
187 |
|
188 |
);
|
189 |
$tasks['sq_focuspages'] = array();
|
139 |
),
|
140 |
);
|
141 |
$tasks['sq_seosettings'] = array(
|
142 |
+
'setup_patterns' => array(
|
143 |
+
'title' => __("Activate Meta Automation", _SQ_PLUGIN_NAME_),
|
144 |
+
'description' => sprintf(__("The Automation Features of Squirrly SEO are extremely powerful. %s They help Non-SEO experts avoid many mistakes they would normally make. %s They help experts control any WordPress site at a level that has never been possible before. (just make sure you click to see the Advanced settings). %s You'll be able to configure automations according to any post type. %s Turn the toggle to ON for : Activate Patterns to complete this task.", _SQ_PLUGIN_NAME_), '<br /><br />', '<br /><br />', '<br /><br />', '<br /><br />'),
|
145 |
+
'function' => 'checkSettingsPatterns',
|
146 |
+
),
|
147 |
'setup_metas' => array(
|
148 |
'title' => __("Activate METAs", _SQ_PLUGIN_NAME_),
|
149 |
'description' => sprintf(__("Activate the META settings from the Squirrly SEO Plugin. %s You can import ALL meta settings you've made with other plugins in WordPress into your Squirrly SEO Plugin. That way everything will be kept 100%% intact, without any head-aches. %s To complete this task you need to activate: %s - Optimize the Titles%s- Optimize Descriptions %s - Add Canonical META Link %s Make sure you click on SAVE settings after you switch anything on or off.", _SQ_PLUGIN_NAME_), '<br /><br />', '<br /><br />', '<br />', '<br />', '<br />', '<br /><br />'),
|
164 |
'description' => sprintf(__("Go to the Social Media section. %s - Activate Twitter Card. (switch the toggle to ON) %s - Add your Twitter profile URL %s The Twitter Card will help you control the way your posts look when people share your URLs on Twitter. %s It will also make your social media posts look great and gain you clicks to your site.", _SQ_PLUGIN_NAME_), '<br /><br />', '<br />', '<br /><br />', '<br /><br />'),
|
165 |
'function' => 'checkSettingsSocialTWC',
|
166 |
),
|
167 |
+
'setup_sitemap' => array(
|
168 |
+
'title' => __("Activate Sitemap XML", _SQ_PLUGIN_NAME_),
|
169 |
+
'description' => sprintf(__("Activate your Sitemap XML setting. Squirrly SEO will then generate your sitemap, according to different items you can set up. %s Use this to tell Google how often you bring new content to your site. %s Also, choose for which types of URLs you'll want to have sitemaps. It depends on your strategy. Leave the defaults if you're uncertain. Squirrly SEO chooses the best defaults for you. %s Make sure you include Images and Videos in the sitemap. It has been identified as a ranking factor, so it's good to have that.", _SQ_PLUGIN_NAME_), '<br /><br />', '<br /><br />', '<br /><br />'),
|
170 |
+
'function' => 'checkSettingsSitemap',
|
171 |
+
),
|
172 |
'setup_ganalytics' => array(
|
173 |
'title' => __("Activate Google Analytics", _SQ_PLUGIN_NAME_),
|
174 |
'description' => sprintf(__("Go to the Tracking Tools section. %s Add your Google Analytics ID to complete this setting. (find it in the tracking code that Google Analytics tells you to place on your site) %s Squirrly SEO will then add (automatically) your Google Analytics tracking code (in the format you desire) to every page of your site (according to rules you can modify in the Automation section).", _SQ_PLUGIN_NAME_), '<br /><br />', '<br /><br />'),
|
184 |
'description' => sprintf(__("Go to the Connection section of the Settings. %s This section makes it super easy to integrate different (important) 3rd party services with your WordPress. %s Alexa META Code is 100%% optional, but the rest are very important to add. %s Enter your Pinterest code, especially if you plan to expand your presence on Pinterest. It will activate Rich Pins, which will completely boost your sales and visibility for any product or post that has great images.", _SQ_PLUGIN_NAME_), '<br /><br />', '<br /><br />', '<br /><br />'),
|
185 |
'function' => 'checkSettingsWebmasters',
|
186 |
),
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
187 |
|
188 |
);
|
189 |
$tasks['sq_focuspages'] = array();
|
models/Compatibility.php
CHANGED
@@ -7,8 +7,13 @@ class SQ_Models_Compatibility {
|
|
7 |
*/
|
8 |
public function fixEnqueueErrors() {
|
9 |
global $wp_styles, $wp_scripts;
|
10 |
-
$corelib = array('admin-bar', 'colors', 'ie', 'common', 'utils', 'wp-auth-check',
|
11 |
-
'media-editor', 'media-audiovideo', 'media-views', 'imgareaselect', 'mce-view', 'image-edit'
|
|
|
|
|
|
|
|
|
|
|
12 |
);
|
13 |
|
14 |
foreach ($wp_styles->queue as $key => $queue) {
|
@@ -28,7 +33,7 @@ class SQ_Models_Compatibility {
|
|
28 |
* Clear the styles from other plugins
|
29 |
*/
|
30 |
public function clearStyles() {
|
31 |
-
//clear the other plugins
|
32 |
global $wp_styles;
|
33 |
$wp_styles->queue = array();
|
34 |
}
|
7 |
*/
|
8 |
public function fixEnqueueErrors() {
|
9 |
global $wp_styles, $wp_scripts;
|
10 |
+
$corelib = array('admin-bar', 'colors', 'ie', 'common', 'utils', 'wp-auth-check','dismissible-notices',
|
11 |
+
'media-editor', 'media-audiovideo', 'media-views', 'imgareaselect', 'mce-view', 'image-edit',
|
12 |
+
'wp-color-picker','migrate_style','jquery-ui-draggable','jquery-ui-core',
|
13 |
+
'wordfence-global-style','ip2location_country_blocker_admin_menu_styles','wf-adminbar','autoptimize-toolbar',
|
14 |
+
'yoast-seo-adminbar','bbp-admin-css','bp-admin-common-css','bp-admin-bar','elementor-common','ithemes-icon-font',
|
15 |
+
'wordfence-ls-admin-global','woocommerce_admin_menu_styles','besclwp_cpt_admin_style','uabb-notice-settings',
|
16 |
+
'besclwp_cpt_admin_script','itsec-core-admin-notices','sandbox-website'
|
17 |
);
|
18 |
|
19 |
foreach ($wp_styles->queue as $key => $queue) {
|
33 |
* Clear the styles from other plugins
|
34 |
*/
|
35 |
public function clearStyles() {
|
36 |
+
//clear the other plugins styles
|
37 |
global $wp_styles;
|
38 |
$wp_styles->queue = array();
|
39 |
}
|
models/Frontend.php
CHANGED
@@ -3,7 +3,7 @@
|
|
3 |
class SQ_Models_Frontend {
|
4 |
|
5 |
private $_post;
|
6 |
-
private $
|
7 |
|
8 |
public function __construct() {
|
9 |
//initiate the post
|
@@ -54,12 +54,16 @@ class SQ_Models_Frontend {
|
|
54 |
* @return string
|
55 |
*/
|
56 |
public function getBuffer($buffer) {
|
57 |
-
|
58 |
-
if
|
59 |
-
|
|
|
|
|
|
|
|
|
60 |
}
|
61 |
|
62 |
-
return
|
63 |
}
|
64 |
|
65 |
|
@@ -73,8 +77,6 @@ class SQ_Models_Frontend {
|
|
73 |
if ($this->runSEOForThisPage()) {
|
74 |
|
75 |
if ($header = $this->getHeader()) {
|
76 |
-
//set loaded true
|
77 |
-
$this->_loaded = true;
|
78 |
|
79 |
//clear the existing tags to avoid duplicates
|
80 |
if (SQ_Classes_Helpers_Tools::getOption('sq_auto_metas')) {
|
@@ -118,7 +120,6 @@ class SQ_Models_Frontend {
|
|
118 |
$buffer = @preg_replace('/(<html(\s[^>]*|))/si', sprintf("$1%s", apply_filters('sq_html_prefix', false)), $buffer, 1);
|
119 |
|
120 |
$header_str = str_replace('$', '\$', join("\n", $header));
|
121 |
-
|
122 |
$buffer = @preg_replace('/(<head(\s[^>]*|)>)/si', sprintf("$1\n%s", $header_str) . "\n", $buffer, 1);
|
123 |
|
124 |
unset($header);
|
3 |
class SQ_Models_Frontend {
|
4 |
|
5 |
private $_post;
|
6 |
+
private $_buffer = false;
|
7 |
|
8 |
public function __construct() {
|
9 |
//initiate the post
|
54 |
* @return string
|
55 |
*/
|
56 |
public function getBuffer($buffer) {
|
57 |
+
|
58 |
+
if(!$this->_buffer) {
|
59 |
+
if (!$buffer && ob_get_contents()) {
|
60 |
+
$buffer = ob_get_contents();
|
61 |
+
}
|
62 |
+
|
63 |
+
$this->_buffer = apply_filters('sq_buffer', $buffer);
|
64 |
}
|
65 |
|
66 |
+
return $this->_buffer;
|
67 |
}
|
68 |
|
69 |
|
77 |
if ($this->runSEOForThisPage()) {
|
78 |
|
79 |
if ($header = $this->getHeader()) {
|
|
|
|
|
80 |
|
81 |
//clear the existing tags to avoid duplicates
|
82 |
if (SQ_Classes_Helpers_Tools::getOption('sq_auto_metas')) {
|
120 |
$buffer = @preg_replace('/(<html(\s[^>]*|))/si', sprintf("$1%s", apply_filters('sq_html_prefix', false)), $buffer, 1);
|
121 |
|
122 |
$header_str = str_replace('$', '\$', join("\n", $header));
|
|
|
123 |
$buffer = @preg_replace('/(<head(\s[^>]*|)>)/si', sprintf("$1\n%s", $header_str) . "\n", $buffer, 1);
|
124 |
|
125 |
unset($header);
|
models/Menu.php
CHANGED
@@ -300,6 +300,12 @@ class SQ_Models_Menu {
|
|
300 |
'capability' => 'sq_manage_snippet',
|
301 |
'icon' => 'bulkseo_92.png'
|
302 |
),
|
|
|
|
|
|
|
|
|
|
|
|
|
303 |
'sq_seosettings/metas' => array(
|
304 |
'title' => __("SEO Metas", _SQ_PLUGIN_NAME_),
|
305 |
'description' => __("required on-page metas", _SQ_PLUGIN_NAME_),
|
@@ -318,12 +324,6 @@ class SQ_Models_Menu {
|
|
318 |
'capability' => 'sq_manage_settings',
|
319 |
'icon' => 'settings_92.png'
|
320 |
),
|
321 |
-
'sq_seosettings/automation' => array(
|
322 |
-
'title' => __("Automation", _SQ_PLUGIN_NAME_),
|
323 |
-
'description' => __("patterns & automation", _SQ_PLUGIN_NAME_),
|
324 |
-
'capability' => 'sq_manage_settings',
|
325 |
-
'icon' => 'settings_92.png'
|
326 |
-
),
|
327 |
'sq_seosettings/tracking' => array(
|
328 |
'title' => __("Tracking Tools", _SQ_PLUGIN_NAME_),
|
329 |
'description' => __("google analytics, pixel, etc.", _SQ_PLUGIN_NAME_),
|
@@ -362,18 +362,18 @@ class SQ_Models_Menu {
|
|
362 |
),
|
363 |
);
|
364 |
$tabs['sq_onboarding'] = array(
|
365 |
-
'sq_onboarding/step1' => array(
|
366 |
'title' => __("First Step", _SQ_PLUGIN_NAME_),
|
367 |
'description' => __("all the SEO features", _SQ_PLUGIN_NAME_),
|
368 |
'capability' => 'edit_posts',
|
369 |
'icon' => 'settings_92.png'
|
370 |
),
|
371 |
-
'sq_onboarding/step2' => array(
|
372 |
-
'title' => __("14 days jorney", _SQ_PLUGIN_NAME_),
|
373 |
-
'description' => __("sign up for better ranking", _SQ_PLUGIN_NAME_),
|
374 |
-
'capability' => 'edit_posts',
|
375 |
-
'icon' => 'settings_92.png'
|
376 |
-
),
|
377 |
'sq_onboarding/step3' => array(
|
378 |
'title' => __("Import", _SQ_PLUGIN_NAME_),
|
379 |
'description' => __("import settings and SEO", _SQ_PLUGIN_NAME_),
|
300 |
'capability' => 'sq_manage_snippet',
|
301 |
'icon' => 'bulkseo_92.png'
|
302 |
),
|
303 |
+
'sq_seosettings/automation' => array(
|
304 |
+
'title' => __("Automation", _SQ_PLUGIN_NAME_),
|
305 |
+
'description' => __("patterns & automation", _SQ_PLUGIN_NAME_),
|
306 |
+
'capability' => 'sq_manage_settings',
|
307 |
+
'icon' => 'settings_92.png'
|
308 |
+
),
|
309 |
'sq_seosettings/metas' => array(
|
310 |
'title' => __("SEO Metas", _SQ_PLUGIN_NAME_),
|
311 |
'description' => __("required on-page metas", _SQ_PLUGIN_NAME_),
|
324 |
'capability' => 'sq_manage_settings',
|
325 |
'icon' => 'settings_92.png'
|
326 |
),
|
|
|
|
|
|
|
|
|
|
|
|
|
327 |
'sq_seosettings/tracking' => array(
|
328 |
'title' => __("Tracking Tools", _SQ_PLUGIN_NAME_),
|
329 |
'description' => __("google analytics, pixel, etc.", _SQ_PLUGIN_NAME_),
|
362 |
),
|
363 |
);
|
364 |
$tabs['sq_onboarding'] = array(
|
365 |
+
'sq_onboarding/step1.1' => array(
|
366 |
'title' => __("First Step", _SQ_PLUGIN_NAME_),
|
367 |
'description' => __("all the SEO features", _SQ_PLUGIN_NAME_),
|
368 |
'capability' => 'edit_posts',
|
369 |
'icon' => 'settings_92.png'
|
370 |
),
|
371 |
+
// 'sq_onboarding/step2.1' => array(
|
372 |
+
// 'title' => __("14 days jorney", _SQ_PLUGIN_NAME_),
|
373 |
+
// 'description' => __("sign up for better ranking", _SQ_PLUGIN_NAME_),
|
374 |
+
// 'capability' => 'edit_posts',
|
375 |
+
// 'icon' => 'settings_92.png'
|
376 |
+
// ),
|
377 |
'sq_onboarding/step3' => array(
|
378 |
'title' => __("Import", _SQ_PLUGIN_NAME_),
|
379 |
'description' => __("import settings and SEO", _SQ_PLUGIN_NAME_),
|
models/Rollback.php
ADDED
@@ -0,0 +1,117 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class SQ_Models_Rollback {
|
4 |
+
|
5 |
+
/**
|
6 |
+
* @var string Package URL.
|
7 |
+
*/
|
8 |
+
protected $package_url;
|
9 |
+
|
10 |
+
/**
|
11 |
+
* @var string Package URL.
|
12 |
+
*/
|
13 |
+
protected $version;
|
14 |
+
|
15 |
+
/**
|
16 |
+
* @var string Plugin name.
|
17 |
+
*/
|
18 |
+
protected $plugin_name;
|
19 |
+
|
20 |
+
/**
|
21 |
+
* @var string Plugin slug.
|
22 |
+
*/
|
23 |
+
protected $plugin_slug;
|
24 |
+
|
25 |
+
public function set_plugin($args = array()){
|
26 |
+
foreach ( $args as $key => $value ) {
|
27 |
+
$this->{$key} = $value;
|
28 |
+
}
|
29 |
+
}
|
30 |
+
|
31 |
+
/**
|
32 |
+
* Print inline style.
|
33 |
+
* @access private
|
34 |
+
*/
|
35 |
+
private function print_inline_style() {
|
36 |
+
?>
|
37 |
+
<style>
|
38 |
+
.wrap {
|
39 |
+
overflow: hidden;
|
40 |
+
}
|
41 |
+
|
42 |
+
h1 {
|
43 |
+
background: #0a9b8f;
|
44 |
+
text-align: center;
|
45 |
+
color: #fff !important;
|
46 |
+
padding: 50px !important;
|
47 |
+
text-transform: uppercase;
|
48 |
+
letter-spacing: 1px;
|
49 |
+
line-height: 30px;
|
50 |
+
}
|
51 |
+
|
52 |
+
h1 img {
|
53 |
+
max-width: 300px;
|
54 |
+
display: block;
|
55 |
+
margin: auto auto 50px;
|
56 |
+
}
|
57 |
+
</style>
|
58 |
+
<?php
|
59 |
+
}
|
60 |
+
|
61 |
+
/**
|
62 |
+
* Apply package.
|
63 |
+
*
|
64 |
+
* Change the plugin data when WordPress checks for updates. This method
|
65 |
+
* modifies package data to update the plugin from a specific URL containing
|
66 |
+
* the version package.
|
67 |
+
*/
|
68 |
+
protected function apply_package() {
|
69 |
+
$update_plugins = get_site_transient( 'update_plugins' );
|
70 |
+
if ( ! is_object( $update_plugins ) ) {
|
71 |
+
$update_plugins = new \stdClass();
|
72 |
+
}
|
73 |
+
|
74 |
+
$plugin_info = new \stdClass();
|
75 |
+
$plugin_info->new_version = $this->version;
|
76 |
+
$plugin_info->slug = $this->plugin_slug;
|
77 |
+
$plugin_info->package = $this->package_url;
|
78 |
+
$plugin_info->url = 'https://squirrly.co/';
|
79 |
+
|
80 |
+
$update_plugins->response[ $this->plugin_name ] = $plugin_info;
|
81 |
+
|
82 |
+
set_site_transient( 'update_plugins', $update_plugins );
|
83 |
+
}
|
84 |
+
|
85 |
+
/**
|
86 |
+
* Upgrade.
|
87 |
+
* @access protected
|
88 |
+
*/
|
89 |
+
protected function upgrade() {
|
90 |
+
require_once( ABSPATH . 'wp-admin/includes/class-wp-upgrader.php' );
|
91 |
+
|
92 |
+
$logo_url = _SQ_ASSETS_URL_ . 'img/logo.png';
|
93 |
+
|
94 |
+
$upgrader_args = [
|
95 |
+
'url' => 'update.php?action=upgrade-plugin&plugin=' . rawurlencode( $this->plugin_name ),
|
96 |
+
'plugin' => $this->plugin_name,
|
97 |
+
'nonce' => 'upgrade-plugin_' . $this->plugin_name,
|
98 |
+
'title' => '<img src="' . $logo_url . '" alt="Squirrly">' . __( 'Rollback to Previous Version', _SQ_PLUGIN_NAME_ ),
|
99 |
+
];
|
100 |
+
|
101 |
+
$this->print_inline_style();
|
102 |
+
$upgrader = new \Plugin_Upgrader( new \Plugin_Upgrader_Skin( $upgrader_args ) );
|
103 |
+
$upgrader->upgrade( $this->plugin_name );
|
104 |
+
}
|
105 |
+
|
106 |
+
/**
|
107 |
+
* Run.
|
108 |
+
*
|
109 |
+
* Rollback to previous versions.
|
110 |
+
*
|
111 |
+
*/
|
112 |
+
public function run() {
|
113 |
+
$this->apply_package();
|
114 |
+
$this->upgrade();
|
115 |
+
}
|
116 |
+
|
117 |
+
}
|
models/Sitemaps.php
CHANGED
@@ -62,7 +62,12 @@ class SQ_Models_Sitemaps extends SQ_Models_Abstract_Seo {
|
|
62 |
return $homes;
|
63 |
}
|
64 |
|
65 |
-
$xml =
|
|
|
|
|
|
|
|
|
|
|
66 |
}
|
67 |
|
68 |
|
62 |
return $homes;
|
63 |
}
|
64 |
|
65 |
+
$xml = array();
|
66 |
+
$xml['loc'] = $post->url;
|
67 |
+
|
68 |
+
$xml['lastmod'] = trim(mysql2date('Y-m-d\TH:i:s+00:00', $this->lastModified($post), false));
|
69 |
+
$xml['changefreq'] = $this->frequency[SQ_Classes_Helpers_Tools::getOption('sq_sitemap_frequency')][$this->type][1];
|
70 |
+
$xml['priority'] = $this->frequency[SQ_Classes_Helpers_Tools::getOption('sq_sitemap_frequency')][$this->type][0];
|
71 |
}
|
72 |
|
73 |
|
models/bulkseo/Metas.php
CHANGED
@@ -137,7 +137,7 @@ class SQ_Models_Bulkseo_Metas extends SQ_Models_Abstract_Assistant {
|
|
137 |
public function getHeader() {
|
138 |
$header = '<li class="completed">';
|
139 |
$header .= '<div class="font-weight-bold text-black-50 mb-2">' . __('Current URL', _SQ_PLUGIN_NAME_) . ': </div>';
|
140 |
-
$header .= '<a href="' . $this->_post->url . '" target="_blank" style="word-break: break-word;">' . $this->_post->url . '</a>';
|
141 |
if (SQ_Classes_Helpers_Tools::getOption('sq_auto_keywords')) {
|
142 |
if ($this->_keyword) {
|
143 |
$header .= '<div class="font-weight-bold text-black-50 mt-2 text-left">' . __('Keyword', _SQ_PLUGIN_NAME_) . ': ' . $this->_keyword . '</div>';
|
137 |
public function getHeader() {
|
138 |
$header = '<li class="completed">';
|
139 |
$header .= '<div class="font-weight-bold text-black-50 mb-2">' . __('Current URL', _SQ_PLUGIN_NAME_) . ': </div>';
|
140 |
+
$header .= '<a href="' . $this->_post->url . '" target="_blank" style="word-break: break-word;">' . urldecode($this->_post->url) . '</a>';
|
141 |
if (SQ_Classes_Helpers_Tools::getOption('sq_auto_keywords')) {
|
142 |
if ($this->_keyword) {
|
143 |
$header .= '<div class="font-weight-bold text-black-50 mt-2 text-left">' . __('Keyword', _SQ_PLUGIN_NAME_) . ': ' . $this->_keyword . '</div>';
|
models/bulkseo/Opengraph.php
CHANGED
@@ -123,7 +123,7 @@ class SQ_Models_Bulkseo_Opengraph extends SQ_Models_Abstract_Assistant {
|
|
123 |
public function getHeader() {
|
124 |
$header = '<li class="completed">';
|
125 |
$header .= '<div class="font-weight-bold text-black-50 mb-2">' . __('Current URL', _SQ_PLUGIN_NAME_) . ': </div>';
|
126 |
-
$header .= '<a href="' . $this->_post->url . '" target="_blank" style="word-break: break-word;">' . $this->_post->url . '</a>';
|
127 |
$header .= '</li>';
|
128 |
|
129 |
return $header;
|
123 |
public function getHeader() {
|
124 |
$header = '<li class="completed">';
|
125 |
$header .= '<div class="font-weight-bold text-black-50 mb-2">' . __('Current URL', _SQ_PLUGIN_NAME_) . ': </div>';
|
126 |
+
$header .= '<a href="' . $this->_post->url . '" target="_blank" style="word-break: break-word;">' . urldecode($this->_post->url) . '</a>';
|
127 |
$header .= '</li>';
|
128 |
|
129 |
return $header;
|
models/bulkseo/Twittercard.php
CHANGED
@@ -120,7 +120,7 @@ class SQ_Models_Bulkseo_Twittercard extends SQ_Models_Abstract_Assistant {
|
|
120 |
public function getHeader() {
|
121 |
$header = '<li class="completed">';
|
122 |
$header .= '<div class="font-weight-bold text-black-50 mb-2">' . __('Current URL', _SQ_PLUGIN_NAME_) . ': </div>';
|
123 |
-
$header .= '<a href="' . $this->_post->url . '" target="_blank" style="word-break: break-word;">' . $this->_post->url . '</a>';
|
124 |
$header .= '</li>';
|
125 |
|
126 |
return $header;
|
120 |
public function getHeader() {
|
121 |
$header = '<li class="completed">';
|
122 |
$header .= '<div class="font-weight-bold text-black-50 mb-2">' . __('Current URL', _SQ_PLUGIN_NAME_) . ': </div>';
|
123 |
+
$header .= '<a href="' . $this->_post->url . '" target="_blank" style="word-break: break-word;">' . urldecode($this->_post->url) . '</a>';
|
124 |
$header .= '</li>';
|
125 |
|
126 |
return $header;
|
models/bulkseo/Visibility.php
CHANGED
@@ -25,15 +25,15 @@ class SQ_Models_Bulkseo_Visibility extends SQ_Models_Abstract_Assistant {
|
|
25 |
$this->_tasks[$this->_category] = array(
|
26 |
'noindex' => array(
|
27 |
'title' => __("Visible on Google", _SQ_PLUGIN_NAME_),
|
28 |
-
'description' => sprintf(__("Let Google Index this page. %s You need to make sure your settings are turned to green for the \"let Google index this page\" section of this URL's visibility settings.",_SQ_PLUGIN_NAME_),'<br /><br />'),
|
29 |
),
|
30 |
'nofollow' => array(
|
31 |
'title' => __("Send Authority to this page", _SQ_PLUGIN_NAME_),
|
32 |
-
'description' => sprintf(__("Pass SEO authority to this page. %s If you want this page to really be visible, then you must allow the flow of authority from the previous pages to this one. %s The previous page means any page that leads to the current one. Passing authority from the previous page to this one will improve the current page's visibility. %s You need to make sure your settings are turned to green for the \"Pass Link Juice\" section of this URL's visibility settings.",_SQ_PLUGIN_NAME_),'<br /><br />','<br /><br />','<br /><br />'),
|
33 |
),
|
34 |
'nositemap' => array(
|
35 |
'title' => __("Add page in sitemap", _SQ_PLUGIN_NAME_),
|
36 |
-
'description' => sprintf(__("Turn the \"Show it in Sitemap.xml\" toggle to green (ON). %s That setting helps you control if the current URL should be found within the sitemap. There are pages you will want in the sitemap, and pages that you will want out of the sitemap. %s If your purpose is to maximize visibility for the current URL, then you need to add it to Sitemap.",_SQ_PLUGIN_NAME_),'<br /><br />','<br /><br />'),
|
37 |
),
|
38 |
);
|
39 |
|
@@ -67,7 +67,7 @@ class SQ_Models_Bulkseo_Visibility extends SQ_Models_Abstract_Assistant {
|
|
67 |
public function getHeader() {
|
68 |
$header = '<li class="completed">';
|
69 |
$header .= '<div class="font-weight-bold text-black-50 mb-2">' . __('Current URL', _SQ_PLUGIN_NAME_) . ': </div>';
|
70 |
-
$header .= '<a href="'
|
71 |
$header .= '</li>';
|
72 |
|
73 |
return $header;
|
@@ -100,8 +100,8 @@ class SQ_Models_Bulkseo_Visibility extends SQ_Models_Abstract_Assistant {
|
|
100 |
$task['penalty'] = 100;
|
101 |
$task['error'] = true;
|
102 |
}
|
103 |
-
if (get_option(
|
104 |
-
$task['error_message'] = sprintf(__("You selected '%s' in Settings > Reading. It's important to uncheck that option.", _SQ_PLUGIN_NAME_), __(
|
105 |
$task['completed'] = 0;
|
106 |
$task['error'] = false;
|
107 |
return $task;
|
25 |
$this->_tasks[$this->_category] = array(
|
26 |
'noindex' => array(
|
27 |
'title' => __("Visible on Google", _SQ_PLUGIN_NAME_),
|
28 |
+
'description' => sprintf(__("Let Google Index this page. %s You need to make sure your settings are turned to green for the \"let Google index this page\" section of this URL's visibility settings.", _SQ_PLUGIN_NAME_), '<br /><br />'),
|
29 |
),
|
30 |
'nofollow' => array(
|
31 |
'title' => __("Send Authority to this page", _SQ_PLUGIN_NAME_),
|
32 |
+
'description' => sprintf(__("Pass SEO authority to this page. %s If you want this page to really be visible, then you must allow the flow of authority from the previous pages to this one. %s The previous page means any page that leads to the current one. Passing authority from the previous page to this one will improve the current page's visibility. %s You need to make sure your settings are turned to green for the \"Pass Link Juice\" section of this URL's visibility settings.", _SQ_PLUGIN_NAME_), '<br /><br />', '<br /><br />', '<br /><br />'),
|
33 |
),
|
34 |
'nositemap' => array(
|
35 |
'title' => __("Add page in sitemap", _SQ_PLUGIN_NAME_),
|
36 |
+
'description' => sprintf(__("Turn the \"Show it in Sitemap.xml\" toggle to green (ON). %s That setting helps you control if the current URL should be found within the sitemap. There are pages you will want in the sitemap, and pages that you will want out of the sitemap. %s If your purpose is to maximize visibility for the current URL, then you need to add it to Sitemap.", _SQ_PLUGIN_NAME_), '<br /><br />', '<br /><br />'),
|
37 |
),
|
38 |
);
|
39 |
|
67 |
public function getHeader() {
|
68 |
$header = '<li class="completed">';
|
69 |
$header .= '<div class="font-weight-bold text-black-50 mb-2">' . __('Current URL', _SQ_PLUGIN_NAME_) . ': </div>';
|
70 |
+
$header .= '<a href="' . $this->_post->url . '" target="_blank" style="word-break: break-word;">' . urldecode($this->_post->url) . '</a>';
|
71 |
$header .= '</li>';
|
72 |
|
73 |
return $header;
|
100 |
$task['penalty'] = 100;
|
101 |
$task['error'] = true;
|
102 |
}
|
103 |
+
if (get_option('blog_public') == 0) {
|
104 |
+
$task['error_message'] = sprintf(__("You selected '%s' in Settings > Reading. It's important to uncheck that option.", _SQ_PLUGIN_NAME_), __('Discourage search engines from indexing this site'));
|
105 |
$task['completed'] = 0;
|
106 |
$task['error'] = false;
|
107 |
return $task;
|
models/focuspages/Accuracy.php
CHANGED
@@ -32,7 +32,7 @@ class SQ_Models_Focuspages_Accuracy extends SQ_Models_Abstract_Assistant {
|
|
32 |
public function getHeader() {
|
33 |
$header = '<li class="completed">';
|
34 |
$header .= '<div class="font-weight-bold text-black-50 mb-1">' . __('Current URL', _SQ_PLUGIN_NAME_) . ': </div>';
|
35 |
-
$header .= '<a href="' . $this->_post->url . '" target="_blank" style="word-break: break-word;">' . $this->_post->url . '</a>';
|
36 |
$header .= '</li>';
|
37 |
|
38 |
if (!$this->_audit->sq_analytics_gsc_connected) {
|
32 |
public function getHeader() {
|
33 |
$header = '<li class="completed">';
|
34 |
$header .= '<div class="font-weight-bold text-black-50 mb-1">' . __('Current URL', _SQ_PLUGIN_NAME_) . ': </div>';
|
35 |
+
$header .= '<a href="' . $this->_post->url . '" target="_blank" style="word-break: break-word;">' . urldecode($this->_post->url) . '</a>';
|
36 |
$header .= '</li>';
|
37 |
|
38 |
if (!$this->_audit->sq_analytics_gsc_connected) {
|
models/focuspages/Audit.php
CHANGED
@@ -75,7 +75,7 @@ class SQ_Models_Focuspages_Audit extends SQ_Models_Abstract_Assistant {
|
|
75 |
public function getHeader() {
|
76 |
$header = '<li class="completed">';
|
77 |
$header .= '<div class="font-weight-bold text-black-50 mb-1">' . __('Current URL', _SQ_PLUGIN_NAME_) . ': </div>';
|
78 |
-
$header .= '<a href="' . $this->_post->url . '" target="_blank" style="word-break: break-word;">' . $this->_post->url . '</a>';
|
79 |
$header .= '</li>';
|
80 |
|
81 |
if ($this->_siteaudit && isset($this->_siteaudit->score)) {
|
75 |
public function getHeader() {
|
76 |
$header = '<li class="completed">';
|
77 |
$header .= '<div class="font-weight-bold text-black-50 mb-1">' . __('Current URL', _SQ_PLUGIN_NAME_) . ': </div>';
|
78 |
+
$header .= '<a href="' . $this->_post->url . '" target="_blank" style="word-break: break-word;">' . urldecode($this->_post->url) . '</a>';
|
79 |
$header .= '</li>';
|
80 |
|
81 |
if ($this->_siteaudit && isset($this->_siteaudit->score)) {
|
models/focuspages/Authority.php
CHANGED
@@ -31,7 +31,7 @@ class SQ_Models_Focuspages_Authority extends SQ_Models_Abstract_Assistant {
|
|
31 |
public function getHeader() {
|
32 |
$header = '<li class="completed">';
|
33 |
$header .= '<div class="font-weight-bold text-black-50 mb-1">' . __('Current URL', _SQ_PLUGIN_NAME_) . ': </div>';
|
34 |
-
$header .= '<a href="' . $this->_post->url . '" target="_blank" style="word-break: break-word;">' . $this->_post->url . '</a>';
|
35 |
$header .= '</li>';
|
36 |
|
37 |
return $header;
|
31 |
public function getHeader() {
|
32 |
$header = '<li class="completed">';
|
33 |
$header .= '<div class="font-weight-bold text-black-50 mb-1">' . __('Current URL', _SQ_PLUGIN_NAME_) . ': </div>';
|
34 |
+
$header .= '<a href="' . $this->_post->url . '" target="_blank" style="word-break: break-word;">' . urldecode($this->_post->url) . '</a>';
|
35 |
$header .= '</li>';
|
36 |
|
37 |
return $header;
|
models/focuspages/Backlinks.php
CHANGED
@@ -44,7 +44,7 @@ class SQ_Models_Focuspages_Backlinks extends SQ_Models_Abstract_Assistant {
|
|
44 |
public function getHeader() {
|
45 |
$header = '<li class="completed">';
|
46 |
$header .= '<div class="font-weight-bold text-black-50 mb-1">' . __('Current URL', _SQ_PLUGIN_NAME_) . ': </div>';
|
47 |
-
$header .= '<a href="' . $this->_post->url . '" target="_blank" style="word-break: break-word;">' . $this->_post->url . '</a>';
|
48 |
$header .= '</li>';
|
49 |
|
50 |
return $header;
|
44 |
public function getHeader() {
|
45 |
$header = '<li class="completed">';
|
46 |
$header .= '<div class="font-weight-bold text-black-50 mb-1">' . __('Current URL', _SQ_PLUGIN_NAME_) . ': </div>';
|
47 |
+
$header .= '<a href="' . $this->_post->url . '" target="_blank" style="word-break: break-word;">' . urldecode($this->_post->url) . '</a>';
|
48 |
$header .= '</li>';
|
49 |
|
50 |
return $header;
|
models/focuspages/Clicks.php
CHANGED
@@ -54,7 +54,7 @@ class SQ_Models_Focuspages_Clicks extends SQ_Models_Abstract_Assistant {
|
|
54 |
public function getHeader() {
|
55 |
$header = '<li class="completed">';
|
56 |
$header .= '<div class="font-weight-bold text-black-50 mb-1">' . __('Current URL', _SQ_PLUGIN_NAME_) . ': </div>';
|
57 |
-
$header .= '<a href="' . $this->_post->url . '" target="_blank" style="word-break: break-word;">' . $this->_post->url . '</a>';
|
58 |
$header .= '</li>';
|
59 |
|
60 |
$header .= '<li class="completed">';
|
54 |
public function getHeader() {
|
55 |
$header = '<li class="completed">';
|
56 |
$header .= '<div class="font-weight-bold text-black-50 mb-1">' . __('Current URL', _SQ_PLUGIN_NAME_) . ': </div>';
|
57 |
+
$header .= '<a href="' . $this->_post->url . '" target="_blank" style="word-break: break-word;">' . urldecode($this->_post->url) . '</a>';
|
58 |
$header .= '</li>';
|
59 |
|
60 |
$header .= '<li class="completed">';
|
models/focuspages/Content.php
CHANGED
@@ -73,7 +73,7 @@ class SQ_Models_Focuspages_Content extends SQ_Models_Abstract_Assistant {
|
|
73 |
$edit_link = '';
|
74 |
$header = '<li class="completed">';
|
75 |
$header .= '<div class="font-weight-bold text-black-50 mb-1">' . __('Current URL', _SQ_PLUGIN_NAME_) . ': </div>';
|
76 |
-
$header .= '<a href="' . $this->_post->url . '" target="_blank" style="word-break: break-word;">' . $this->_post->url . '</a>';
|
77 |
$header .= '</li>';
|
78 |
|
79 |
if (isset($this->_post->ID)) {
|
73 |
$edit_link = '';
|
74 |
$header = '<li class="completed">';
|
75 |
$header .= '<div class="font-weight-bold text-black-50 mb-1">' . __('Current URL', _SQ_PLUGIN_NAME_) . ': </div>';
|
76 |
+
$header .= '<a href="' . $this->_post->url . '" target="_blank" style="word-break: break-word;">' . urldecode($this->_post->url) . '</a>';
|
77 |
$header .= '</li>';
|
78 |
|
79 |
if (isset($this->_post->ID)) {
|
models/focuspages/Ctr.php
CHANGED
@@ -54,7 +54,7 @@ class SQ_Models_Focuspages_Ctr extends SQ_Models_Abstract_Assistant {
|
|
54 |
public function getHeader() {
|
55 |
$header = '<li class="completed">';
|
56 |
$header .= '<div class="font-weight-bold text-black-50 mb-1">' . __('Current URL', _SQ_PLUGIN_NAME_) . ': </div>';
|
57 |
-
$header .= '<a href="' . $this->_post->url . '" target="_blank" style="word-break: break-word;">' . $this->_post->url . '</a>';
|
58 |
$header .= '</li>';
|
59 |
|
60 |
$header .= '<li class="completed">';
|
54 |
public function getHeader() {
|
55 |
$header = '<li class="completed">';
|
56 |
$header .= '<div class="font-weight-bold text-black-50 mb-1">' . __('Current URL', _SQ_PLUGIN_NAME_) . ': </div>';
|
57 |
+
$header .= '<a href="' . $this->_post->url . '" target="_blank" style="word-break: break-word;">' . urldecode($this->_post->url) . '</a>';
|
58 |
$header .= '</li>';
|
59 |
|
60 |
$header .= '<li class="completed">';
|
models/focuspages/Image.php
CHANGED
@@ -68,7 +68,7 @@ class SQ_Models_Focuspages_Image extends SQ_Models_Abstract_Assistant {
|
|
68 |
$edit_link = '';
|
69 |
$header = '<li class="completed">';
|
70 |
$header .= '<div class="font-weight-bold text-black-50 mb-1">' . __('Current URL', _SQ_PLUGIN_NAME_) . ': </div>';
|
71 |
-
$header .= '<a href="' . $this->_post->url . '" target="_blank" style="word-break: break-word;">' . $this->_post->url . '</a>';
|
72 |
$header .= '</li>';
|
73 |
|
74 |
$header .= '<li class="completed">';
|
68 |
$edit_link = '';
|
69 |
$header = '<li class="completed">';
|
70 |
$header .= '<div class="font-weight-bold text-black-50 mb-1">' . __('Current URL', _SQ_PLUGIN_NAME_) . ': </div>';
|
71 |
+
$header .= '<a href="' . $this->_post->url . '" target="_blank" style="word-break: break-word;">' . urldecode($this->_post->url) . '</a>';
|
72 |
$header .= '</li>';
|
73 |
|
74 |
$header .= '<li class="completed">';
|
models/focuspages/Impressions.php
CHANGED
@@ -54,7 +54,7 @@ class SQ_Models_Focuspages_Impressions extends SQ_Models_Abstract_Assistant {
|
|
54 |
public function getHeader() {
|
55 |
$header = '<li class="completed">';
|
56 |
$header .= '<div class="font-weight-bold text-black-50 mb-1">' . __('Current URL', _SQ_PLUGIN_NAME_) . ': </div>';
|
57 |
-
$header .= '<a href="' . $this->_post->url . '" target="_blank" style="word-break: break-word;">' . $this->_post->url . '</a>';
|
58 |
$header .= '</li>';
|
59 |
|
60 |
$header .= '<li class="completed">';
|
54 |
public function getHeader() {
|
55 |
$header = '<li class="completed">';
|
56 |
$header .= '<div class="font-weight-bold text-black-50 mb-1">' . __('Current URL', _SQ_PLUGIN_NAME_) . ': </div>';
|
57 |
+
$header .= '<a href="' . $this->_post->url . '" target="_blank" style="word-break: break-word;">' . urldecode($this->_post->url) . '</a>';
|
58 |
$header .= '</li>';
|
59 |
|
60 |
$header .= '<li class="completed">';
|
models/focuspages/Indexability.php
CHANGED
@@ -82,7 +82,7 @@ class SQ_Models_Focuspages_Indexability extends SQ_Models_Abstract_Assistant {
|
|
82 |
SQ_Debug::dump($this->_post);
|
83 |
$header = '<li class="completed">';
|
84 |
$header .= '<div class="font-weight-bold text-black-50 mb-1">' . __('Current URL', _SQ_PLUGIN_NAME_) . ': </div>';
|
85 |
-
$header .= '<a href="' . $this->_post->url . '" target="_blank" style="word-break: break-word;">' . $this->_post->url . '</a>';
|
86 |
$header .= '</li>';
|
87 |
|
88 |
if (!$this->_audit->sq_analytics_gsc_connected && !$this->_audit->sq_analytics_google_connected) {
|
82 |
SQ_Debug::dump($this->_post);
|
83 |
$header = '<li class="completed">';
|
84 |
$header .= '<div class="font-weight-bold text-black-50 mb-1">' . __('Current URL', _SQ_PLUGIN_NAME_) . ': </div>';
|
85 |
+
$header .= '<a href="' . $this->_post->url . '" target="_blank" style="word-break: break-word;">' . urldecode($this->_post->url) . '</a>';
|
86 |
$header .= '</li>';
|
87 |
|
88 |
if (!$this->_audit->sq_analytics_gsc_connected && !$this->_audit->sq_analytics_google_connected) {
|
models/focuspages/Innerlinks.php
CHANGED
@@ -52,7 +52,7 @@ class SQ_Models_Focuspages_Innerlinks extends SQ_Models_Abstract_Assistant {
|
|
52 |
'title' => sprintf(__("Get %s inner links", _SQ_PLUGIN_NAME_), self::INNERS_MINVAL),
|
53 |
'value' => (int)$this->_inner_links . ' ' . __('inner links', _SQ_PLUGIN_NAME_) . ' ' .__('to', _SQ_PLUGIN_NAME_) . ': ' . $path,
|
54 |
'penalty' => 5,
|
55 |
-
'description' => sprintf(__("Get %s Inner Links %s Recommended is: %s %s Inner Links are links that you send from one URL of your site to another URL of your site. %s Since your Focus Pages are the most important pages in your site, you should make sure that you link to them from many pages of your website. %s
|
56 |
),
|
57 |
);
|
58 |
}
|
@@ -61,7 +61,7 @@ class SQ_Models_Focuspages_Innerlinks extends SQ_Models_Abstract_Assistant {
|
|
61 |
public function getHeader() {
|
62 |
$header = '<li class="completed">';
|
63 |
$header .= '<div class="font-weight-bold text-black-50 mb-1">' . __('Current URL', _SQ_PLUGIN_NAME_) . ': </div>';
|
64 |
-
$header .= '<a href="' . $this->_post->url . '" target="_blank" style="word-break: break-word;">' . $this->_post->url . '</a>';
|
65 |
$header .= '</li>';
|
66 |
|
67 |
if (isset($this->_post->ID)) {
|
52 |
'title' => sprintf(__("Get %s inner links", _SQ_PLUGIN_NAME_), self::INNERS_MINVAL),
|
53 |
'value' => (int)$this->_inner_links . ' ' . __('inner links', _SQ_PLUGIN_NAME_) . ' ' .__('to', _SQ_PLUGIN_NAME_) . ': ' . $path,
|
54 |
'penalty' => 5,
|
55 |
+
'description' => sprintf(__("Get %s Inner Links %s Recommended is: %s %s Inner Links are links that you send from one URL of your site to another URL of your site. %s Since your Focus Pages are the most important pages in your site, you should make sure that you link to them from many pages of your website. %s Note! We check the links present in the content of each post of your website.", _SQ_PLUGIN_NAME_), self::INNERS_MINVAL, '<br /><br />', self::INNERS_RECOMMENDED, '<br /><br />', '<br /><br />', '<br /><br />'),
|
56 |
),
|
57 |
);
|
58 |
}
|
61 |
public function getHeader() {
|
62 |
$header = '<li class="completed">';
|
63 |
$header .= '<div class="font-weight-bold text-black-50 mb-1">' . __('Current URL', _SQ_PLUGIN_NAME_) . ': </div>';
|
64 |
+
$header .= '<a href="' . $this->_post->url . '" target="_blank" style="word-break: break-word;">' . urldecode($this->_post->url) . '</a>';
|
65 |
$header .= '</li>';
|
66 |
|
67 |
if (isset($this->_post->ID)) {
|
models/focuspages/Keyword.php
CHANGED
@@ -75,7 +75,7 @@ class SQ_Models_Focuspages_Keyword extends SQ_Models_Abstract_Assistant {
|
|
75 |
public function getHeader() {
|
76 |
$header = '<li class="completed">';
|
77 |
$header .= '<div class="font-weight-bold text-black-50 mb-1">' . __('Current URL', _SQ_PLUGIN_NAME_) . ': </div>';
|
78 |
-
$header .= '<a href="' . $this->_post->url . '" target="_blank" style="word-break: break-word;">' . $this->_post->url . '</a>';
|
79 |
$header .= '</li>';
|
80 |
|
81 |
$header .= '<li class="completed">';
|
75 |
public function getHeader() {
|
76 |
$header = '<li class="completed">';
|
77 |
$header .= '<div class="font-weight-bold text-black-50 mb-1">' . __('Current URL', _SQ_PLUGIN_NAME_) . ': </div>';
|
78 |
+
$header .= '<a href="' . $this->_post->url . '" target="_blank" style="word-break: break-word;">' . urldecode($this->_post->url) . '</a>';
|
79 |
$header .= '</li>';
|
80 |
|
81 |
$header .= '<li class="completed">';
|
models/focuspages/Length.php
CHANGED
@@ -53,7 +53,7 @@ class SQ_Models_Focuspages_Length extends SQ_Models_Abstract_Assistant {
|
|
53 |
public function getHeader() {
|
54 |
$header = '<li class="completed">';
|
55 |
$header .= '<div class="font-weight-bold text-black-50 mb-1">' . __('Current URL', _SQ_PLUGIN_NAME_) . ': </div>';
|
56 |
-
$header .= '<a href="' . $this->_post->url . '" target="_blank" style="word-break: break-word;">' . $this->_post->url . '</a>';
|
57 |
$header .= '</li>';
|
58 |
|
59 |
if (isset($this->_post->ID)) {
|
53 |
public function getHeader() {
|
54 |
$header = '<li class="completed">';
|
55 |
$header .= '<div class="font-weight-bold text-black-50 mb-1">' . __('Current URL', _SQ_PLUGIN_NAME_) . ': </div>';
|
56 |
+
$header .= '<a href="' . $this->_post->url . '" target="_blank" style="word-break: break-word;">' . urldecode($this->_post->url) . '</a>';
|
57 |
$header .= '</li>';
|
58 |
|
59 |
if (isset($this->_post->ID)) {
|
models/focuspages/Nofollow.php
CHANGED
@@ -20,31 +20,24 @@ class SQ_Models_Focuspages_Nofollow extends SQ_Models_Abstract_Assistant {
|
|
20 |
|
21 |
$this->_permalink = (isset($this->_post->url) && $this->_post->url <> '' ? $this->_post->url : $this->_audit->permalink);
|
22 |
|
23 |
-
|
24 |
-
// $nofollow_links = json_decode($this->_audit->data->sq_seo_body->links_no_follow, true);
|
25 |
-
//
|
26 |
-
// if(!empty($nofollow_links)) {
|
27 |
-
// foreach ($nofollow_links as $link) {
|
28 |
-
// if (parse_url($link, PHP_URL_HOST)) {
|
29 |
-
// if (parse_url($link, PHP_URL_HOST) <> parse_url($this->_permalink, PHP_URL_HOST)) {
|
30 |
-
// $this->_nofollow_links[] = $link;
|
31 |
-
// }
|
32 |
-
// }
|
33 |
-
// }
|
34 |
-
// }
|
35 |
-
// }
|
36 |
if (isset($this->_audit->data->sq_seo_body->links_do_follow)) {
|
37 |
$dofollow_links = json_decode($this->_audit->data->sq_seo_body->links_do_follow, true);
|
38 |
|
39 |
-
if(!empty($dofollow_links)) {
|
40 |
foreach ($dofollow_links as $link) {
|
41 |
-
if (parse_url($link, PHP_URL_HOST)) {
|
42 |
-
|
|
|
|
|
|
|
|
|
43 |
$this->_dofollow_links[] = $link;
|
44 |
}
|
45 |
}
|
46 |
}
|
47 |
}
|
|
|
48 |
}
|
49 |
|
50 |
}
|
@@ -55,7 +48,7 @@ class SQ_Models_Focuspages_Nofollow extends SQ_Models_Abstract_Assistant {
|
|
55 |
$this->_tasks[$this->_category] = array(
|
56 |
'externallinks' => array(
|
57 |
'title' => __("Maintain authority", _SQ_PLUGIN_NAME_),
|
58 |
-
'value' => ($this->_dofollow_links && !empty($this->_dofollow_links) ? '<br />' . __("External Links", _SQ_PLUGIN_NAME_) . ':<br />' .
|
59 |
'penalty' => 5,
|
60 |
'description' => sprintf(__("TLDR: All outbound links need to have no-follow attribute. %s You've worked hard on your Focus Page. %s Now make sure that you're not letting that hard work go to waste, by sending out all your authority and Link Juice over to other pages from the web. %s The Focus Page needs to be the final page that Google Follows. It's an \"All Roads Lead to Rome\" kind of scenario. %s If you want your focus pages to get ranked better and have authority make sure that ALL outbound links have a no-follow attribute attached to them.", _SQ_PLUGIN_NAME_), '<br /><br />', '<br /><br />', '<br /><br />', '<br /><br />'),
|
61 |
),
|
@@ -70,22 +63,25 @@ class SQ_Models_Focuspages_Nofollow extends SQ_Models_Abstract_Assistant {
|
|
70 |
public function getHeader() {
|
71 |
$header = '<li class="completed">';
|
72 |
$header .= '<div class="font-weight-bold text-black-50 mb-1">' . __('Current URL', _SQ_PLUGIN_NAME_) . ': </div>';
|
73 |
-
$header .= '<a href="' . $this->_post->url . '" target="_blank" style="word-break: break-word;">' . $this->_post->url . '</a>';
|
74 |
$header .= '</li>';
|
75 |
|
76 |
return $header;
|
77 |
}
|
|
|
78 |
/*********************************************/
|
79 |
|
80 |
public function checkExternallinks($task) {
|
81 |
-
if($this->
|
82 |
-
if (
|
|
|
|
|
83 |
$task['completed'] = false;
|
84 |
-
return $task;
|
85 |
}
|
|
|
86 |
}
|
87 |
|
88 |
-
|
89 |
return $task;
|
90 |
}
|
91 |
|
20 |
|
21 |
$this->_permalink = (isset($this->_post->url) && $this->_post->url <> '' ? $this->_post->url : $this->_audit->permalink);
|
22 |
|
23 |
+
$this->_dofollow_links = array();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
24 |
if (isset($this->_audit->data->sq_seo_body->links_do_follow)) {
|
25 |
$dofollow_links = json_decode($this->_audit->data->sq_seo_body->links_do_follow, true);
|
26 |
|
27 |
+
if (!empty($dofollow_links)) {
|
28 |
foreach ($dofollow_links as $link) {
|
29 |
+
if (parse_url($link, PHP_URL_HOST) && parse_url(home_url(), PHP_URL_HOST)) {
|
30 |
+
$link = str_replace('www.', '', @parse_url($link, PHP_URL_HOST));
|
31 |
+
$hlink = str_replace('www.', '', @parse_url(home_url(), PHP_URL_HOST));
|
32 |
+
$slink = str_replace('www.', '', @parse_url(site_url(), PHP_URL_HOST));
|
33 |
+
|
34 |
+
if ($link <> $hlink && $link <> $slink) {
|
35 |
$this->_dofollow_links[] = $link;
|
36 |
}
|
37 |
}
|
38 |
}
|
39 |
}
|
40 |
+
|
41 |
}
|
42 |
|
43 |
}
|
48 |
$this->_tasks[$this->_category] = array(
|
49 |
'externallinks' => array(
|
50 |
'title' => __("Maintain authority", _SQ_PLUGIN_NAME_),
|
51 |
+
'value' => ($this->_dofollow_links && !empty($this->_dofollow_links) ? '<br />' . __("External Dofollow Links", _SQ_PLUGIN_NAME_) . ':<br />' . join('<br />', array_slice(array_unique((array)$this->_dofollow_links), 0, 50)) : __("No dofollow external links", _SQ_PLUGIN_NAME_)),
|
52 |
'penalty' => 5,
|
53 |
'description' => sprintf(__("TLDR: All outbound links need to have no-follow attribute. %s You've worked hard on your Focus Page. %s Now make sure that you're not letting that hard work go to waste, by sending out all your authority and Link Juice over to other pages from the web. %s The Focus Page needs to be the final page that Google Follows. It's an \"All Roads Lead to Rome\" kind of scenario. %s If you want your focus pages to get ranked better and have authority make sure that ALL outbound links have a no-follow attribute attached to them.", _SQ_PLUGIN_NAME_), '<br /><br />', '<br /><br />', '<br /><br />', '<br /><br />'),
|
54 |
),
|
63 |
public function getHeader() {
|
64 |
$header = '<li class="completed">';
|
65 |
$header .= '<div class="font-weight-bold text-black-50 mb-1">' . __('Current URL', _SQ_PLUGIN_NAME_) . ': </div>';
|
66 |
+
$header .= '<a href="' . $this->_post->url . '" target="_blank" style="word-break: break-word;">' . urldecode($this->_post->url) . '</a>';
|
67 |
$header .= '</li>';
|
68 |
|
69 |
return $header;
|
70 |
}
|
71 |
+
|
72 |
/*********************************************/
|
73 |
|
74 |
public function checkExternallinks($task) {
|
75 |
+
if (is_array($this->_dofollow_links)) {
|
76 |
+
if (empty($this->_dofollow_links)) {
|
77 |
+
$task['completed'] = true;
|
78 |
+
} else {
|
79 |
$task['completed'] = false;
|
|
|
80 |
}
|
81 |
+
return $task;
|
82 |
}
|
83 |
|
84 |
+
//$task['error'] = true;
|
85 |
return $task;
|
86 |
}
|
87 |
|
models/focuspages/Onpage.php
CHANGED
@@ -76,7 +76,7 @@ class SQ_Models_Focuspages_Onpage extends SQ_Models_Abstract_Assistant {
|
|
76 |
public function getHeader() {
|
77 |
$header = '<li class="completed">';
|
78 |
$header .= '<div class="font-weight-bold text-black-50 mb-1">' . __('Current URL', _SQ_PLUGIN_NAME_) . ': </div>';
|
79 |
-
$header .= '<a href="' . $this->_post->url . '" target="_blank" style="word-break: break-word;">' . $this->_post->url . '</a>';
|
80 |
$header .= '</li>';
|
81 |
|
82 |
$header .= '<li class="completed">
|
76 |
public function getHeader() {
|
77 |
$header = '<li class="completed">';
|
78 |
$header .= '<div class="font-weight-bold text-black-50 mb-1">' . __('Current URL', _SQ_PLUGIN_NAME_) . ': </div>';
|
79 |
+
$header .= '<a href="' . $this->_post->url . '" target="_blank" style="word-break: break-word;">' . urldecode($this->_post->url) . '</a>';
|
80 |
$header .= '</li>';
|
81 |
|
82 |
$header .= '<li class="completed">
|
models/focuspages/Ranking.php
CHANGED
@@ -33,7 +33,7 @@ class SQ_Models_Focuspages_Ranking extends SQ_Models_Abstract_Assistant {
|
|
33 |
public function getHeader() {
|
34 |
$header = '<li class="completed">';
|
35 |
$header .= '<div class="font-weight-bold text-black-50 mb-1">' . __('Current URL', _SQ_PLUGIN_NAME_) . ': </div>';
|
36 |
-
$header .= '<a href="' . $this->_post->url . '" target="_blank" style="word-break: break-word;">' . $this->_post->url . '</a>';
|
37 |
$header .= '</li>';
|
38 |
|
39 |
return $header;
|
33 |
public function getHeader() {
|
34 |
$header = '<li class="completed">';
|
35 |
$header .= '<div class="font-weight-bold text-black-50 mb-1">' . __('Current URL', _SQ_PLUGIN_NAME_) . ': </div>';
|
36 |
+
$header .= '<a href="' . $this->_post->url . '" target="_blank" style="word-break: break-word;">' . urldecode($this->_post->url) . '</a>';
|
37 |
$header .= '</li>';
|
38 |
|
39 |
return $header;
|
models/focuspages/Snippet.php
CHANGED
@@ -121,7 +121,7 @@ class SQ_Models_Focuspages_Snippet extends SQ_Models_Abstract_Assistant {
|
|
121 |
|
122 |
$header = '<li class="completed">';
|
123 |
$header .= '<div class="font-weight-bold text-black-50 mb-1">' . __('Current URL', _SQ_PLUGIN_NAME_) . ': </div>';
|
124 |
-
$header .= '<a href="' . $this->_post->url . '" target="_blank" style="word-break: break-word;">' . $this->_post->url . '</a>';
|
125 |
$header .= '</li>';
|
126 |
|
127 |
$header .= '<li class="completed">';
|
121 |
|
122 |
$header = '<li class="completed">';
|
123 |
$header .= '<div class="font-weight-bold text-black-50 mb-1">' . __('Current URL', _SQ_PLUGIN_NAME_) . ': </div>';
|
124 |
+
$header .= '<a href="' . $this->_post->url . '" target="_blank" style="word-break: break-word;">' . urldecode($this->_post->url) . '</a>';
|
125 |
$header .= '</li>';
|
126 |
|
127 |
$header .= '<li class="completed">';
|
models/focuspages/Social.php
CHANGED
@@ -54,7 +54,7 @@ class SQ_Models_Focuspages_Social extends SQ_Models_Abstract_Assistant {
|
|
54 |
public function getHeader() {
|
55 |
$header = '<li class="completed">';
|
56 |
$header .= '<div class="font-weight-bold text-black-50 mb-1">' . __('Current URL', _SQ_PLUGIN_NAME_) . ': </div>';
|
57 |
-
$header .= '<a href="' . $this->_post->url . '" target="_blank" style="word-break: break-word;">' . $this->_post->url . '</a>';
|
58 |
$header .= '</li>';
|
59 |
|
60 |
$header .= '<li class="completed">
|
54 |
public function getHeader() {
|
55 |
$header = '<li class="completed">';
|
56 |
$header .= '<div class="font-weight-bold text-black-50 mb-1">' . __('Current URL', _SQ_PLUGIN_NAME_) . ': </div>';
|
57 |
+
$header .= '<a href="' . $this->_post->url . '" target="_blank" style="word-break: break-word;">' . urldecode($this->_post->url) . '</a>';
|
58 |
$header .= '</li>';
|
59 |
|
60 |
$header .= '<li class="completed">
|
models/focuspages/Strategy.php
CHANGED
@@ -85,7 +85,7 @@ class SQ_Models_Focuspages_Strategy extends SQ_Models_Abstract_Assistant {
|
|
85 |
public function getHeader() {
|
86 |
$header = '<li class="completed">';
|
87 |
$header .= '<div class="font-weight-bold text-black-50 mb-1">' . __('Current URL', _SQ_PLUGIN_NAME_) . ': </div>';
|
88 |
-
$header .= '<a href="' . $this->_post->url . '" target="_blank" style="word-break: break-word;">' . $this->_post->url . '</a>';
|
89 |
$header .= '</li>';
|
90 |
|
91 |
$header .= '<li class="completed">';
|
85 |
public function getHeader() {
|
86 |
$header = '<li class="completed">';
|
87 |
$header .= '<div class="font-weight-bold text-black-50 mb-1">' . __('Current URL', _SQ_PLUGIN_NAME_) . ': </div>';
|
88 |
+
$header .= '<a href="' . $this->_post->url . '" target="_blank" style="word-break: break-word;">' . urldecode($this->_post->url) . '</a>';
|
89 |
$header .= '</li>';
|
90 |
|
91 |
$header .= '<li class="completed">';
|
models/focuspages/Traffic.php
CHANGED
@@ -12,7 +12,7 @@ class SQ_Models_Focuspages_Traffic extends SQ_Models_Abstract_Assistant {
|
|
12 |
protected $_gacode_duplicate = false;
|
13 |
|
14 |
const BOUNCE_MAXVAL = 50;
|
15 |
-
const AVGTIME_MINVAL =
|
16 |
const EXIT_MAXVAL = 70;
|
17 |
const VISITS_MINVAL = 70;
|
18 |
|
@@ -39,6 +39,7 @@ class SQ_Models_Focuspages_Traffic extends SQ_Models_Abstract_Assistant {
|
|
39 |
}
|
40 |
if (isset($this->_audit->data->sq_analytics_google->page_time)) {
|
41 |
$this->_page_time = $this->_audit->data->sq_analytics_google->page_time;
|
|
|
42 |
}
|
43 |
}
|
44 |
|
@@ -57,10 +58,10 @@ class SQ_Models_Focuspages_Traffic extends SQ_Models_Abstract_Assistant {
|
|
57 |
'description' => sprintf(__('Make sure this number is below %s %s Why? %s A high bounce rate means that your users just click on your search listing, visit the page and then decide they\'ve seen enough and bounce off to another page on the web. %s This is, for Google, an indicator of the quality of the search result it displayed. And if many of your users bounce off your pages, it means (to Google) that your page is not worth displaying in search results, because it has low performance with the user groups it sends your way. %s Easy way to complete this task: give users pages to click and send them to other pages from your site.', _SQ_PLUGIN_NAME_), self::BOUNCE_MAXVAL . '%', '<br /><br />', '<br /><br />', '<br /><br />', '<br /><br />'),
|
58 |
),
|
59 |
'avgtime' => array(
|
60 |
-
'title' => sprintf(__("Time on page is %s minutes", _SQ_PLUGIN_NAME_),
|
61 |
-
'value' => ($this->_page_time > 0 ?
|
62 |
'penalty' => 10,
|
63 |
-
'description' => sprintf(__('Make sure that visitors spend on average at least %s minutes on your site. %s Get an average time on page of minimum %s minutes for this focus page. You can do this by editing the content and making it more appealing to visitors. %s In the Best Practices section you\'ll find a plugin for WordPress that will help your Google Analytics tracker to track the real time on page for people. Sometimes, Google Analytics tracks this lower than it should. %s If your visitors don\'t spend at 2 minutes on your Focus Page, it can mean that the page is not important enough for them, or that the content from the page is boring, or hard to read, or the page just loads too slow.', _SQ_PLUGIN_NAME_),
|
64 |
),
|
65 |
'visits' => array(
|
66 |
'title' => sprintf(__("%s visitors / day / page", _SQ_PLUGIN_NAME_), self::VISITS_MINVAL),
|
@@ -82,7 +83,7 @@ class SQ_Models_Focuspages_Traffic extends SQ_Models_Abstract_Assistant {
|
|
82 |
public function getHeader() {
|
83 |
$header = '<li class="completed">';
|
84 |
$header .= '<div class="font-weight-bold text-black-50 mb-1">' . __('Current URL', _SQ_PLUGIN_NAME_) . ': </div>';
|
85 |
-
$header .= '<a href="' . $this->_post->url . '" target="_blank" style="word-break: break-word;">' . $this->_post->url . '</a>';
|
86 |
$header .= '</li>';
|
87 |
|
88 |
if (!$this->_audit->sq_analytics_gsc_connected) {
|
12 |
protected $_gacode_duplicate = false;
|
13 |
|
14 |
const BOUNCE_MAXVAL = 50;
|
15 |
+
const AVGTIME_MINVAL = 2;
|
16 |
const EXIT_MAXVAL = 70;
|
17 |
const VISITS_MINVAL = 70;
|
18 |
|
39 |
}
|
40 |
if (isset($this->_audit->data->sq_analytics_google->page_time)) {
|
41 |
$this->_page_time = $this->_audit->data->sq_analytics_google->page_time;
|
42 |
+
$this->_page_time = number_format(($this->_page_time / 60), 0,'','');
|
43 |
}
|
44 |
}
|
45 |
|
58 |
'description' => sprintf(__('Make sure this number is below %s %s Why? %s A high bounce rate means that your users just click on your search listing, visit the page and then decide they\'ve seen enough and bounce off to another page on the web. %s This is, for Google, an indicator of the quality of the search result it displayed. And if many of your users bounce off your pages, it means (to Google) that your page is not worth displaying in search results, because it has low performance with the user groups it sends your way. %s Easy way to complete this task: give users pages to click and send them to other pages from your site.', _SQ_PLUGIN_NAME_), self::BOUNCE_MAXVAL . '%', '<br /><br />', '<br /><br />', '<br /><br />', '<br /><br />'),
|
59 |
),
|
60 |
'avgtime' => array(
|
61 |
+
'title' => sprintf(__("Time on page is %s minutes", _SQ_PLUGIN_NAME_), self::AVGTIME_MINVAL),
|
62 |
+
'value' => ($this->_page_time > 0 ? $this->_page_time : 0) . ' ' . __('minutes', _SQ_PLUGIN_NAME_),
|
63 |
'penalty' => 10,
|
64 |
+
'description' => sprintf(__('Make sure that visitors spend on average at least %s minutes on your site. %s Get an average time on page of minimum %s minutes for this focus page. You can do this by editing the content and making it more appealing to visitors. %s In the Best Practices section you\'ll find a plugin for WordPress that will help your Google Analytics tracker to track the real time on page for people. Sometimes, Google Analytics tracks this lower than it should. %s If your visitors don\'t spend at 2 minutes on your Focus Page, it can mean that the page is not important enough for them, or that the content from the page is boring, or hard to read, or the page just loads too slow.', _SQ_PLUGIN_NAME_), self::AVGTIME_MINVAL, self::AVGTIME_MINVAL, '<br /><br />', '<br /><br />', '<br /><br />'),
|
65 |
),
|
66 |
'visits' => array(
|
67 |
'title' => sprintf(__("%s visitors / day / page", _SQ_PLUGIN_NAME_), self::VISITS_MINVAL),
|
83 |
public function getHeader() {
|
84 |
$header = '<li class="completed">';
|
85 |
$header .= '<div class="font-weight-bold text-black-50 mb-1">' . __('Current URL', _SQ_PLUGIN_NAME_) . ': </div>';
|
86 |
+
$header .= '<a href="' . $this->_post->url . '" target="_blank" style="word-break: break-word;">' . urldecode($this->_post->url) . '</a>';
|
87 |
$header .= '</li>';
|
88 |
|
89 |
if (!$this->_audit->sq_analytics_gsc_connected) {
|
models/services/JsonLD.php
CHANGED
@@ -59,7 +59,7 @@ class SQ_Models_Services_JsonLD extends SQ_Models_Abstract_Seo {
|
|
59 |
return '<script type="application/ld+json">' . $this->_post->sq->jsonld . '</script>';
|
60 |
}
|
61 |
} else {
|
62 |
-
return '<script type="application/ld+json">' .
|
63 |
}
|
64 |
}
|
65 |
|
@@ -99,7 +99,7 @@ class SQ_Models_Services_JsonLD extends SQ_Models_Abstract_Seo {
|
|
99 |
* @return array
|
100 |
*/
|
101 |
public function get_data() {
|
102 |
-
return apply_filters('sq_json_ld_data'
|
103 |
}
|
104 |
|
105 |
|
59 |
return '<script type="application/ld+json">' . $this->_post->sq->jsonld . '</script>';
|
60 |
}
|
61 |
} else {
|
62 |
+
return '<script type="application/ld+json">' . json_encode($data, JSON_UNESCAPED_UNICODE) . '</script>';
|
63 |
}
|
64 |
}
|
65 |
|
99 |
* @return array
|
100 |
*/
|
101 |
public function get_data() {
|
102 |
+
return apply_filters('sq_json_ld_data', $this->_data);
|
103 |
}
|
104 |
|
105 |
|
readme.txt
CHANGED
@@ -504,6 +504,33 @@ Type a keyword to the right of the screen and start using Squirrly Seo. Enjoy!
|
|
504 |
Squirrly SEO 9.1.00 it's a big update. We've re-designed the UX and added many new features. If you don't want to change the current experience you have with Squirrly you can remain on the current stable version of Squirrly SEO.
|
505 |
|
506 |
== Changelog ==
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
507 |
= 9.1.19 - 07/08/2019 =
|
508 |
* Update - Added refresh button for Squirrly SEO Snippet on ajax error
|
509 |
* Fix - Canonical link verification on Focus Pages
|
504 |
Squirrly SEO 9.1.00 it's a big update. We've re-designed the UX and added many new features. If you don't want to change the current experience you have with Squirrly you can remain on the current stable version of Squirrly SEO.
|
505 |
|
506 |
== Changelog ==
|
507 |
+
= 9.2.00 - 08/06/2019 =
|
508 |
+
* Update - Present the main features in Tutorial
|
509 |
+
* Fix - Ignore the www. on external links in focus page > outbound links
|
510 |
+
* Fix - URL decode for arabic language in Bulk SEO and Focus Pages
|
511 |
+
* Fix - Focus Pages Nofollow to External Links
|
512 |
+
* Fix - Corrected Innner links in Focus Pages
|
513 |
+
* Fix - Fixed Squirrly SEO Buffer on shutdown
|
514 |
+
* Fix - Fixed CSS issues within the plugin
|
515 |
+
* Fix - Changed JSON-LD Type with JSON-LD Code in Squirrly SEO Snippet
|
516 |
+
* fix - Fix the bulkseo.js to load the correct assistant on tab change
|
517 |
+
|
518 |
+
= 9.1.21 - 07/22/2019 =
|
519 |
+
* Update - DEV KIT disconnect website process
|
520 |
+
* Update - Added rollback option to a previous stable version
|
521 |
+
* Fix - Post Save hook priority changed
|
522 |
+
* Fix - Fixed the Admin Bar CSS while in Squirrly SEO Settings
|
523 |
+
* Fix - Fixed Live Assistant optimization score for block editor
|
524 |
+
* Fix - Don't show the loading icon on SEO and Settings Backup Button
|
525 |
+
* Fix - Corrected the Post Editor font Open Sans import
|
526 |
+
|
527 |
+
= 9.1.20 - 07/22/2019 =
|
528 |
+
* Fix - import url('https://fonts.googleapis.com/css?family=Open + Sans') issue in snippet
|
529 |
+
* Fix - Fontawesome font size to be targeted to Squirrly divs
|
530 |
+
* Fix - Focus Pages average time taks to reflect the minimum time on site
|
531 |
+
* Fix - Send the correct post permalink to Squirrly Cloud
|
532 |
+
* Fix - Corrected the Post publish hook in Post Controller
|
533 |
+
|
534 |
= 9.1.19 - 07/08/2019 =
|
535 |
* Update - Added refresh button for Squirrly SEO Snippet on ajax error
|
536 |
* Fix - Canonical link verification on Focus Pages
|
squirrly.php
CHANGED
@@ -7,13 +7,14 @@
|
|
7 |
Plugin URI: https://www.squirrly.co
|
8 |
Description: SEO By Squirrly is for the NON-SEO experts. Get Excellent Seo with Better Content, Ranking and Analytics. For Both Humans and Search Bots.<BR> <a href="http://my.squirrly.co/user" target="_blank"><strong>Check your profile</strong></a>
|
9 |
Author: Squirrly SEO
|
10 |
-
Version: 9.
|
11 |
Author URI: https://www.squirrly.co
|
12 |
*/
|
13 |
-
if(!defined('SQ_VERSION')) {
|
14 |
/* SET THE CURRENT VERSION ABOVE AND BELOW */
|
15 |
-
define('SQ_VERSION', '9.
|
16 |
-
|
|
|
17 |
// Call config files
|
18 |
try {
|
19 |
require_once(dirname(__FILE__) . '/config/config.php');
|
7 |
Plugin URI: https://www.squirrly.co
|
8 |
Description: SEO By Squirrly is for the NON-SEO experts. Get Excellent Seo with Better Content, Ranking and Analytics. For Both Humans and Search Bots.<BR> <a href="http://my.squirrly.co/user" target="_blank"><strong>Check your profile</strong></a>
|
9 |
Author: Squirrly SEO
|
10 |
+
Version: 9.2.00
|
11 |
Author URI: https://www.squirrly.co
|
12 |
*/
|
13 |
+
if (!defined('SQ_VERSION')) {
|
14 |
/* SET THE CURRENT VERSION ABOVE AND BELOW */
|
15 |
+
define('SQ_VERSION', '9.2.00');
|
16 |
+
//The last stable version
|
17 |
+
define('SQ_STABLE_VERSION', '9.1.19');
|
18 |
// Call config files
|
19 |
try {
|
20 |
require_once(dirname(__FILE__) . '/config/config.php');
|
view/Audits/Audits.php
CHANGED
@@ -4,7 +4,7 @@
|
|
4 |
<div class="d-flex flex-row my-0 bg-white" style="clear: both !important;">
|
5 |
<?php
|
6 |
if (!current_user_can('sq_manage_focuspages')) {
|
7 |
-
echo '<div class="col-sm-12 alert alert-success text-center m-0 p-3">'. __("You do not have permission to access this page. You need Squirrly SEO Admin role", _SQ_PLUGIN_NAME_).'</div>';
|
8 |
return;
|
9 |
}
|
10 |
?>
|
@@ -93,7 +93,7 @@
|
|
93 |
$last_audit = array_reverse($view->audits);
|
94 |
$last_audit = end($last_audit);
|
95 |
|
96 |
-
echo '<a class="btn btn-primary btn-lg ml-2
|
97 |
|
98 |
}
|
99 |
?>
|
@@ -138,12 +138,9 @@
|
|
138 |
?>
|
139 |
</div>
|
140 |
</div>
|
141 |
-
<div class="card-footer
|
142 |
-
<div class="col-sm-8">
|
143 |
-
|
144 |
-
</div>
|
145 |
-
<div class="col-sm-3 text-right pl-4 pr-0">
|
146 |
-
</div>
|
147 |
</div>
|
148 |
</div>
|
149 |
|
@@ -223,8 +220,8 @@
|
|
223 |
<h4 class="text-center"><?php echo __('Welcome to Squirrly SEO Audits'); ?></h4>
|
224 |
<h5 class="text-center"><?php echo __('The SEO Audit is generated once every week'); ?></h5>
|
225 |
<h6 class="text-center text-black-50 mt-3"><?php echo __('Until the audit is ready, try the Focus Pages section'); ?>:</h6>
|
226 |
-
<div class="row col-sm-12 my-4">
|
227 |
-
<div class="
|
228 |
<h6 onclick="location.href ='<?php echo SQ_Classes_Helpers_Tools::getAdminUrl('sq_focuspages', 'pagelist') ?>'" class="text-black-50 text-right">
|
229 |
<div style="float: right; cursor: pointer"><?php echo __('Go to Focus Pages'); ?></div>
|
230 |
<i class="sq_icons_small sq_focuspages_icon" style="float: right; width: 20px; cursor: pointer"></i>
|
4 |
<div class="d-flex flex-row my-0 bg-white" style="clear: both !important;">
|
5 |
<?php
|
6 |
if (!current_user_can('sq_manage_focuspages')) {
|
7 |
+
echo '<div class="col-sm-12 alert alert-success text-center m-0 p-3">' . __("You do not have permission to access this page. You need Squirrly SEO Admin role", _SQ_PLUGIN_NAME_) . '</div>';
|
8 |
return;
|
9 |
}
|
10 |
?>
|
93 |
$last_audit = array_reverse($view->audits);
|
94 |
$last_audit = end($last_audit);
|
95 |
|
96 |
+
echo '<a class="btn btn-primary btn-lg ml-2" href="' . SQ_Classes_RemoteController::getMySquirrlyLink('audits') . '" target="_blank">' . __('Go to all audit panel', _SQ_PLUGIN_NAME_) . '</a>';
|
97 |
|
98 |
}
|
99 |
?>
|
138 |
?>
|
139 |
</div>
|
140 |
</div>
|
141 |
+
<div class="card-footer">
|
142 |
+
<div class="col-sm-8"></div>
|
143 |
+
<div class="col-sm-3 text-right pl-4 pr-0"></div>
|
|
|
|
|
|
|
144 |
</div>
|
145 |
</div>
|
146 |
|
220 |
<h4 class="text-center"><?php echo __('Welcome to Squirrly SEO Audits'); ?></h4>
|
221 |
<h5 class="text-center"><?php echo __('The SEO Audit is generated once every week'); ?></h5>
|
222 |
<h6 class="text-center text-black-50 mt-3"><?php echo __('Until the audit is ready, try the Focus Pages section'); ?>:</h6>
|
223 |
+
<div class="row col-sm-12 my-4 text-center">
|
224 |
+
<div class="my-0 mx-auto justify-content-center text-center">
|
225 |
<h6 onclick="location.href ='<?php echo SQ_Classes_Helpers_Tools::getAdminUrl('sq_focuspages', 'pagelist') ?>'" class="text-black-50 text-right">
|
226 |
<div style="float: right; cursor: pointer"><?php echo __('Go to Focus Pages'); ?></div>
|
227 |
<i class="sq_icons_small sq_focuspages_icon" style="float: right; width: 20px; cursor: pointer"></i>
|
view/Blocks/Audits.php
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
<script type="text/javascript" src="//www.gstatic.com/charts/loader.js"></script>
|
2 |
<div id="sq_blockaudits" class="mt-5">
|
3 |
<div class="col-sm-12 my-4 ">
|
4 |
-
<div class="
|
5 |
<div class="sq_icons sq_audits_icon m-2"></div>
|
6 |
<h3 class="card-title"><?php _e('SEO Audit', _SQ_PLUGIN_NAME_); ?>:</h3>
|
7 |
<a href="<?php echo SQ_Classes_Helpers_Tools::getAdminUrl('sq_audits') ?>" class="btn btn-primary m-2" style="max-height: 35px;"><?php _e('See Audits', _SQ_PLUGIN_NAME_) ?></a>
|
@@ -10,7 +10,7 @@
|
|
10 |
</div>
|
11 |
<?php if (isset($view->audits) && !empty($view->audits)) { ?>
|
12 |
<div class="card-group mb-5">
|
13 |
-
<div class="card mr-0 pb-0 bg-light col-sm-
|
14 |
<div class="card-body">
|
15 |
<h4 class="card-title"><?php _e('Audits Score', _SQ_PLUGIN_NAME_) ?></h4>
|
16 |
<p class="card-subtitle my-1 text-warning"><?php _e('last 4 audits', _SQ_PLUGIN_NAME_) ?></p>
|
@@ -35,8 +35,8 @@
|
|
35 |
$chart[$key + 1][2] = (int)$audit->moz;
|
36 |
}
|
37 |
echo '
|
38 |
-
<div class="
|
39 |
-
<div id="sq_chart_audit" class="sq_chart no-p" style="width:
|
40 |
</div>';
|
41 |
} else {
|
42 |
_e('No data yet', _SQ_PLUGIN_NAME_);
|
@@ -48,43 +48,21 @@
|
|
48 |
</div>
|
49 |
</div>
|
50 |
<div class="card-footer row">
|
51 |
-
<div class="col-sm-8">
|
52 |
-
|
53 |
-
</div>
|
54 |
<div class="col-sm-3 text-right pl-4 pr-0">
|
55 |
<a href="<?php echo SQ_Classes_Helpers_Tools::getAdminUrl('sq_audits') ?>" class="btn btn-primary" style="font-size: 11px; margin-left: 10px; color: white"><?php _e('See Audits', _SQ_PLUGIN_NAME_) ?></a>
|
56 |
</div>
|
57 |
</div>
|
58 |
</div>
|
59 |
-
|
60 |
-
<?php $last_audit = $view->audits[0]; ?>
|
61 |
-
<div class="card-body">
|
62 |
-
<h4 class="card-title"><?php _e('Tasks', _SQ_PLUGIN_NAME_) ?></h4>
|
63 |
-
<p class="card-subtitle my-1 text-warning"><?php echo __('last issues found', _SQ_PLUGIN_NAME_) ?></p>
|
64 |
-
<div class="card-text" style="max-height: 290px;overflow: hidden; overflow-y: auto;">
|
65 |
-
<table class="table mt-2">
|
66 |
-
<tbody> <?php
|
67 |
-
foreach ($last_audit->tasks as $task) { ?>
|
68 |
-
<tr>
|
69 |
-
<td><?php echo $task ?></td>
|
70 |
-
</tr>
|
71 |
-
<?php } ?>
|
72 |
-
</tbody>
|
73 |
-
</table>
|
74 |
-
</div>
|
75 |
-
</div>
|
76 |
-
<div class="card-footer">
|
77 |
-
<small><?php echo __('Update on', _SQ_PLUGIN_NAME_) . ': ' . date(get_option('date_format'), strtotime($last_audit->datetime)) ?></small>
|
78 |
-
</div>
|
79 |
-
</div>
|
80 |
</div>
|
81 |
<?php } else { ?>
|
82 |
<div class="card mr-2 bg-light col-sm-12">
|
83 |
<div class="card-body">
|
84 |
<h5 class="text-center"><?php echo __('The SEO Audit is generated once every week'); ?></h5>
|
85 |
<h6 class="text-center text-black-50 mt-3"><?php echo __('Until the audit is ready, try the Focus Pages section'); ?>:</h6>
|
86 |
-
<div class="row col-sm-12 my-4">
|
87 |
-
<div class="
|
88 |
<h6 onclick="location.href ='<?php echo SQ_Classes_Helpers_Tools::getAdminUrl('sq_focuspages', 'pagelist') ?>'" class="text-black-50 text-right">
|
89 |
<div style="float: right; cursor: pointer"><?php echo __('Go to Focus Pages'); ?></div>
|
90 |
<i class="sq_icons_small sq_focuspages_icon" style="float: right; width: 20px; cursor: pointer"></i>
|
1 |
<script type="text/javascript" src="//www.gstatic.com/charts/loader.js"></script>
|
2 |
<div id="sq_blockaudits" class="mt-5">
|
3 |
<div class="col-sm-12 my-4 ">
|
4 |
+
<div class="row text-left m-0 p-0">
|
5 |
<div class="sq_icons sq_audits_icon m-2"></div>
|
6 |
<h3 class="card-title"><?php _e('SEO Audit', _SQ_PLUGIN_NAME_); ?>:</h3>
|
7 |
<a href="<?php echo SQ_Classes_Helpers_Tools::getAdminUrl('sq_audits') ?>" class="btn btn-primary m-2" style="max-height: 35px;"><?php _e('See Audits', _SQ_PLUGIN_NAME_) ?></a>
|
10 |
</div>
|
11 |
<?php if (isset($view->audits) && !empty($view->audits)) { ?>
|
12 |
<div class="card-group mb-5">
|
13 |
+
<div class="card mr-0 pb-0 bg-light col-sm-12">
|
14 |
<div class="card-body">
|
15 |
<h4 class="card-title"><?php _e('Audits Score', _SQ_PLUGIN_NAME_) ?></h4>
|
16 |
<p class="card-subtitle my-1 text-warning"><?php _e('last 4 audits', _SQ_PLUGIN_NAME_) ?></p>
|
35 |
$chart[$key + 1][2] = (int)$audit->moz;
|
36 |
}
|
37 |
echo '
|
38 |
+
<div class="text-center" style="padding: 2px 0; border-left: 1px solid #eee; border-bottom: 1px solid #eee;">
|
39 |
+
<div id="sq_chart_audit" class="sq_chart no-p" style="width: 600px; height: 300px; margin: auto;"></div><script>var sq_chart_val = drawChart("sq_chart_audit", ' . json_encode($chart) . ' ,true); </script>
|
40 |
</div>';
|
41 |
} else {
|
42 |
_e('No data yet', _SQ_PLUGIN_NAME_);
|
48 |
</div>
|
49 |
</div>
|
50 |
<div class="card-footer row">
|
51 |
+
<div class="col-sm-8"></div>
|
|
|
|
|
52 |
<div class="col-sm-3 text-right pl-4 pr-0">
|
53 |
<a href="<?php echo SQ_Classes_Helpers_Tools::getAdminUrl('sq_audits') ?>" class="btn btn-primary" style="font-size: 11px; margin-left: 10px; color: white"><?php _e('See Audits', _SQ_PLUGIN_NAME_) ?></a>
|
54 |
</div>
|
55 |
</div>
|
56 |
</div>
|
57 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
58 |
</div>
|
59 |
<?php } else { ?>
|
60 |
<div class="card mr-2 bg-light col-sm-12">
|
61 |
<div class="card-body">
|
62 |
<h5 class="text-center"><?php echo __('The SEO Audit is generated once every week'); ?></h5>
|
63 |
<h6 class="text-center text-black-50 mt-3"><?php echo __('Until the audit is ready, try the Focus Pages section'); ?>:</h6>
|
64 |
+
<div class="row col-sm-12 my-4 text-center">
|
65 |
+
<div class="my-0 mx-auto justify-content-center text-center">
|
66 |
<h6 onclick="location.href ='<?php echo SQ_Classes_Helpers_Tools::getAdminUrl('sq_focuspages', 'pagelist') ?>'" class="text-black-50 text-right">
|
67 |
<div style="float: right; cursor: pointer"><?php echo __('Go to Focus Pages'); ?></div>
|
68 |
<i class="sq_icons_small sq_focuspages_icon" style="float: right; width: 20px; cursor: pointer"></i>
|
view/Blocks/FocusPages.php
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
<div id="sq_focuspages" class="mt-5">
|
2 |
<div class="col-sm-12 my-4">
|
3 |
<div class="col-sm-12 row my-4">
|
4 |
-
<div class="
|
5 |
<div class="sq_icons sq_krfound_icon m-2"></div>
|
6 |
<h3 class="card-title"><?php _e('Focus Pages', _SQ_PLUGIN_NAME_); ?>:</h3>
|
7 |
<a href="<?php echo SQ_Classes_Helpers_Tools::getAdminUrl('sq_focuspages') ?>" class="btn btn-primary m-2" style="max-height: 35px;"><?php _e('See Focus Pages', _SQ_PLUGIN_NAME_) ?></a>
|
1 |
<div id="sq_focuspages" class="mt-5">
|
2 |
<div class="col-sm-12 my-4">
|
3 |
<div class="col-sm-12 row my-4">
|
4 |
+
<div class="row text-left m-0 p-0">
|
5 |
<div class="sq_icons sq_krfound_icon m-2"></div>
|
6 |
<h3 class="card-title"><?php _e('Focus Pages', _SQ_PLUGIN_NAME_); ?>:</h3>
|
7 |
<a href="<?php echo SQ_Classes_Helpers_Tools::getAdminUrl('sq_focuspages') ?>" class="btn btn-primary m-2" style="max-height: 35px;"><?php _e('See Focus Pages', _SQ_PLUGIN_NAME_) ?></a>
|
view/Blocks/KRFound.php
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
<div id="sq_krfound" class="mt-5">
|
2 |
<div class="col-sm-12 my-4">
|
3 |
<div class="col-sm-12 row my-4">
|
4 |
-
<div class="
|
5 |
<div class="sq_icons sq_krfound_icon m-2"></div>
|
6 |
<h3 class="card-title"><?php _e('Suggested Keywords', _SQ_PLUGIN_NAME_); ?>:</h3>
|
7 |
</div>
|
@@ -96,8 +96,8 @@
|
|
96 |
<h5 class="text-center"><?php echo __('Once a week, Squirrly checks all the keywords from your briefcase.'); ?></h5>
|
97 |
<h5 class="text-center"><?php echo __('If it finds better keywords, they will be listed here'); ?></h5>
|
98 |
<h6 class="text-center text-black-50 mt-3"><?php echo __('Until then, add keywords in Briefcase'); ?>:</h6>
|
99 |
-
<div class="row col-sm-12 my-4">
|
100 |
-
<div class="
|
101 |
<h6 onclick="location.href ='<?php echo SQ_Classes_Helpers_Tools::getAdminUrl('sq_research', 'briefcase') ?>'" class="text-black-50 text-right">
|
102 |
<div style="float: right; cursor: pointer"><?php echo __('Go to Briefcase'); ?></div>
|
103 |
<i class="sq_icons_small sq_briefcase_icon" style="float: right; width: 20px; cursor: pointer"></i>
|
1 |
<div id="sq_krfound" class="mt-5">
|
2 |
<div class="col-sm-12 my-4">
|
3 |
<div class="col-sm-12 row my-4">
|
4 |
+
<div class="row text-left m-0 p-0">
|
5 |
<div class="sq_icons sq_krfound_icon m-2"></div>
|
6 |
<h3 class="card-title"><?php _e('Suggested Keywords', _SQ_PLUGIN_NAME_); ?>:</h3>
|
7 |
</div>
|
96 |
<h5 class="text-center"><?php echo __('Once a week, Squirrly checks all the keywords from your briefcase.'); ?></h5>
|
97 |
<h5 class="text-center"><?php echo __('If it finds better keywords, they will be listed here'); ?></h5>
|
98 |
<h6 class="text-center text-black-50 mt-3"><?php echo __('Until then, add keywords in Briefcase'); ?>:</h6>
|
99 |
+
<div class="row col-sm-12 my-4 text-center">
|
100 |
+
<div class="my-0 mx-auto justify-content-center text-center">
|
101 |
<h6 onclick="location.href ='<?php echo SQ_Classes_Helpers_Tools::getAdminUrl('sq_research', 'briefcase') ?>'" class="text-black-50 text-right">
|
102 |
<div style="float: right; cursor: pointer"><?php echo __('Go to Briefcase'); ?></div>
|
103 |
<i class="sq_icons_small sq_briefcase_icon" style="float: right; width: 20px; cursor: pointer"></i>
|
view/Blocks/KRHistory.php
CHANGED
@@ -1,6 +1,6 @@
|
|
1 |
<div id="sq_kr" class="mt-5">
|
2 |
<div class="col-sm-12 my-4">
|
3 |
-
<div class="
|
4 |
<div class="sq_icons sq_kr_icon m-2"></div>
|
5 |
<h3 class="card-title"><?php _e('Keyword Research', _SQ_PLUGIN_NAME_); ?>:</h3>
|
6 |
<a href="<?php echo SQ_Classes_Helpers_Tools::getAdminUrl('sq_research', 'history') ?>" class="btn btn-primary m-2" style="max-height: 35px;"><?php _e('See Research History', _SQ_PLUGIN_NAME_) ?></a>
|
@@ -41,8 +41,8 @@
|
|
41 |
<div class="card mr-2 bg-light col-sm-12">
|
42 |
<div class="card-body">
|
43 |
<h5 class="text-center"><?php echo __('See your research results and compare them over time'); ?>:</h5>
|
44 |
-
<div class="row col-sm-12 my-4">
|
45 |
-
<div class="
|
46 |
<h6 onclick="location.href ='<?php echo SQ_Classes_Helpers_Tools::getAdminUrl('sq_research', 'research') ?>'" class="text-black-50 text-right">
|
47 |
<div style="float: right; cursor: pointer"><?php echo __('Do Keyword Research'); ?></div>
|
48 |
<i class="sq_icons_small sq_kr_icon" style="float: right; width: 20px; cursor: pointer"></i>
|
1 |
<div id="sq_kr" class="mt-5">
|
2 |
<div class="col-sm-12 my-4">
|
3 |
+
<div class="row text-left m-0 p-0">
|
4 |
<div class="sq_icons sq_kr_icon m-2"></div>
|
5 |
<h3 class="card-title"><?php _e('Keyword Research', _SQ_PLUGIN_NAME_); ?>:</h3>
|
6 |
<a href="<?php echo SQ_Classes_Helpers_Tools::getAdminUrl('sq_research', 'history') ?>" class="btn btn-primary m-2" style="max-height: 35px;"><?php _e('See Research History', _SQ_PLUGIN_NAME_) ?></a>
|
41 |
<div class="card mr-2 bg-light col-sm-12">
|
42 |
<div class="card-body">
|
43 |
<h5 class="text-center"><?php echo __('See your research results and compare them over time'); ?>:</h5>
|
44 |
+
<div class="row col-sm-12 my-4 text-center">
|
45 |
+
<div class="my-0 mx-auto justify-content-center text-center">
|
46 |
<h6 onclick="location.href ='<?php echo SQ_Classes_Helpers_Tools::getAdminUrl('sq_research', 'research') ?>'" class="text-black-50 text-right">
|
47 |
<div style="float: right; cursor: pointer"><?php echo __('Do Keyword Research'); ?></div>
|
48 |
<i class="sq_icons_small sq_kr_icon" style="float: right; width: 20px; cursor: pointer"></i>
|
view/Blocks/Ranks.php
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
<script type="text/javascript" src="//www.gstatic.com/charts/loader.js"></script>
|
2 |
<div id="sq_ranks" class="mt-5">
|
3 |
<div class="col-sm-12 my-4">
|
4 |
-
<div class="
|
5 |
<div class="sq_icons sq_ranks_icon m-2"></div>
|
6 |
<h3 class="card-title"><?php _e('Google Rankings', _SQ_PLUGIN_NAME_); ?>:</h3>
|
7 |
<a href="<?php echo SQ_Classes_Helpers_Tools::getAdminUrl('sq_rankings') ?>" class="btn btn-primary m-2" style="max-height: 35px;"><?php _e('See Rankings', _SQ_PLUGIN_NAME_) ?></a>
|
@@ -14,7 +14,7 @@
|
|
14 |
<?php if (isset($view->info) && !empty($view->info)) {
|
15 |
$info = $view->info;
|
16 |
?>
|
17 |
-
<div class="card mr-0 bg-light col-sm-
|
18 |
<div class="card-body">
|
19 |
<h4 class="card-title"><?php _e('Google Ranks', _SQ_PLUGIN_NAME_) ?></h4>
|
20 |
<p class="card-subtitle my-1 text-warning"><?php _e('last 7 days', _SQ_PLUGIN_NAME_) ?></p>
|
@@ -32,8 +32,8 @@
|
|
32 |
}
|
33 |
if (count($info->average) > 1) {
|
34 |
echo '
|
35 |
-
<div class="
|
36 |
-
<div id="sq_chart" class="sq_chart no-p" style="width:
|
37 |
</div>';
|
38 |
}
|
39 |
?>
|
@@ -92,28 +92,7 @@
|
|
92 |
</div>
|
93 |
</div>
|
94 |
<?php } ?>
|
95 |
-
|
96 |
-
<div class="card-body">
|
97 |
-
<h4 class="card-title"><?php _e('Keywords', _SQ_PLUGIN_NAME_) ?></h4>
|
98 |
-
<p class="card-subtitle my-1 text-warning"><?php echo count((array)$view->ranks) . ' ' . __('keywords found', _SQ_PLUGIN_NAME_) ?></p>
|
99 |
-
<div class="card-text" style="max-height: 290px;overflow: hidden; overflow-y: auto;">
|
100 |
-
<table class="table mt-2">
|
101 |
-
<tbody> <?php
|
102 |
-
$keywords = array();
|
103 |
-
foreach ($view->ranks as $rank) {
|
104 |
-
if (!in_array($rank->keyword, $keywords)) {
|
105 |
-
$keywords[] = $rank->keyword;
|
106 |
-
?>
|
107 |
-
<tr>
|
108 |
-
<td><?php echo $rank->keyword ?></td>
|
109 |
-
</tr>
|
110 |
-
<?php }
|
111 |
-
} ?>
|
112 |
-
</tbody>
|
113 |
-
</table>
|
114 |
-
</div>
|
115 |
-
</div>
|
116 |
-
</div>
|
117 |
</div>
|
118 |
<?php } else { ?>
|
119 |
<div class="card mr-2 bg-light col-sm-12">
|
1 |
<script type="text/javascript" src="//www.gstatic.com/charts/loader.js"></script>
|
2 |
<div id="sq_ranks" class="mt-5">
|
3 |
<div class="col-sm-12 my-4">
|
4 |
+
<div class="row text-left m-0 p-0">
|
5 |
<div class="sq_icons sq_ranks_icon m-2"></div>
|
6 |
<h3 class="card-title"><?php _e('Google Rankings', _SQ_PLUGIN_NAME_); ?>:</h3>
|
7 |
<a href="<?php echo SQ_Classes_Helpers_Tools::getAdminUrl('sq_rankings') ?>" class="btn btn-primary m-2" style="max-height: 35px;"><?php _e('See Rankings', _SQ_PLUGIN_NAME_) ?></a>
|
14 |
<?php if (isset($view->info) && !empty($view->info)) {
|
15 |
$info = $view->info;
|
16 |
?>
|
17 |
+
<div class="card mr-0 bg-light col-sm-12">
|
18 |
<div class="card-body">
|
19 |
<h4 class="card-title"><?php _e('Google Ranks', _SQ_PLUGIN_NAME_) ?></h4>
|
20 |
<p class="card-subtitle my-1 text-warning"><?php _e('last 7 days', _SQ_PLUGIN_NAME_) ?></p>
|
32 |
}
|
33 |
if (count($info->average) > 1) {
|
34 |
echo '
|
35 |
+
<div class="text-center" style="padding: 2px 0; border-left: 1px solid #eee; border-bottom: 1px solid #eee;">
|
36 |
+
<div id="sq_chart" class="sq_chart no-p" style="width: 600px; height: 260px; margin: auto;"></div><script>var sq_chart_val = drawChart("sq_chart", ' . json_encode($info->average) . ' ,true); </script>
|
37 |
</div>';
|
38 |
}
|
39 |
?>
|
92 |
</div>
|
93 |
</div>
|
94 |
<?php } ?>
|
95 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
96 |
</div>
|
97 |
<?php } else { ?>
|
98 |
<div class="card mr-2 bg-light col-sm-12">
|
view/Blocks/SEOIssues.php
CHANGED
@@ -1,6 +1,6 @@
|
|
1 |
<div id="sq_blockseoissues" class="mt-5">
|
2 |
<div class="col-sm-12 my-4">
|
3 |
-
<div class="
|
4 |
<div class="sq_icons sq_audit_icon m-2"></div>
|
5 |
<h3 class="card-title"><?php _e('SEO Issues', _SQ_PLUGIN_NAME_); ?>:</h3>
|
6 |
<form method="post" class="p-0 m-0">
|
@@ -88,8 +88,8 @@
|
|
88 |
<i class="fa fa-check align-middle text-success mx-2" style="font-size: 18px;"></i><?php echo __('No SEO major issues found in your website'); ?>
|
89 |
</h4>
|
90 |
<h6 class="text-center text-black-50 mt-3"><?php echo __('Now, check the SEO for each page using Bulk SEO'); ?>:</h6>
|
91 |
-
<div class="row col-sm-12 my-4">
|
92 |
-
<div class="
|
93 |
<h6 onclick="location.href ='<?php echo SQ_Classes_Helpers_Tools::getAdminUrl('sq_seosettings', 'bulkseo') ?>'" class="text-black-50 text-right">
|
94 |
<div style="float: right; cursor: pointer"><?php echo __('Go to Bulk SEO'); ?></div>
|
95 |
<i class="sq_icons_small sq_bulkseo_icon" style="float: right; width: 20px; cursor: pointer"></i>
|
1 |
<div id="sq_blockseoissues" class="mt-5">
|
2 |
<div class="col-sm-12 my-4">
|
3 |
+
<div class="row text-left m-0 p-0">
|
4 |
<div class="sq_icons sq_audit_icon m-2"></div>
|
5 |
<h3 class="card-title"><?php _e('SEO Issues', _SQ_PLUGIN_NAME_); ?>:</h3>
|
6 |
<form method="post" class="p-0 m-0">
|
88 |
<i class="fa fa-check align-middle text-success mx-2" style="font-size: 18px;"></i><?php echo __('No SEO major issues found in your website'); ?>
|
89 |
</h4>
|
90 |
<h6 class="text-center text-black-50 mt-3"><?php echo __('Now, check the SEO for each page using Bulk SEO'); ?>:</h6>
|
91 |
+
<div class="row col-sm-12 my-4 text-center">
|
92 |
+
<div class="my-0 mx-auto justify-content-center text-center">
|
93 |
<h6 onclick="location.href ='<?php echo SQ_Classes_Helpers_Tools::getAdminUrl('sq_seosettings', 'bulkseo') ?>'" class="text-black-50 text-right">
|
94 |
<div style="float: right; cursor: pointer"><?php echo __('Go to Bulk SEO'); ?></div>
|
95 |
<i class="sq_icons_small sq_bulkseo_icon" style="float: right; width: 20px; cursor: pointer"></i>
|
view/Blocks/Snippet.php
CHANGED
@@ -405,7 +405,7 @@ if (SQ_Classes_Helpers_Tools::getOption('sq_api') <> '') {
|
|
405 |
|