Version Description
- New: Option to disable the Test Schema button from admin bar
- Fix: Incorrect URL in footer
- Fix: Post list columns and SEO meta shown for non-public post types
- Fix: Add schema for video and audio files directly uploaded and inserted into post content
- Fix: Autolink linking to the page itself on custom post types
Download this release
Release Info
Developer | rickjc89 |
Plugin | SmartCrawl SEO |
Version | 2.8.1 |
Comparing to | |
See all releases |
Code changes from version 2.8.0 to 2.8.1
- changelog.txt +10 -0
- includes/admin/admin.php +4 -2
- includes/admin/metabox.php +7 -7
- includes/admin/settings/autolinks.php +62 -23
- includes/admin/settings/schema.php +2 -0
- includes/admin/settings/sitemap.php +3 -9
- includes/admin/templates/footer.php +1 -1
- includes/admin/templates/post-list/quick-edit-onpage.php +3 -0
- includes/admin/templates/schema/schema-section-advanced.php +0 -22
- includes/admin/templates/schema/schema-section-settings.php +49 -0
- includes/admin/templates/schema/schema-settings.php +16 -0
- includes/admin/templates/schema/schema-sidenav.php +4 -0
- includes/core/class-wds-controller-analysis.php +1 -5
- includes/core/class-wds-controller-media-schema-data.php +1 -3
- includes/core/class-wds-schema-value-helper.php +134 -18
- includes/core/core.php +10 -0
- includes/tools/class-wds-schema-printer.php +12 -2
- readme.txt +14 -272
- wpmu-dev-seo.php +2 -2
changelog.txt
CHANGED
@@ -1,6 +1,16 @@
|
|
1 |
Plugin Name: SmartCrawl SEO
|
2 |
|
3 |
Change Log:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4 |
----------------------------------------------------------------------
|
5 |
2.8.0 - 2020-09-07
|
6 |
----------------------------------------------------------------------
|
1 |
Plugin Name: SmartCrawl SEO
|
2 |
|
3 |
Change Log:
|
4 |
+
----------------------------------------------------------------------
|
5 |
+
|
6 |
+
2.8.1 - 2020-09-24
|
7 |
+
----------------------------------------------------------------------
|
8 |
+
- Add: Option to disable the Test Schema button from admin bar
|
9 |
+
- Fix: Incorrect URL in footer
|
10 |
+
- Fix: Post list columns and SEO meta shown for non-public post types
|
11 |
+
- Fix: Add schema for video and audio files directly uploaded and inserted into post content
|
12 |
+
- Fix: Autolink linking to the page itself on custom post types
|
13 |
+
|
14 |
----------------------------------------------------------------------
|
15 |
2.8.0 - 2020-09-07
|
16 |
----------------------------------------------------------------------
|
includes/admin/admin.php
CHANGED
@@ -269,8 +269,10 @@ class Smartcrawl_Admin extends Smartcrawl_Base_Controller {
|
|
269 |
if ( is_multisite() ) {
|
270 |
$is_sitewide = smartcrawl_is_switch_active( 'SMARTCRAWL_SITEWIDE' );
|
271 |
|
272 |
-
return (
|
273 |
-
|
|
|
|
|
274 |
}
|
275 |
|
276 |
return true;
|
269 |
if ( is_multisite() ) {
|
270 |
$is_sitewide = smartcrawl_is_switch_active( 'SMARTCRAWL_SITEWIDE' );
|
271 |
|
272 |
+
return (
|
273 |
+
( $is_sitewide && is_network_admin() ) ||
|
274 |
+
( ! $is_sitewide && ! is_network_admin() )
|
275 |
+
) && Smartcrawl_Settings_Admin::is_tab_allowed( $slug );
|
276 |
}
|
277 |
|
278 |
return true;
|
includes/admin/metabox.php
CHANGED
@@ -203,19 +203,19 @@ class Smartcrawl_Metabox extends Smartcrawl_Base_Controller {
|
|
203 |
}
|
204 |
|
205 |
public function init_post_columns() {
|
206 |
-
foreach (
|
207 |
-
get_post_types( array(
|
208 |
-
'public' => true,
|
209 |
-
'show_ui' => true,
|
210 |
-
) ) as $type
|
211 |
-
) {
|
212 |
add_filter( "manage_{$type}_posts_columns", array( $this, 'smartcrawl_meta_column_heading' ), 20 );
|
213 |
add_action( "manage_{$type}_posts_custom_column", array( $this, 'smartcrawl_meta_column_content' ), 20, 2 );
|
214 |
}
|
215 |
}
|
216 |
|
217 |
public function post_row_actions( $actions, $post ) {
|
218 |
-
|
|
|
|
|
|
|
|
|
|
|
219 |
Smartcrawl_Simple_Renderer::render( 'post-list/meta-details', array(
|
220 |
'post' => $post,
|
221 |
) );
|
203 |
}
|
204 |
|
205 |
public function init_post_columns() {
|
206 |
+
foreach ( smartcrawl_frontend_post_types() as $type ) {
|
|
|
|
|
|
|
|
|
|
|
207 |
add_filter( "manage_{$type}_posts_columns", array( $this, 'smartcrawl_meta_column_heading' ), 20 );
|
208 |
add_action( "manage_{$type}_posts_custom_column", array( $this, 'smartcrawl_meta_column_content' ), 20, 2 );
|
209 |
}
|
210 |
}
|
211 |
|
212 |
public function post_row_actions( $actions, $post ) {
|
213 |
+
$onpage_active = Smartcrawl_Settings::get_setting( 'onpage' );
|
214 |
+
if (
|
215 |
+
$onpage_active
|
216 |
+
&& ! empty( $actions )
|
217 |
+
&& in_array( $post->post_type, smartcrawl_frontend_post_types() )
|
218 |
+
) {
|
219 |
Smartcrawl_Simple_Renderer::render( 'post-list/meta-details', array(
|
220 |
'post' => $post,
|
221 |
) );
|
includes/admin/settings/autolinks.php
CHANGED
@@ -475,33 +475,13 @@ class Smartcrawl_Autolinks_Settings extends Smartcrawl_Settings_Admin {
|
|
475 |
parent::options_page();
|
476 |
|
477 |
$smartcrawl_options = Smartcrawl_Settings::get_options();
|
478 |
-
$arguments = array(
|
479 |
-
'insert' => array(),
|
480 |
-
);
|
481 |
-
|
482 |
-
$post_types = array();
|
483 |
-
foreach ( self::get_post_types() as $post_type => $pt ) {
|
484 |
-
$key = strtolower( $pt->name );
|
485 |
-
$post_types["l{$key}"] = $pt->labels->name;
|
486 |
-
|
487 |
-
$arguments['insert']["{$key}"] = $pt->labels->name;
|
488 |
-
}
|
489 |
-
|
490 |
-
$taxonomies = array();
|
491 |
-
foreach ( get_taxonomies() as $taxonomy ) {
|
492 |
-
if ( ! in_array( $taxonomy, array( 'nav_menu', 'link_category', 'post_format' ), true ) ) {
|
493 |
-
$tax = get_taxonomy( $taxonomy );
|
494 |
-
$key = strtolower( $tax->labels->name );
|
495 |
-
|
496 |
-
$taxonomies["l{$key}"] = $tax->labels->name;
|
497 |
-
}
|
498 |
-
}
|
499 |
$redirection_model = new Smartcrawl_Model_Redirection();
|
500 |
$arguments['redirections'] = $redirection_model->get_all_redirections();
|
501 |
$arguments['redirection_types'] = $redirection_model->get_all_redirection_types();
|
502 |
|
503 |
-
$arguments['linkto'] =
|
504 |
-
$arguments['insert']
|
505 |
|
506 |
$arguments['active_tab'] = $this->_get_active_tab( 'tab_automatic_linking' );
|
507 |
|
@@ -565,5 +545,64 @@ class Smartcrawl_Autolinks_Settings extends Smartcrawl_Settings_Admin {
|
|
565 |
private function get_request_data() {
|
566 |
return isset( $_POST['_wds_nonce'] ) && wp_verify_nonce( $_POST['_wds_nonce'], 'wds-autolinks-nonce' ) ? $_POST : array();
|
567 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
568 |
}
|
569 |
|
475 |
parent::options_page();
|
476 |
|
477 |
$smartcrawl_options = Smartcrawl_Settings::get_options();
|
478 |
+
$arguments = array();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
479 |
$redirection_model = new Smartcrawl_Model_Redirection();
|
480 |
$arguments['redirections'] = $redirection_model->get_all_redirections();
|
481 |
$arguments['redirection_types'] = $redirection_model->get_all_redirection_types();
|
482 |
|
483 |
+
$arguments['linkto'] = $this->get_linkto_keys();
|
484 |
+
$arguments['insert'] = $this->get_insert_keys();
|
485 |
|
486 |
$arguments['active_tab'] = $this->_get_active_tab( 'tab_automatic_linking' );
|
487 |
|
545 |
private function get_request_data() {
|
546 |
return isset( $_POST['_wds_nonce'] ) && wp_verify_nonce( $_POST['_wds_nonce'], 'wds-autolinks-nonce' ) ? $_POST : array();
|
547 |
}
|
548 |
+
|
549 |
+
public function get_insert_options() {
|
550 |
+
$options = Smartcrawl_Settings::get_component_options( self::COMP_AUTOLINKS );
|
551 |
+
$result = array();
|
552 |
+
foreach ( $this->get_insert_keys() as $key => $label ) {
|
553 |
+
$result[ $key ] = array(
|
554 |
+
'label' => $label,
|
555 |
+
'value' => empty( $options[ $key ] ) ? false : true,
|
556 |
+
);
|
557 |
+
}
|
558 |
+
|
559 |
+
return $result;
|
560 |
+
}
|
561 |
+
|
562 |
+
private function get_insert_keys() {
|
563 |
+
foreach ( self::get_post_types() as $post_type => $pt ) {
|
564 |
+
$key = strtolower( $pt->name );
|
565 |
+
|
566 |
+
$insert["{$key}"] = $pt->labels->name;
|
567 |
+
}
|
568 |
+
$insert['comment'] = __( 'Comments', 'wds' );
|
569 |
+
|
570 |
+
return $insert;
|
571 |
+
}
|
572 |
+
|
573 |
+
public function get_linkto_options() {
|
574 |
+
$options = Smartcrawl_Settings::get_component_options( self::COMP_AUTOLINKS );
|
575 |
+
$result = array();
|
576 |
+
|
577 |
+
foreach ( $this->get_linkto_keys() as $key => $label ) {
|
578 |
+
$result[ $key ] = array(
|
579 |
+
'label' => $label,
|
580 |
+
'value' => empty( $options[ $key ] ) ? false : true,
|
581 |
+
);
|
582 |
+
}
|
583 |
+
|
584 |
+
return $result;
|
585 |
+
}
|
586 |
+
|
587 |
+
private function get_linkto_keys() {
|
588 |
+
$post_types = array();
|
589 |
+
foreach ( self::get_post_types() as $post_type => $pt ) {
|
590 |
+
$key = strtolower( $pt->name );
|
591 |
+
$post_types["l{$key}"] = $pt->labels->name;
|
592 |
+
}
|
593 |
+
|
594 |
+
$taxonomies = array();
|
595 |
+
foreach ( get_taxonomies() as $taxonomy ) {
|
596 |
+
if ( ! in_array( $taxonomy, array( 'nav_menu', 'link_category', 'post_format' ), true ) ) {
|
597 |
+
$tax = get_taxonomy( $taxonomy );
|
598 |
+
$key = strtolower( $tax->labels->name );
|
599 |
+
|
600 |
+
$taxonomies["l{$key}"] = $tax->labels->name;
|
601 |
+
}
|
602 |
+
}
|
603 |
+
|
604 |
+
return array_merge( $post_types, $taxonomies );
|
605 |
+
}
|
606 |
+
|
607 |
}
|
608 |
|
includes/admin/settings/schema.php
CHANGED
@@ -203,6 +203,7 @@ class Smartcrawl_Schema_Settings extends Smartcrawl_Settings_Admin {
|
|
203 |
'schema_enable_audio' => false,
|
204 |
'schema_enable_video' => false,
|
205 |
'schema_enable_yt_api' => false,
|
|
|
206 |
);
|
207 |
}
|
208 |
|
@@ -323,6 +324,7 @@ class Smartcrawl_Schema_Settings extends Smartcrawl_Settings_Admin {
|
|
323 |
'schema_enable_audio',
|
324 |
'schema_enable_video',
|
325 |
'schema_enable_yt_api',
|
|
|
326 |
);
|
327 |
}
|
328 |
|
203 |
'schema_enable_audio' => false,
|
204 |
'schema_enable_video' => false,
|
205 |
'schema_enable_yt_api' => false,
|
206 |
+
'schema_enable_test_button' => true,
|
207 |
);
|
208 |
}
|
209 |
|
324 |
'schema_enable_audio',
|
325 |
'schema_enable_video',
|
326 |
'schema_enable_yt_api',
|
327 |
+
'schema_enable_test_button',
|
328 |
);
|
329 |
}
|
330 |
|
includes/admin/settings/sitemap.php
CHANGED
@@ -373,7 +373,9 @@ class Smartcrawl_Sitemap_Settings extends Smartcrawl_Settings_Admin {
|
|
373 |
if ( current_user_can( 'manage_options' ) ) {
|
374 |
$service = Smartcrawl_Service::get( Smartcrawl_Service::SERVICE_SEO );
|
375 |
$response = $service->start();
|
376 |
-
$error =
|
|
|
|
|
377 |
}
|
378 |
$url = add_query_arg(
|
379 |
array(
|
@@ -387,14 +389,6 @@ class Smartcrawl_Sitemap_Settings extends Smartcrawl_Settings_Admin {
|
|
387 |
die;
|
388 |
}
|
389 |
|
390 |
-
private function get_error( $response ) {
|
391 |
-
if ( ! empty( $response['data']['status'] ) && (int) $response['data']['status'] > 399 ) {
|
392 |
-
return (string) smartcrawl_get_array_value( $response, 'message' );
|
393 |
-
}
|
394 |
-
|
395 |
-
return '';
|
396 |
-
}
|
397 |
-
|
398 |
public function add_crawl_status_message() {
|
399 |
$crawl_in_progress = smartcrawl_get_array_value( $_GET, 'crawl-in-progress' );
|
400 |
if ( is_null( $crawl_in_progress ) ) {
|
373 |
if ( current_user_can( 'manage_options' ) ) {
|
374 |
$service = Smartcrawl_Service::get( Smartcrawl_Service::SERVICE_SEO );
|
375 |
$response = $service->start();
|
376 |
+
$error = is_wp_error( $response )
|
377 |
+
? $response->get_error_message()
|
378 |
+
: '';
|
379 |
}
|
380 |
$url = add_query_arg(
|
381 |
array(
|
389 |
die;
|
390 |
}
|
391 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
392 |
public function add_crawl_status_message() {
|
393 |
$crawl_in_progress = smartcrawl_get_array_value( $_GET, 'crawl-in-progress' );
|
394 |
if ( is_null( $crawl_in_progress ) ) {
|
includes/admin/templates/footer.php
CHANGED
@@ -45,7 +45,7 @@ $filtered_footer_text = Smartcrawl_White_Label::get()->get_wpmudev_footer_text(
|
|
45 |
<li><a href="https://wordpress.org/support/plugin/smartcrawl-seo"
|
46 |
target="_blank"><?php esc_html_e( 'Support', 'wds' ); ?></a></li>
|
47 |
<li><a href="https://premium.wpmudev.org/docs/" target="_blank"><?php esc_html_e( 'Docs', 'wds' ); ?></a></li>
|
48 |
-
<li><a href="https://premium.wpmudev.org/hub/" target="_blank"><?php esc_html_e( 'The Hub', 'wds' ); ?></a></li>
|
49 |
<li><a href="https://premium.wpmudev.org/terms-of-service/"
|
50 |
target="_blank"><?php esc_html_e( 'Terms of Service', 'wds' ); ?></a></li>
|
51 |
<li><a href="https://incsub.com/privacy-policy/"
|
45 |
<li><a href="https://wordpress.org/support/plugin/smartcrawl-seo"
|
46 |
target="_blank"><?php esc_html_e( 'Support', 'wds' ); ?></a></li>
|
47 |
<li><a href="https://premium.wpmudev.org/docs/" target="_blank"><?php esc_html_e( 'Docs', 'wds' ); ?></a></li>
|
48 |
+
<li><a href="https://premium.wpmudev.org/hub-welcome/" target="_blank"><?php esc_html_e( 'The Hub', 'wds' ); ?></a></li>
|
49 |
<li><a href="https://premium.wpmudev.org/terms-of-service/"
|
50 |
target="_blank"><?php esc_html_e( 'Terms of Service', 'wds' ); ?></a></li>
|
51 |
<li><a href="https://incsub.com/privacy-policy/"
|
includes/admin/templates/post-list/quick-edit-onpage.php
CHANGED
@@ -17,6 +17,9 @@
|
|
17 |
</label>
|
18 |
</div>
|
19 |
</fieldset>
|
|
|
|
|
|
|
20 |
<style>
|
21 |
.inline-edit-col .title.metadesc {
|
22 |
display: block;
|
17 |
</label>
|
18 |
</div>
|
19 |
</fieldset>
|
20 |
+
<input type="hidden"
|
21 |
+
value="<?php echo esc_attr( wp_create_nonce( 'wds-metabox-nonce' ) ); ?>"
|
22 |
+
name="_wds_nonce"/>
|
23 |
<style>
|
24 |
.inline-edit-col .title.metadesc {
|
25 |
display: block;
|
includes/admin/templates/schema/schema-section-advanced.php
CHANGED
@@ -332,25 +332,3 @@ $taxonomies = empty( $taxonomies ) ? array() : $taxonomies;
|
|
332 |
) ); ?>
|
333 |
</div>
|
334 |
</div>
|
335 |
-
|
336 |
-
<div class="sui-box-settings-row">
|
337 |
-
<div class="sui-box-settings-col-1">
|
338 |
-
<label class="sui-settings-label">
|
339 |
-
<?php esc_html_e( 'Deactivate', 'wds' ); ?>
|
340 |
-
</label>
|
341 |
-
|
342 |
-
<p class="sui-description">
|
343 |
-
<?php esc_html_e( 'If you no longer wish to add schema, you can deactivate it.', 'wds' ); ?>
|
344 |
-
</p>
|
345 |
-
</div>
|
346 |
-
|
347 |
-
<div class="sui-box-settings-col-2">
|
348 |
-
<button type="button"
|
349 |
-
id="wds-deactivate-schema-component"
|
350 |
-
class="sui-button sui-button-ghost">
|
351 |
-
<i class="sui-icon-power-on-off" aria-hidden="true"></i>
|
352 |
-
|
353 |
-
<?php esc_html_e( 'Deactivate', 'wds' ); ?>
|
354 |
-
</button>
|
355 |
-
</div>
|
356 |
-
</div>
|
332 |
) ); ?>
|
333 |
</div>
|
334 |
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
includes/admin/templates/schema/schema-section-settings.php
ADDED
@@ -0,0 +1,49 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
$option_name = empty( $_view['option_name'] ) ? '' : $_view['option_name'];
|
3 |
+
$options = empty( $options ) ? array() : $options;
|
4 |
+
$social_options = empty( $social_options ) ? array() : $social_options;
|
5 |
+
|
6 |
+
$schema_enable_test_button = (bool) smartcrawl_get_array_value( $options, 'schema_enable_test_button' );
|
7 |
+
?>
|
8 |
+
<div class="sui-box-settings-row">
|
9 |
+
<div class="sui-box-settings-col-1">
|
10 |
+
<label class="sui-settings-label">
|
11 |
+
<?php esc_html_e( 'Test Schema Button', 'wds' ); ?>
|
12 |
+
</label>
|
13 |
+
|
14 |
+
<p class="sui-description">
|
15 |
+
<?php esc_html_e( 'This feature adds a Test Schema button to the WordPress admin bar.', 'wds' ); ?>
|
16 |
+
</p>
|
17 |
+
</div>
|
18 |
+
|
19 |
+
<div class="sui-box-settings-col-2">
|
20 |
+
<?php $this->_render( 'toggle-item', array(
|
21 |
+
'field_name' => sprintf( '%s[%s]', $option_name, 'schema_enable_test_button' ),
|
22 |
+
'field_id' => 'schema_enable_test_button',
|
23 |
+
'checked' => $schema_enable_test_button,
|
24 |
+
'item_label' => esc_html__( 'Show Test Schema button in admin bar', 'wds' ),
|
25 |
+
) ); ?>
|
26 |
+
</div>
|
27 |
+
</div>
|
28 |
+
|
29 |
+
<div class="sui-box-settings-row">
|
30 |
+
<div class="sui-box-settings-col-1">
|
31 |
+
<label class="sui-settings-label">
|
32 |
+
<?php esc_html_e( 'Deactivate', 'wds' ); ?>
|
33 |
+
</label>
|
34 |
+
|
35 |
+
<p class="sui-description">
|
36 |
+
<?php esc_html_e( 'If you no longer wish to add schema, you can deactivate it.', 'wds' ); ?>
|
37 |
+
</p>
|
38 |
+
</div>
|
39 |
+
|
40 |
+
<div class="sui-box-settings-col-2">
|
41 |
+
<button type="button"
|
42 |
+
id="wds-deactivate-schema-component"
|
43 |
+
class="sui-button sui-button-ghost">
|
44 |
+
<i class="sui-icon-power-on-off" aria-hidden="true"></i>
|
45 |
+
|
46 |
+
<?php esc_html_e( 'Deactivate', 'wds' ); ?>
|
47 |
+
</button>
|
48 |
+
</div>
|
49 |
+
</div>
|
includes/admin/templates/schema/schema-settings.php
CHANGED
@@ -70,6 +70,22 @@ $this->_render( 'before-page-container' );
|
|
70 |
),
|
71 |
),
|
72 |
) );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
73 |
?>
|
74 |
</div>
|
75 |
</form>
|
70 |
),
|
71 |
),
|
72 |
) );
|
73 |
+
|
74 |
+
$this->_render( 'vertical-tab', array(
|
75 |
+
'tab_id' => 'tab_settings',
|
76 |
+
'tab_name' => esc_html__( 'Settings', 'wds' ),
|
77 |
+
'is_active' => 'tab_settings' === $active_tab,
|
78 |
+
'tab_sections' => array(
|
79 |
+
array(
|
80 |
+
'section_description' => esc_html__( '', 'wds' ),
|
81 |
+
'section_template' => 'schema/schema-section-settings',
|
82 |
+
'section_args' => array(
|
83 |
+
'options' => $options,
|
84 |
+
'social_options' => $social_options,
|
85 |
+
),
|
86 |
+
),
|
87 |
+
),
|
88 |
+
) );
|
89 |
?>
|
90 |
</div>
|
91 |
</form>
|
includes/admin/templates/schema/schema-sidenav.php
CHANGED
@@ -12,5 +12,9 @@ $this->_render( 'vertical-tabs-side-nav', array(
|
|
12 |
'id' => 'tab_advanced',
|
13 |
'name' => esc_html__( 'Advanced', 'wds' ),
|
14 |
),
|
|
|
|
|
|
|
|
|
15 |
),
|
16 |
) );
|
12 |
'id' => 'tab_advanced',
|
13 |
'name' => esc_html__( 'Advanced', 'wds' ),
|
14 |
),
|
15 |
+
array(
|
16 |
+
'id' => 'tab_settings',
|
17 |
+
'name' => esc_html__( 'Settings', 'wds' ),
|
18 |
+
),
|
19 |
),
|
20 |
) );
|
includes/core/class-wds-controller-analysis.php
CHANGED
@@ -197,11 +197,7 @@ class Smartcrawl_Controller_Analysis extends Smartcrawl_Base_Controller {
|
|
197 |
*/
|
198 |
public function set_up_post_columns() {
|
199 |
// Set up column filtering.
|
200 |
-
|
201 |
-
'public' => true,
|
202 |
-
'show_ui' => true,
|
203 |
-
) );
|
204 |
-
foreach ( $types as $type ) {
|
205 |
add_filter( "manage_{$type}_posts_columns", array( $this, 'add_analysis_columns' ) );
|
206 |
add_action( "manage_{$type}_posts_custom_column", array( $this, 'add_analysis_column_data' ), 10, 2 );
|
207 |
}
|
197 |
*/
|
198 |
public function set_up_post_columns() {
|
199 |
// Set up column filtering.
|
200 |
+
foreach ( smartcrawl_frontend_post_types() as $type ) {
|
|
|
|
|
|
|
|
|
201 |
add_filter( "manage_{$type}_posts_columns", array( $this, 'add_analysis_columns' ) );
|
202 |
add_action( "manage_{$type}_posts_custom_column", array( $this, 'add_analysis_column_data' ), 10, 2 );
|
203 |
}
|
includes/core/class-wds-controller-media-schema-data.php
CHANGED
@@ -94,7 +94,6 @@ class Smartcrawl_Controller_Media_Schema_Data extends Smartcrawl_Base_Controller
|
|
94 |
}
|
95 |
}
|
96 |
|
97 |
-
$video_data_saved = false;
|
98 |
if ( $this->is_youtube_url( $url ) ) {
|
99 |
$youtube_data_key = $this->get_item_data_key( $url );
|
100 |
$youtube_data = smartcrawl_get_array_value( $previous_data, array( 'youtube', $youtube_data_key ) );
|
@@ -102,12 +101,11 @@ class Smartcrawl_Controller_Media_Schema_Data extends Smartcrawl_Base_Controller
|
|
102 |
$youtube_data = Smartcrawl_Youtube_Data_Fetcher::get_video_info( $url );
|
103 |
}
|
104 |
if ( $youtube_data ) {
|
105 |
-
$video_data_saved = true;
|
106 |
$cache['youtube'][ $youtube_data_key ] = $youtube_data;
|
107 |
}
|
108 |
}
|
109 |
|
110 |
-
if (
|
111 |
$video_data_key = $this->get_item_data_key( $url );
|
112 |
$video_data = smartcrawl_get_array_value( $previous_data, array( 'video', $video_data_key ) );
|
113 |
if ( empty( $video_data ) ) {
|
94 |
}
|
95 |
}
|
96 |
|
|
|
97 |
if ( $this->is_youtube_url( $url ) ) {
|
98 |
$youtube_data_key = $this->get_item_data_key( $url );
|
99 |
$youtube_data = smartcrawl_get_array_value( $previous_data, array( 'youtube', $youtube_data_key ) );
|
101 |
$youtube_data = Smartcrawl_Youtube_Data_Fetcher::get_video_info( $url );
|
102 |
}
|
103 |
if ( $youtube_data ) {
|
|
|
104 |
$cache['youtube'][ $youtube_data_key ] = $youtube_data;
|
105 |
}
|
106 |
}
|
107 |
|
108 |
+
if ( $this->is_supported_video( $url ) ) {
|
109 |
$video_data_key = $this->get_item_data_key( $url );
|
110 |
$video_data = smartcrawl_get_array_value( $previous_data, array( 'video', $video_data_key ) );
|
111 |
if ( empty( $video_data ) ) {
|
includes/core/class-wds-schema-value-helper.php
CHANGED
@@ -485,8 +485,7 @@ class Smartcrawl_Schema_Value_Helper extends Smartcrawl_Type_Traverser {
|
|
485 |
);
|
486 |
|
487 |
// Name
|
488 |
-
$
|
489 |
-
$schema["name"] = $organization_name ? $organization_name : get_bloginfo( 'name' );
|
490 |
|
491 |
// Logo
|
492 |
$org_logo = $this->get_organization_logo();
|
@@ -597,11 +596,7 @@ class Smartcrawl_Schema_Value_Helper extends Smartcrawl_Type_Traverser {
|
|
597 |
);
|
598 |
|
599 |
// Name
|
600 |
-
$schema["name"] = $this->
|
601 |
-
$this->get_schema_option( 'person_brand_name' ),
|
602 |
-
$this->get_social_option( 'override_name' ),
|
603 |
-
$this->get_user_full_name( $this->owner )
|
604 |
-
);
|
605 |
|
606 |
// Logo
|
607 |
$site_url = get_site_url();
|
@@ -835,11 +830,11 @@ class Smartcrawl_Schema_Value_Helper extends Smartcrawl_Type_Traverser {
|
|
835 |
return $urls;
|
836 |
}
|
837 |
|
838 |
-
|
839 |
return $this->get_schema_type() === self::TYPE_PERSON;
|
840 |
}
|
841 |
|
842 |
-
|
843 |
return $this->get_schema_type() === self::TYPE_ORGANIZATION;
|
844 |
}
|
845 |
|
@@ -1040,6 +1035,13 @@ class Smartcrawl_Schema_Value_Helper extends Smartcrawl_Type_Traverser {
|
|
1040 |
}
|
1041 |
|
1042 |
private function add_media_schema( $schema, $post ) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1043 |
$schema_data_controller = Smartcrawl_Controller_Media_Schema_Data::get();
|
1044 |
$schema_data_controller->maybe_refresh_wp_embeds_cache( $post );
|
1045 |
|
@@ -1058,19 +1060,15 @@ class Smartcrawl_Schema_Value_Helper extends Smartcrawl_Type_Traverser {
|
|
1058 |
|
1059 |
$enable_youtube = (bool) $this->get_schema_option( 'schema_enable_yt_api' );
|
1060 |
$youtube_data = smartcrawl_get_array_value( $cache, 'youtube' );
|
1061 |
-
$
|
1062 |
-
if ( $enable_youtube && ! empty( $youtube_data ) && is_array( $youtube_data ) ) {
|
1063 |
-
foreach ( $youtube_data as $youtube_id => $youtube_datum ) {
|
1064 |
-
$youtube_videos[] = $youtube_id;
|
1065 |
-
$schema[] = $this->get_youtube_schema( $youtube_datum );
|
1066 |
-
}
|
1067 |
-
}
|
1068 |
|
1069 |
$enable_video = (bool) $this->get_schema_option( 'schema_enable_video' );
|
1070 |
$video_data = smartcrawl_get_array_value( $cache, 'video' );
|
1071 |
if ( $enable_video && ! empty( $video_data ) && is_array( $video_data ) ) {
|
1072 |
foreach ( $video_data as $video_id => $video_datum ) {
|
1073 |
-
if (
|
|
|
|
|
1074 |
$schema[] = $this->get_video_schema( $video_datum );
|
1075 |
}
|
1076 |
}
|
@@ -1104,10 +1102,12 @@ class Smartcrawl_Schema_Value_Helper extends Smartcrawl_Type_Traverser {
|
|
1104 |
$schema['duration'] = $duration;
|
1105 |
}
|
1106 |
|
|
|
|
|
1107 |
return $schema;
|
1108 |
}
|
1109 |
|
1110 |
-
private function get_youtube_schema( $data ) {
|
1111 |
$schema = $this->media_data_to_schema( array(
|
1112 |
'title' => "name",
|
1113 |
'url' => "url",
|
@@ -1125,6 +1125,19 @@ class Smartcrawl_Schema_Value_Helper extends Smartcrawl_Type_Traverser {
|
|
1125 |
$schema["keywords"] = join( ',', $tags );
|
1126 |
}
|
1127 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1128 |
return $schema;
|
1129 |
}
|
1130 |
|
@@ -1251,4 +1264,107 @@ class Smartcrawl_Schema_Value_Helper extends Smartcrawl_Type_Traverser {
|
|
1251 |
|
1252 |
return '';
|
1253 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1254 |
}
|
485 |
);
|
486 |
|
487 |
// Name
|
488 |
+
$schema["name"] = $this->get_organization_name();
|
|
|
489 |
|
490 |
// Logo
|
491 |
$org_logo = $this->get_organization_logo();
|
596 |
);
|
597 |
|
598 |
// Name
|
599 |
+
$schema["name"] = $this->get_personal_brand_name();
|
|
|
|
|
|
|
|
|
600 |
|
601 |
// Logo
|
602 |
$site_url = get_site_url();
|
830 |
return $urls;
|
831 |
}
|
832 |
|
833 |
+
public function is_schema_type_person() {
|
834 |
return $this->get_schema_type() === self::TYPE_PERSON;
|
835 |
}
|
836 |
|
837 |
+
public function is_schema_type_organization() {
|
838 |
return $this->get_schema_type() === self::TYPE_ORGANIZATION;
|
839 |
}
|
840 |
|
1035 |
}
|
1036 |
|
1037 |
private function add_media_schema( $schema, $post ) {
|
1038 |
+
$schema = $this->add_oembed_schema( $post, $schema );
|
1039 |
+
$schema = $this->add_attachment_schema( $post, $schema );
|
1040 |
+
|
1041 |
+
return $schema;
|
1042 |
+
}
|
1043 |
+
|
1044 |
+
private function add_oembed_schema( $post, $schema ) {
|
1045 |
$schema_data_controller = Smartcrawl_Controller_Media_Schema_Data::get();
|
1046 |
$schema_data_controller->maybe_refresh_wp_embeds_cache( $post );
|
1047 |
|
1060 |
|
1061 |
$enable_youtube = (bool) $this->get_schema_option( 'schema_enable_yt_api' );
|
1062 |
$youtube_data = smartcrawl_get_array_value( $cache, 'youtube' );
|
1063 |
+
$youtube_data = empty( $youtube_data ) ? array() : $youtube_data;
|
|
|
|
|
|
|
|
|
|
|
|
|
1064 |
|
1065 |
$enable_video = (bool) $this->get_schema_option( 'schema_enable_video' );
|
1066 |
$video_data = smartcrawl_get_array_value( $cache, 'video' );
|
1067 |
if ( $enable_video && ! empty( $video_data ) && is_array( $video_data ) ) {
|
1068 |
foreach ( $video_data as $video_id => $video_datum ) {
|
1069 |
+
if ( $enable_youtube && array_key_exists( $video_id, $youtube_data ) ) {
|
1070 |
+
$schema[] = $this->get_youtube_schema( $youtube_data[ $video_id ], $video_datum );
|
1071 |
+
} else {
|
1072 |
$schema[] = $this->get_video_schema( $video_datum );
|
1073 |
}
|
1074 |
}
|
1102 |
$schema['duration'] = $duration;
|
1103 |
}
|
1104 |
|
1105 |
+
$schema = $this->add_embed_url_property( $schema, $data );
|
1106 |
+
|
1107 |
return $schema;
|
1108 |
}
|
1109 |
|
1110 |
+
private function get_youtube_schema( $data, $embed_data ) {
|
1111 |
$schema = $this->media_data_to_schema( array(
|
1112 |
'title' => "name",
|
1113 |
'url' => "url",
|
1125 |
$schema["keywords"] = join( ',', $tags );
|
1126 |
}
|
1127 |
|
1128 |
+
$schema = $this->add_embed_url_property( $schema, $embed_data );
|
1129 |
+
|
1130 |
+
return $schema;
|
1131 |
+
}
|
1132 |
+
|
1133 |
+
private function add_embed_url_property( $schema, $embed_data ) {
|
1134 |
+
if ( isset( $embed_data['html'] ) ) {
|
1135 |
+
$src_attribute = Smartcrawl_Html::find_attributes( 'iframe', 'src', $embed_data['html'] );
|
1136 |
+
if ( ! empty( $src_attribute ) ) {
|
1137 |
+
$schema['embedUrl'] = array_shift( $src_attribute );
|
1138 |
+
}
|
1139 |
+
}
|
1140 |
+
|
1141 |
return $schema;
|
1142 |
}
|
1143 |
|
1264 |
|
1265 |
return '';
|
1266 |
}
|
1267 |
+
|
1268 |
+
private function add_attachment_schema( $post, $schema ) {
|
1269 |
+
$src_attributes = Smartcrawl_Html::find_attributes( 'video, audio', 'src', $post->post_content );
|
1270 |
+
foreach ( $src_attributes as $html_element => $src_url ) {
|
1271 |
+
$attachment_id = attachment_url_to_postid( $src_url );
|
1272 |
+
if ( ! $attachment_id ) {
|
1273 |
+
continue;
|
1274 |
+
}
|
1275 |
+
|
1276 |
+
$attachment = get_post( $attachment_id );
|
1277 |
+
|
1278 |
+
if ( $this->is_mime_type_video( $attachment ) ) {
|
1279 |
+
$schema[] = $this->get_video_attachment_schema( $attachment, $html_element );
|
1280 |
+
}
|
1281 |
+
|
1282 |
+
if ( $this->is_mime_type_audio( $attachment ) ) {
|
1283 |
+
$schema[] = $this->get_audio_attachment_schema( $attachment );
|
1284 |
+
}
|
1285 |
+
}
|
1286 |
+
|
1287 |
+
return $schema;
|
1288 |
+
}
|
1289 |
+
|
1290 |
+
private function get_video_attachment_schema( $attachment, $video_element_html ) {
|
1291 |
+
$attachment_url = wp_get_attachment_url( $attachment->ID );
|
1292 |
+
$attachment_schema = $this->get_attachment_schema( self::TYPE_VIDEO_OBJECT, $attachment, $attachment_url );
|
1293 |
+
|
1294 |
+
// Video poster image
|
1295 |
+
$poster_image_url = $this->get_video_poster_attribute( $video_element_html );
|
1296 |
+
if ( $poster_image_url ) {
|
1297 |
+
$attachment_schema['thumbnailUrl'] = $poster_image_url;
|
1298 |
+
}
|
1299 |
+
|
1300 |
+
return $attachment_schema;
|
1301 |
+
}
|
1302 |
+
|
1303 |
+
private function get_video_poster_attribute( $video_element_html ) {
|
1304 |
+
$poster_values = Smartcrawl_Html::find_attributes( 'video', 'poster', $video_element_html );
|
1305 |
+
if ( count( $poster_values ) > 0 ) {
|
1306 |
+
return array_shift( $poster_values );
|
1307 |
+
}
|
1308 |
+
|
1309 |
+
return '';
|
1310 |
+
}
|
1311 |
+
|
1312 |
+
private function get_audio_attachment_schema( $attachment ) {
|
1313 |
+
return $this->get_attachment_schema(
|
1314 |
+
self::TYPE_AUDIO_OBJECT,
|
1315 |
+
$attachment,
|
1316 |
+
wp_get_attachment_url( $attachment->ID )
|
1317 |
+
);
|
1318 |
+
}
|
1319 |
+
|
1320 |
+
/**
|
1321 |
+
* @param $attachment WP_Post
|
1322 |
+
*
|
1323 |
+
* @return bool
|
1324 |
+
*/
|
1325 |
+
private function is_mime_type_video( $attachment ) {
|
1326 |
+
return strpos( $attachment->post_mime_type, 'video/' ) !== false;
|
1327 |
+
}
|
1328 |
+
|
1329 |
+
/**
|
1330 |
+
* @param $attachment WP_Post
|
1331 |
+
*
|
1332 |
+
* @return bool
|
1333 |
+
*/
|
1334 |
+
private function is_mime_type_audio( $attachment ) {
|
1335 |
+
return strpos( $attachment->post_mime_type, 'audio/' ) !== false;
|
1336 |
+
}
|
1337 |
+
|
1338 |
+
/**
|
1339 |
+
* @param $attachment WP_Post
|
1340 |
+
* @param $attachment_url
|
1341 |
+
*
|
1342 |
+
* @return array
|
1343 |
+
*/
|
1344 |
+
private function get_attachment_schema( $type, $attachment, $attachment_url ) {
|
1345 |
+
$description = $attachment->post_excerpt
|
1346 |
+
? $attachment->post_excerpt
|
1347 |
+
: $attachment->post_content;
|
1348 |
+
|
1349 |
+
return array(
|
1350 |
+
'@type' => $type,
|
1351 |
+
'name' => $attachment->post_title,
|
1352 |
+
'description' => wp_strip_all_tags( $description ),
|
1353 |
+
'uploadDate' => $attachment->post_date,
|
1354 |
+
'contentUrl' => $attachment_url,
|
1355 |
+
);
|
1356 |
+
}
|
1357 |
+
|
1358 |
+
public function get_personal_brand_name() {
|
1359 |
+
return $this->first_non_empty_string(
|
1360 |
+
$this->get_schema_option( 'person_brand_name' ),
|
1361 |
+
$this->get_social_option( 'override_name' ),
|
1362 |
+
$this->get_user_full_name( $this->owner )
|
1363 |
+
);
|
1364 |
+
}
|
1365 |
+
|
1366 |
+
public function get_organization_name() {
|
1367 |
+
$organization_name = $this->get_social_option( 'organization_name' );
|
1368 |
+
return $organization_name ? $organization_name : get_bloginfo( 'name' );
|
1369 |
+
}
|
1370 |
}
|
includes/core/core.php
CHANGED
@@ -1032,3 +1032,13 @@ function smartcrawl_is_build_type_full() {
|
|
1032 |
return defined( 'SMARTCRAWL_BUILD_TYPE' )
|
1033 |
&& SMARTCRAWL_BUILD_TYPE === 'full';
|
1034 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1032 |
return defined( 'SMARTCRAWL_BUILD_TYPE' )
|
1033 |
&& SMARTCRAWL_BUILD_TYPE === 'full';
|
1034 |
}
|
1035 |
+
|
1036 |
+
function smartcrawl_frontend_post_types() {
|
1037 |
+
$types = get_post_types( array(
|
1038 |
+
'public' => true,
|
1039 |
+
'publicly_queryable' => true,
|
1040 |
+
) );
|
1041 |
+
$types[] = 'page';
|
1042 |
+
|
1043 |
+
return $types;
|
1044 |
+
}
|
includes/tools/class-wds-schema-printer.php
CHANGED
@@ -43,8 +43,7 @@ class Smartcrawl_Schema_Printer extends Smartcrawl_WorkUnit {
|
|
43 |
return false;
|
44 |
}
|
45 |
|
46 |
-
|
47 |
-
if ( ! empty( $social['disable-schema'] ) ) {
|
48 |
$this->_is_done = true;
|
49 |
|
50 |
return false; // Disabled
|
@@ -72,9 +71,12 @@ class Smartcrawl_Schema_Printer extends Smartcrawl_WorkUnit {
|
|
72 |
}
|
73 |
|
74 |
public function admin_bar_menu_items( $admin_bar ) {
|
|
|
75 |
if (
|
76 |
is_admin()
|
77 |
|| ! current_user_can( 'publish_posts' )
|
|
|
|
|
78 |
) {
|
79 |
return $admin_bar;
|
80 |
}
|
@@ -105,4 +107,12 @@ class Smartcrawl_Schema_Printer extends Smartcrawl_WorkUnit {
|
|
105 |
|
106 |
$this->_is_running = true;
|
107 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
108 |
}
|
43 |
return false;
|
44 |
}
|
45 |
|
46 |
+
if ( $this->is_schema_disabled() ) {
|
|
|
47 |
$this->_is_done = true;
|
48 |
|
49 |
return false; // Disabled
|
71 |
}
|
72 |
|
73 |
public function admin_bar_menu_items( $admin_bar ) {
|
74 |
+
$schema_options = Smartcrawl_Settings::get_component_options( Smartcrawl_Settings::COMP_SCHEMA );
|
75 |
if (
|
76 |
is_admin()
|
77 |
|| ! current_user_can( 'publish_posts' )
|
78 |
+
|| $this->is_schema_disabled()
|
79 |
+
|| empty( $schema_options['schema_enable_test_button'] )
|
80 |
) {
|
81 |
return $admin_bar;
|
82 |
}
|
107 |
|
108 |
$this->_is_running = true;
|
109 |
}
|
110 |
+
|
111 |
+
/**
|
112 |
+
* @return mixed
|
113 |
+
*/
|
114 |
+
private function is_schema_disabled() {
|
115 |
+
$social = Smartcrawl_Settings::get_component_options( Smartcrawl_Settings::COMP_SOCIAL );
|
116 |
+
return ! empty( $social['disable-schema'] );
|
117 |
+
}
|
118 |
}
|
readme.txt
CHANGED
@@ -7,7 +7,7 @@ Author URI: https://premium.wpmudev.org/
|
|
7 |
Author: WPMU DEV
|
8 |
Requires at least: 4.6
|
9 |
Tested up to: 5.5
|
10 |
-
Stable tag: 2.8.
|
11 |
|
12 |
SEO checker, content analysis & SEO optimizer. Rank higher on search engines with 301 redirects, XML sitemaps & one-click setup.
|
13 |
|
@@ -28,6 +28,7 @@ Create clear, bold, targeted content and rank at the top of your favorite search
|
|
28 |
* Smart Page Analyzer – SmartCrawl has an SEO checker that scans pages and posts for readability and keyword density and makes suggestions for optimizing your content.
|
29 |
* SEO Crawl – Every time you add new content to your site, SmartCrawl will let Google know it’s time to re-crawl your site.
|
30 |
* 301 Redirect – Use SmartCrawl to redirect traffic from one URL to another to protect your hard work and take advantage of high producing links.
|
|
|
31 |
* Integrate With Moz SEO Tools – Already using Moz? Connect your Moz reports and comparison analysis, including rank and links.
|
32 |
* Quick Setup Import/Export – Quickly add your custom SmartCrawl SEO settings to all your sites with included import.
|
33 |
|
@@ -55,6 +56,9 @@ SmartCrawl gives you options to control SEO settings across an entire network as
|
|
55 |
###301 URL Redirect
|
56 |
Automatically redirect traffic from one URL to another. Use this tool if you have changed a page’s URL and wish to keep traffic flowing to the new page.
|
57 |
|
|
|
|
|
|
|
58 |
###The Rank-Higher Convert-Better SEO Tool
|
59 |
Search Engine Optimization is not a trick, it’s all about following best practices.
|
60 |
|
@@ -128,6 +132,14 @@ SmartCrawl works with any normal WP content and page builders shouldn’t be an
|
|
128 |
|
129 |
== Changelog ==
|
130 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
131 |
= 2.8.0 =
|
132 |
|
133 |
* New: Full support for default Schema types
|
@@ -251,277 +263,7 @@ SmartCrawl works with any normal WP content and page builders shouldn’t be an
|
|
251 |
* Fix: Deactivating onpage module affecting unrelated functionality
|
252 |
* Fix: Version 3.x of AIOSEO not supported by importer
|
253 |
|
254 |
-
|
255 |
-
|
256 |
-
* New: New, exciting, mobile-friendly UI in the admin area
|
257 |
-
* New: Support for whitelabel features
|
258 |
-
* New: Improved performance and reliability of SEO checkup and sitemap crawler
|
259 |
-
* New: Code improvements for the display of meta values
|
260 |
-
* New: New filter for addition of extra SEO and readability content
|
261 |
-
* New: Yoast importer now less likely to show "No compatible data ..." error
|
262 |
-
* New: New BuddyPress settings on Title & Meta page
|
263 |
-
|
264 |
-
* Fix: Redirect attachment settings getting overwritten
|
265 |
-
* Fix: Errors on Woocommerce shop page
|
266 |
-
* Fix: Category titles incorrect in certain situations
|
267 |
-
* Fix: Port matching issues in redirection module
|
268 |
-
* Fix: Multisite always showing "Homepage set to static page" message
|
269 |
-
* Fix: Sitewide sitemap settings not applied to network sub-sites
|
270 |
-
* Fix: Branda not able to change Smartcrawl admin bar text
|
271 |
-
* Fix: Non-public taxonomies listed on Title & Meta page
|
272 |
-
* Fix: Autolinks module causing styling issues
|
273 |
-
* Fix: Readability analysis compatibility issue with PHP 5.3
|
274 |
-
* Fix: Macros can not be added to term title and description
|
275 |
-
* Fix: JS console error on WP attachment editor page
|
276 |
-
* Fix: UI bugs when focus keyword ignored in SEO analysis
|
277 |
-
* Fix: Autolinking module showing self-links
|
278 |
-
* Fix: SEO analysis not working with autosaves disabled
|
279 |
-
* Fix: Sitemap showing invalid timestamps for certain post types
|
280 |
-
* Fix: Links on Title & Meta page pointing to incorrect tab on the social page
|
281 |
-
* Fix: Google plus field on social accounts page
|
282 |
-
* Fix: Visual issue (tooltip getting cut off) on sitemap reporting page
|
283 |
-
* Fix: Social account URLs with whitespaces not saved
|
284 |
-
* Fix: Untranslatable string in separator settings on Title & Meta page
|
285 |
-
* Fix: Fields losing focus while typing
|
286 |
-
* Fix: Visual issues on small screens
|
287 |
-
* Fix: Settings pages pointing to old documentation
|
288 |
-
|
289 |
-
= 2.2.6 =
|
290 |
-
|
291 |
-
* New: Support for Yoast v10 and AIOSEO v2.12 in third-party importer
|
292 |
-
* Fix: Redirects added from sitemap crawl report not converted to absolute
|
293 |
-
* Fix: Sitemap can't be removed while SC is active
|
294 |
-
* Fix: Import not working for Automatic linking settings
|
295 |
-
* Fix: Metabox conflict in classic editor
|
296 |
-
|
297 |
-
= 2.2.5 =
|
298 |
-
|
299 |
-
* New: New filters for modifying OpenGraph values
|
300 |
-
* New: Improved accuracy of readability analysis
|
301 |
-
|
302 |
-
* Fix: Missing columns on the post list page
|
303 |
-
* Fix: Certain websites throwing 404 error on redirection
|
304 |
-
* Fix: SEO metabox shown for non-public posts
|
305 |
-
* Fix: Better Gutenberg compatibility
|
306 |
-
* Fix: Warning on sitemap settings page
|
307 |
-
* Fix: Added ability to increase analysis request timeout
|
308 |
-
* Fix: Improved autoloader performance
|
309 |
-
* Fix: Warning in metabox placeholder loader
|
310 |
-
* Fix: Inaccurate preview when more recent post revision available
|
311 |
-
* Fix: Update the AIOSEOP importer to include the latest version
|
312 |
-
* Fix: Stylesheet URL incorrect in sub-site sitemaps
|
313 |
-
|
314 |
-
= 2.2.4.1 =
|
315 |
-
|
316 |
-
* Fix: Show the WP.org rating request to admins only
|
317 |
-
|
318 |
-
= 2.2.4 =
|
319 |
-
|
320 |
-
* New: URL redirection to external domains
|
321 |
-
|
322 |
-
* Fix: SEO and readability analysis of password-protected posts
|
323 |
-
* Fix: sitemap throws error if there's an image with ampersand sign
|
324 |
-
* Fix: metabox showing details from other posts when globals modified
|
325 |
-
* Fix: better autolinks compatibility with unicode languages
|
326 |
-
* Fix: code improvements for sitemap dashboard
|
327 |
-
* Fix: twitter and OG issues on static posts page
|
328 |
-
* Fix: third-party import notice appears for very old data
|
329 |
-
* Fix: conflicts on woocommerce shop page
|
330 |
-
|
331 |
-
= 2.2.3 =
|
332 |
-
|
333 |
-
* New: created new UI for Yoast and All In One SEO importers
|
334 |
-
* New: new option to keep existing post meta intact during import
|
335 |
-
* New: opengraph code optimizations and improvements
|
336 |
-
* New: made automatic sitemap updates less resource intensive
|
337 |
-
* New: made macros more extensible through new filters and actions
|
338 |
-
* New: support for dynamic placeholders prefixed with 'ct_' 'ct_desc_' and 'cf_'
|
339 |
-
|
340 |
-
* Fix: issues caused by shortcode execution (integration with Divi, Avada, WPBakery and Swift page builders)
|
341 |
-
* Fix: performance issues due to frequent analysis reruns
|
342 |
-
* Fix: minor conflict with Gutenberg
|
343 |
-
* Fix: autolinking module modifying inline scripts
|
344 |
-
* Fix: outdated meta title and meta description limits
|
345 |
-
* Fix: metabox conflict on media edit page
|
346 |
-
* Fix: saving menus taking too much time when analysis active
|
347 |
-
* Fix: post featured image printed as og:image before more specific images
|
348 |
-
* Fix: issues in Avada page builder integration
|
349 |
-
* Fix: log file not being written correctly
|
350 |
-
* Fix: issues caused by faulty packaging
|
351 |
-
* Fix: metabox preview showing raw HTML tags
|
352 |
-
* Fix: search engine update link unnecessarily shown on WP dashboard
|
353 |
-
* Fix: misnamed translation file
|
354 |
-
* Fix: missing trailing slash in sitemap home URL
|
355 |
-
* Fix: dates shown in sitemap dashboard widget not translatable
|
356 |
-
* Fix: sitemap creation error shows html tags
|
357 |
-
* Fix: format of date printed through %%currentdate%% placeholder not changeable
|
358 |
-
* Fix: miscellaneous typos and copy changes
|
359 |
-
* Fix: twitter placeholders on category edit page not accurate
|
360 |
-
* Fix: sitemap XSL stylesheet URL/path resolution issue
|
361 |
-
* Fix: twitter fields displayed unnecessarily on term edit page
|
362 |
-
* Fix: update plugin version constant to ensure cache busting
|
363 |
-
* Fix: untruncated title and description shown in Google previews
|
364 |
-
* Fix: typo in upsell modal
|
365 |
-
* Fix: metabox preview showing divi shortcodes
|
366 |
-
* Fix: issues caused by shortcode execution
|
367 |
-
* Fix: sub-headings check should pass if even one of the sub-headings contains our focus keywords
|
368 |
-
* Fix: twitter card preview not loading
|
369 |
-
* Fix: static front page handled as single post page
|
370 |
-
* Fix: static homepage does not show correct meta values in all scenarios
|
371 |
-
* Fix: static homepage built with builders shows shortcodes in 'Title & Meta' settings
|
372 |
-
* Fix: metabox preview showing WPBakery shortcodes
|
373 |
-
* Fix: warnings in autoloader
|
374 |
-
* Fix: importer support for yoast version 9
|
375 |
-
* Fix: metabox preview showing raw placeholders
|
376 |
-
|
377 |
-
= 2.2.2.7 =
|
378 |
-
|
379 |
-
* Fix: resolved conflict with swift framework mini product widget
|
380 |
-
* Fix: resolved styling conflicts with WPBakery and a few other plugins
|
381 |
-
* Fix: performance improvement for title and meta rewriting
|
382 |
-
|
383 |
-
= 2.2.2.6 =
|
384 |
-
|
385 |
-
* Fix: fixed issue causing WSOD on some sites
|
386 |
-
* Fix: don't show raw shortcodes in auto-generated meta description
|
387 |
-
* Fix: better compatibility of readability and SEO analysis with page builders
|
388 |
-
* Fix: made Google preview in the SC metabox more accurate
|
389 |
-
|
390 |
-
= 2.2.2.5 =
|
391 |
-
|
392 |
-
* Fix: reverted 2.2.2.4 changes causing WSOD on some sites
|
393 |
-
|
394 |
-
= 2.2.2.4 =
|
395 |
-
|
396 |
-
* Fix: don't show raw shortcodes in auto-generated meta description
|
397 |
-
* Fix: better compatibility of readability and SEO analysis with page builders
|
398 |
-
* Fix: made Google preview in the SC metabox more accurate
|
399 |
-
|
400 |
-
= 2.2.2.3 =
|
401 |
-
|
402 |
-
* Fix: fixed SEO checkup for free version
|
403 |
-
|
404 |
-
= 2.2.2.2 =
|
405 |
-
|
406 |
-
* Fix: fixed edge case autolinks issue
|
407 |
-
|
408 |
-
= 2.2.2.1 =
|
409 |
-
|
410 |
-
* Fix: Allow data import from Yoast 8.x
|
411 |
-
* Fix: Updated plugin version constant to latest version for cache busting
|
412 |
-
|
413 |
-
= 2.2.2 =
|
414 |
-
|
415 |
-
* New: support for custom post type archives
|
416 |
-
* New: noindex/nofollow for post types
|
417 |
-
* New: new OpenGraph tags og:url, og:type, og:image:width and og:image:height
|
418 |
-
* New: code optimization
|
419 |
-
* New: integration test suite for quality assurance
|
420 |
-
* New: link each page to the relevant documentation section on the plugin website
|
421 |
-
* New: import social profile links from AIOSEOP
|
422 |
-
* New: dynamically adjust the toggles under "Site Owner Permissions"
|
423 |
-
* New: update Google result preview when content is changed
|
424 |
-
* New: prompt requesting reviews on WP.org
|
425 |
-
|
426 |
-
* Fix: hide settings for disabled modules from plugin dashboard
|
427 |
-
* Fix: BuddyPress group titles missing
|
428 |
-
* Fix: links to enable OpenGraph and Twitter settings pointing to inaccessible pages
|
429 |
-
* Fix: duplicate text in SEO Checkup section of metabox
|
430 |
-
* Fix: plugin css conflicting with some WP admin components
|
431 |
-
* Fix: analysis indicators not displaying correct colors in WP post list
|
432 |
-
* Fix: settings need to be saved before reports for SEO Checkup are sent
|
433 |
-
* Fix: on WP dashboard, 'update sitemap' link in the sitemap widget not working
|
434 |
-
* Fix: typo in opengraph settings
|
435 |
-
* Fix: when new URL scan is run, the URL Crawler section not loaded automatically
|
436 |
-
* Fix: google/bing verification codes from yoast not imported correctly
|
437 |
-
* Fix: columns in the post tables take more space then they should
|
438 |
-
* Fix: google verification meta can't be removed once added
|
439 |
-
* Fix: meta description not working on WooCommerce shop page
|
440 |
-
* Fix: redundant save settings button under URL Crawler report
|
441 |
-
* Fix: typo in the upgrade popup
|
442 |
-
* Fix: when import from yoast notice dismissed, it comes back on page load
|
443 |
-
* Fix: seo column in post list shows wrong color indicator when focus keyword missing
|
444 |
-
* Fix: google/bing verification tags disappear when sitemap settings saved
|
445 |
-
* Fix: XML sitemap opened in the current tab
|
446 |
-
* Fix: when "Upgrade to Pro" clicked, pro version details opened in the current tab
|
447 |
-
* Fix: values under "Site Owner Permissions" not saved when everything turned off
|
448 |
-
* Fix: last checked time on SEO Checkup inconsistent
|
449 |
-
* Fix: if modules disabled by network admin, site admin can still see them in settings
|
450 |
-
* Fix: autolinks page has "TBC" as the description of a setting
|
451 |
-
* Fix: author archive meta description not saved
|
452 |
-
* Fix: dashboard sections display number of issues even if the corresponding module is disabled
|
453 |
-
* Fix: on network sub-sites, disabled modules not behaving properly
|
454 |
-
* Fix: previews are not refreshing on title and meta admin page
|
455 |
-
* Fix: url crawler not always listing the URLs resulting in errors
|
456 |
-
* Fix: hide SEO Checkup on network sub-sites
|
457 |
-
* Fix: remove code for old google site verification settings
|
458 |
-
* Fix: date archive settings not respected
|
459 |
-
* Fix: admin bar menu should always match the admin menu
|
460 |
-
* Fix: in url crawler, no message is shown when all missing urls added to sitemap
|
461 |
-
* Fix: MOZ metabox not styled
|
462 |
-
* Fix: Redirect Attachments options in Advanced Tools not saved when in off state
|
463 |
-
* Fix: automatic linking toggle in post metabox displays wrong state
|
464 |
-
* Fix: redundant MarketPress options
|
465 |
-
* Fix: autolinks "Exclusions" don't work when "Case Sensitive Matching" is off
|
466 |
-
* Fix: autolinks "Min Lengths" setting not working consistently
|
467 |
-
* Fix: twitter settings for date archives not working consistently
|
468 |
-
* Fix: meta description settings for search and 404 pages not working consistently
|
469 |
-
* Fix: google verification meta settings not working consistently
|
470 |
-
* Fix: quick edit fields not loading values
|
471 |
-
* Fix: unwanted space before date archive title
|
472 |
-
* Fix: minor inconsistencies in SEO analysis
|
473 |
-
* Fix: no error message displayed when default user removed in reporting section under SEO Checkup
|
474 |
-
* Fix: statistics on dashboard not refreshed when checkup completes in SEO Checkup section
|
475 |
-
* Fix: MOZ data displayed even when wrong credentials added
|
476 |
-
|
477 |
-
= 2.2.1 =
|
478 |
-
|
479 |
-
* Fix: post list pages performance issue.
|
480 |
-
|
481 |
-
= 2.2 =
|
482 |
-
|
483 |
-
* New: Yoast & All-In-One SEO importers.
|
484 |
-
* New: 'Refresh' button for content & readability analysis modules.
|
485 |
-
* New: ability to set twitter cards details on post and type level.
|
486 |
-
|
487 |
-
* Fix: compatibility with New Blog Templates plugin.
|
488 |
-
* Fix: spelling and grammar issues.
|
489 |
-
* Fix: duplicate info text in "No Image Alts" section of seo analysis.
|
490 |
-
* Fix: support for Themify themes.
|
491 |
-
* Fix: readability analysis summary outputting html tags.
|
492 |
-
* Fix: saving draft or publishing posts closes the smartcrawl module.
|
493 |
-
* Fix: problems in "Add All to Sitemap" button.
|
494 |
-
* Fix: incorrect number of missing url's on main dashboard.
|
495 |
-
|
496 |
-
= 2.1.1 =
|
497 |
-
|
498 |
-
* Initial SmartCrawl Free Release
|
499 |
-
* New: make Analysis dash widget results numeric and items clickable.
|
500 |
-
* New: add OpenGraph and Twitter options for taxonomies.
|
501 |
-
* New: exclude full URLs from sitemap.
|
502 |
-
* New: grey out deactivated modules in site owner permissions.
|
503 |
-
* New: enable styled sitemap on fresh setups.
|
504 |
-
|
505 |
-
* Fix: increase recommended description length from 160 to 230 chars.
|
506 |
-
* Fix: redirection resolution on archive pages.
|
507 |
-
* Fix: spelling and grammar issues.
|
508 |
-
* Fix: UI and styling issues.
|
509 |
-
* Fix: checkup scan tracking auto-update.
|
510 |
-
* Fix: update option label copies.
|
511 |
-
* Fix: update info links.
|
512 |
-
* Fix: admin menu style issues in Firefox.
|
513 |
-
* Fix: background color style issues.
|
514 |
-
* Fix: conflict with Divi theme.
|
515 |
-
* Fix: configuring links destinations when sitewide mode is active.
|
516 |
-
* Fix: unifiy analysis status results.
|
517 |
-
* Fix: BBPress compatibility issue with generated URLs.
|
518 |
-
* Fix: update error strings on import/export issues.
|
519 |
-
* Fix: sitemap items listed twice in audit report.
|
520 |
-
* Fix: title tag on custom post type archives issue.
|
521 |
-
* Fix: conflict with Movedo theme.
|
522 |
-
* Fix: do not calculate disabled analysis results.
|
523 |
-
* Fix: empty ignore URLs list clears sitemaps.
|
524 |
-
* Fix: user name not shown for reporting.
|
525 |
|
526 |
== About Us ==
|
527 |
WPMU DEV is a premium supplier of quality WordPress plugins, services and support. Join us here:
|
7 |
Author: WPMU DEV
|
8 |
Requires at least: 4.6
|
9 |
Tested up to: 5.5
|
10 |
+
Stable tag: 2.8.1
|
11 |
|
12 |
SEO checker, content analysis & SEO optimizer. Rank higher on search engines with 301 redirects, XML sitemaps & one-click setup.
|
13 |
|
28 |
* Smart Page Analyzer – SmartCrawl has an SEO checker that scans pages and posts for readability and keyword density and makes suggestions for optimizing your content.
|
29 |
* SEO Crawl – Every time you add new content to your site, SmartCrawl will let Google know it’s time to re-crawl your site.
|
30 |
* 301 Redirect – Use SmartCrawl to redirect traffic from one URL to another to protect your hard work and take advantage of high producing links.
|
31 |
+
* Schema Support – Let search engines know who you are and add your social profiles so search engines know which social profiles to attribute your web content to.
|
32 |
* Integrate With Moz SEO Tools – Already using Moz? Connect your Moz reports and comparison analysis, including rank and links.
|
33 |
* Quick Setup Import/Export – Quickly add your custom SmartCrawl SEO settings to all your sites with included import.
|
34 |
|
56 |
###301 URL Redirect
|
57 |
Automatically redirect traffic from one URL to another. Use this tool if you have changed a page’s URL and wish to keep traffic flowing to the new page.
|
58 |
|
59 |
+
### Full Schema Support
|
60 |
+
SmartCrawl has full support for default schema types and makes it easy for you to let search engines know what your data means, not just what it says. Soon you'll also be able to edit the properties of Article, Web Page, Rating & Review, Products, Local Business, and other schema types.
|
61 |
+
|
62 |
###The Rank-Higher Convert-Better SEO Tool
|
63 |
Search Engine Optimization is not a trick, it’s all about following best practices.
|
64 |
|
132 |
|
133 |
== Changelog ==
|
134 |
|
135 |
+
= 2.8.1 =
|
136 |
+
|
137 |
+
* New: Option to disable the Test Schema button from admin bar
|
138 |
+
* Fix: Incorrect URL in footer
|
139 |
+
* Fix: Post list columns and SEO meta shown for non-public post types
|
140 |
+
* Fix: Add schema for video and audio files directly uploaded and inserted into post content
|
141 |
+
* Fix: Autolink linking to the page itself on custom post types
|
142 |
+
|
143 |
= 2.8.0 =
|
144 |
|
145 |
* New: Full support for default Schema types
|
263 |
* Fix: Deactivating onpage module affecting unrelated functionality
|
264 |
* Fix: Version 3.x of AIOSEO not supported by importer
|
265 |
|
266 |
+
[Changelog for previous versions](https://premium.wpmudev.org/project/smartcrawl-wordpress-seo/#view-changelog).
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
267 |
|
268 |
== About Us ==
|
269 |
WPMU DEV is a premium supplier of quality WordPress plugins, services and support. Join us here:
|
wpmu-dev-seo.php
CHANGED
@@ -3,7 +3,7 @@
|
|
3 |
* Plugin Name: SmartCrawl
|
4 |
* Plugin URI: http://premium.wpmudev.org/project/wpmu-dev-seo/
|
5 |
* Description: Every SEO option that a site requires, in one easy bundle.
|
6 |
-
* Version: 2.8.
|
7 |
* Network: true
|
8 |
* Text Domain: wds
|
9 |
* Author: WPMU DEV
|
@@ -29,7 +29,7 @@
|
|
29 |
*/
|
30 |
|
31 |
if ( ! defined( 'SMARTCRAWL_VERSION' ) ) {
|
32 |
-
define( 'SMARTCRAWL_VERSION', '2.8.
|
33 |
}
|
34 |
|
35 |
if ( ! defined( 'SMARTCRAWL_SUI_VERSION' ) ) {
|
3 |
* Plugin Name: SmartCrawl
|
4 |
* Plugin URI: http://premium.wpmudev.org/project/wpmu-dev-seo/
|
5 |
* Description: Every SEO option that a site requires, in one easy bundle.
|
6 |
+
* Version: 2.8.1
|
7 |
* Network: true
|
8 |
* Text Domain: wds
|
9 |
* Author: WPMU DEV
|
29 |
*/
|
30 |
|
31 |
if ( ! defined( 'SMARTCRAWL_VERSION' ) ) {
|
32 |
+
define( 'SMARTCRAWL_VERSION', '2.8.1' );
|
33 |
}
|
34 |
|
35 |
if ( ! defined( 'SMARTCRAWL_SUI_VERSION' ) ) {
|