45% wordlift

Code Review | WordLift - AI powered SEO - Schema

WordPress plugin WordLift - AI powered SEO - Schema scored45%from 54 tests.

About plugin

  • Plugin page: wordlift
  • Plugin version: 3.51.3
  • PHP compatiblity: 5.6+
  • PHP version: 7.4.16
  • WordPress compatibility: 5.3-6.4
  • WordPress version: 6.3.1
  • First release: Aug 14, 2011
  • Latest release: Nov 29, 2023
  • Number of updates: 931
  • Update frequency: every 4.8 days
  • Top authors: ziodave (72.5%)naveen17797 (12.46%)akshay_raje (9.13%)mcolacino (5.26%)

Code review

54 tests

User reviews

64 reviews

Install metrics

800+ active /110,375 total downloads

Benchmarks

Plugin footprint 64% from 16 tests

Installer Passed 1 test

🔺 Critical test (weight: 50) | It is important to correctly install your plugin, without throwing errors or notices
The plugin installed gracefully, with no errors

Server metrics [RAM: ▲7.76MB] [CPU: ▲70.79ms] 50% from 4 tests

Server-side resources used by WordLift - AI powered SEO - Schema
Please fix the following
  • RAM: The total memory usage must be kept under 10MB (currently 11.12MB on /wp-admin/admin.php?page=wl_google_addon_import)
  • Extra RAM: The extra memory usage should kept under 5MB (currently 7.76MB on /wp-admin/admin.php?page=wl_google_addon_import)
PageMemory (MB)CPU Time (ms)
Home /11.34 ▲7.87124.18 ▲88.63
Dashboard /wp-admin11.22 ▲7.91133.08 ▲82.25
Posts /wp-admin/edit.php11.44 ▲8.07148.73 ▲98.72
Add New Post /wp-admin/post-new.php13.32 ▲7.42138.91 ▲42.65
Media Library /wp-admin/upload.php11.10 ▲7.86107.08 ▲69.63
Categories /wp-admin/edit-tags.php?taxonomy=category&post_type=entity11.09106.44
Entity Types /wp-admin/edit-tags.php?taxonomy=wl_entity_type&post_type=entity11.12105.33
Scheduled Actions /wp-admin/tools.php?page=action-scheduler11.27107.61
Add New Entity /wp-admin/post-new.php?post_type=entity13.32143.28
Settings /wp-admin/admin.php?page=wl_configuration_admin_menu11.60117.62
WordLift /wp-admin/admin.php?page=wl_admin_menu11.0798.38
Download Your Data /wp-admin/admin.php?page=wl_download_your_data11.0797.46
All Entities /wp-admin/edit.php?post_type=entity11.17103.28
Edit Entity term /wp-admin/admin.php?page=wl_entity_type_settings10.8186.34
Google Addon Import /wp-admin/admin.php?page=wl_google_addon_import11.1294.17

Server storage [IO: ▲71.97MB] [DB: ▲0.36MB] 67% from 3 tests

A short overview of filesystem and database impact
It is recommended to fix the following issues
  • Total filesystem usage should be limited to 25MB (currently using 71.97MB)
Filesystem: 4,420 new files
Database: 10 new tables, 24 new options
New tables
wp_wl_mapping_property
wp_actionscheduler_groups
wp_wl_mapping_rule
wp_wl_relation_instances
wp_wl_mapping
wp_actionscheduler_claims
wp_actionscheduler_actions
wp_wl_mapping_rule_group
wp_actionscheduler_logs
wp_wl_entities
New WordPress options
action_scheduler_lock_async-request-runner
category_children
widget_recent-comments
action_scheduler_hybrid_store_demarkation
wl_entity_type_children
widget_wl_geo_widget
wl_mappings
widget_wl_related_entities_cloud
widget_wl_timeline_widget
widget_recent-posts
...

Browser metrics Passed 4 tests

An overview of browser requirements for WordLift - AI powered SEO - Schema
There were no issues detected in relation to browser resource usage
PageNodesMemory (MB)Script (ms)Layout (ms)
Home /3,183 ▲42113.83 ▼0.412.02 ▲0.5627.38 ▼10.48
Dashboard /wp-admin2,578 ▲3985.21 ▼0.41105.12 ▲7.3984.69 ▲37.27
Posts /wp-admin/edit.php2,284 ▲1872.50 ▲0.5443.90 ▲6.1038.15 ▼0.82
Add New Post /wp-admin/post-new.php1,853 ▲32725.77 ▲2.68726.23 ▲109.8064.35 ▲16.40
Media Library /wp-admin/upload.php1,558 ▲1644.64 ▲0.47120.25 ▲21.7053.10 ▲11.21
Categories /wp-admin/edit-tags.php?taxonomy=category&post_type=entity1,6252.6239.9142.48
Entity Types /wp-admin/edit-tags.php?taxonomy=wl_entity_type&post_type=entity1,5492.5338.1935.61
Scheduled Actions /wp-admin/tools.php?page=action-scheduler1,4282.4633.9731.78
Add New Entity /wp-admin/post-new.php?post_type=entity6,53723.53978.3444.06
Settings /wp-admin/admin.php?page=wl_configuration_admin_menu2,0504.3096.9488.98
WordLift /wp-admin/admin.php?page=wl_admin_menu9522.3236.2031.76
Download Your Data /wp-admin/admin.php?page=wl_download_your_data9832.4432.4826.09
All Entities /wp-admin/edit.php?post_type=entity1,3652.6543.8636.63
Edit Entity term /wp-admin/admin.php?page=wl_entity_type_settings280.410.103.44
Google Addon Import /wp-admin/admin.php?page=wl_google_addon_import1,0082.3134.9240.18

Uninstaller [IO: ▲0.00MB] [DB: ▲0.36MB] 50% from 4 tests

🔸 Tests weight: 35 | All plugins must uninstall correctly, removing their source code and extra database tables they might have created
Please fix the following items
  • This plugin does not fully uninstall, leaving 9 tables in the database
    • wp_actionscheduler_groups
    • wp_wl_mapping_rule_group
    • wp_wl_mapping_rule
    • wp_wl_mapping
    • wp_actionscheduler_logs
    • wp_wl_entities
    • wp_actionscheduler_actions
    • wp_wl_mapping_property
    • wp_actionscheduler_claims
  • Zombie WordPress options detected upon uninstall: 21 options
    • action_scheduler_migration_status
    • wl_entity_type_settings
    • wl_mappings
    • wl_admin_dashboard_top_entities_option
    • widget_wl_geo_widget
    • action_scheduler_lock_async-request-runner
    • widget_wl_related_entities_cloud
    • theysaidso_admin_options
    • widget_wl_chord_widget
    • _wl_blog_url
    • ...

Smoke tests 0% from 4 tests

Server-side errors 0% from 1 test

🔹 Test weight: 20 | This is a short smoke test looking for server-side errors
These server-side errors were triggered
  • 2 occurences, only the last one shown
    • > GET request to /wp-admin/post-new.php?post_type=entity
    • > User deprecated in wp-includes/functions.php+5828
    Hook block_categories is deprecated since version 5.8.0! Use block_categories_all instead.
    • > GET request to /wp-admin/post-new.php?post_type=entity
    • > User deprecated in wp-includes/functions.php+5828
    Hook allowed_block_types is deprecated since version 5.8.0! Use allowed_block_types_all instead.

SRP 0% from 2 tests

🔹 Tests weight: 20 | A shallow check of the single-responsibility principle; PHP files should perform no action - including output of placeholder text - and trigger no errors when accessed directly
Please fix the following items
  • 5× PHP files output non-empty strings when accessed directly via GET requests:
    • > /wp-content/plugins/wordlift/admin/partials/wordlift-admin-mappings-edit.php
    • > /wp-content/plugins/wordlift/admin/partials/wordlift-admin-mappings-admin.php
    • > /wp-content/plugins/wordlift/admin/partials/wordlift-admin-display.php
    • > /wp-content/plugins/wordlift/public/partials/wordlift-public-display.php
    • > /wp-content/plugins/wordlift/admin/partials/wordlift-admin-google-addon-import.php
  • 681× PHP files trigger errors when accessed directly with GET requests (only 10 are shown):
    • > PHP Fatal error
      Uncaught Error: Class 'Wordlift\\Modules\\Common\\Symfony\\Component\\DependencyInjection\\Loader\\Configurator\\AbstractServiceConfigurator' not found in wp-content/plugins/wordlift/modules/common/third-party/vendor/symfony/dependency-injection/Loader/Configurator/DefaultsConfigurator.php:19
    • > PHP Fatal error
      Uncaught Error: Class 'Wordlift_Entity_Property_Service' not found in wp-content/plugins/wordlift/includes/properties/class-wordlift-required-property-service.php:7
    • > PHP Warning
      Use of undefined constant ABSPATH - assumed 'ABSPATH' (this will throw an Error in a future version of PHP) in wp-content/plugins/wordlift/install/class-wordlift-install-3-42-0.php on line 3
    • > PHP Fatal error
      Uncaught Error: Interface 'Wordlift\\Modules\\Plugin_Diagnostics\\Symfony\\Component\\DependencyInjection\\Compiler\\CompilerPassInterface' not found in wp-content/plugins/wordlift/modules/plugin-diagnostics/third-party/vendor/symfony/dependency-injection/Compiler/CheckCircularReferencesPass.php:25
    • > PHP Fatal error
      Uncaught Error: Class 'ActionScheduler_Abstract_RecurringSchedule' not found in wp-content/plugins/wordlift/libraries/action-scheduler/classes/schedules/ActionScheduler_CronSchedule.php:6
    • > PHP Fatal error
      Uncaught Error: Class 'Wordlift\\Videoobject\\Provider\\Api_Provider' not found in wp-content/plugins/wordlift/classes/videoobject/provider/class-youtube.php:12
    • > PHP Fatal error
      Uncaught Error: Class 'Wordlift\\Modules\\Plugin_Diagnostics\\Symfony\\Component\\Config\\Definition\\Builder\odeDefinition' not found in wp-content/plugins/wordlift/modules/plugin-diagnostics/third-party/vendor/symfony/config/Definition/Builder/VariableNodeDefinition.php:19
    • > PHP Fatal error
      Uncaught Error: Interface 'Wordlift\\Relation\\Relations_Interface' not found in wp-content/plugins/wordlift/classes/relation/class-relations.php:13
    • > PHP Fatal error
      Uncaught Error: Interface 'Wordlift\\Modules\\Common\\Symfony\\Component\\DependencyInjection\\Compiler\\CompilerPassInterface' not found in wp-content/plugins/wordlift/modules/common/third-party/vendor/symfony/dependency-injection/Compiler/ExtensionCompilerPass.php:20
    • > PHP Fatal error
      Uncaught Error: Class 'Wordlift\\Modules\\Common\\Symfony\\Component\\DependencyInjection\\Dumper\\Dumper' not found in wp-content/plugins/wordlift/modules/common/third-party/vendor/symfony/dependency-injection/Dumper/PhpDumper.php:41

User-side errors 0% from 1 test

🔹 Test weight: 20 | This is a shallow check for browser errors
Please fix the following user-side errors
    • > GET request to /wp-admin/post-new.php?post_type=entity
    • > Console-api (warning) in wp-includes/js/dist/deprecated.min.js?ver=73ad3591e7bc95f4777a+1:627
    wp.data.registerGenericStore is deprecated since version 5.9. Please use wp.data.register( storeDescriptor ) instead.
    • > GET request to /wp-admin/post-new.php?post_type=entity
    • > Console-api (warning) in wp-includes/js/dist/deprecated.min.js?ver=73ad3591e7bc95f4777a+1:627
    wp.compose.withState is deprecated since version 5.8. Please use wp.element.useState instead.
    • > GET request to /wp-admin/admin.php?page=wl_entity_type_settings
    • > Network (severe)
    wp-admin/admin.php?page=wl_entity_type_settings - Failed to load resource: the server responded with a status of 500 (Internal Server Error)

Optimizations

Plugin configuration 93% from 29 tests

readme.txt 94% from 16 tests

The readme.txt file uses markdown syntax to describe your plugin to the world
Attributes that need to be fixed:
  • Tags: Please reduce the number of tags, currently 19 tag instead of maximum 10
You can take inspiration from this readme.txt

wordlift/wordlift.php 92% from 13 tests

The principal PHP file in "WordLift - AI powered SEO - Schema" v. 3.51.3 is loaded by WordPress automatically on each request
It is important to fix the following:
  • Description: Keep the plugin description shorter than 140 characters (currently 174 characters long)

Code Analysis 3% from 3 tests

File types 0% from 1 test

🔸 Test weight: 35 | There should be no dangerous file extensions present in any WordPress plugin
It is important to fix the following items
  • Even if your plugin relies on executable files (for example a companion app), never distribute executable files with your plugin
    • .crt - Security Certificate in Firefox, IE, Chrome, Safari
      • wp-content/plugins/wordlift/ssl/ca-bundle.crt
226,864 lines of code in 3,583 files:
LanguageFilesBlank linesComment linesLines of code
PHP1,44916,43453,26585,937
JavaScript1,00110,78034,58263,595
CSS8828288431,506
JSON10114023,162
LESS424812784,527
SVG7877124,379
CoffeeScript251,2161,0453,797
PO File71,6261,9893,644
Sass221441632,543
HTML18108711,600
YAML198422982
Markdown194820871
XSD1250256
XML27345
make13012
Ruby1208

PHP code 50% from 2 tests

An overview of cyclomatic complexity and code structure
The following items need your attention
  • Cyclomatic complexity of methods has to be reduced to less than 100 (currently 113)
Cyclomatic complexity
Average complexity per logical line of code0.44
Average class complexity10.62
▷ Minimum class complexity1.00
▷ Maximum class complexity434.00
Average method complexity3.01
▷ Minimum method complexity1.00
▷ Maximum method complexity113.00
Code structure
Namespaces214
Interfaces129
Traits42
Classes1,130
▷ Abstract classes766.73%
▷ Concrete classes1,05493.27%
▷ Final classes211.99%
Methods6,371
▷ Static methods85913.48%
▷ Public methods4,99478.39%
▷ Protected methods4727.41%
▷ Private methods90514.20%
Functions718
▷ Named functions24534.12%
▷ Anonymous functions47365.88%
Constants440
▷ Global constants409.09%
▷ Class constants40090.91%
▷ Public constants39899.50%

Plugin size Passed 2 tests

Image compression Passed 2 tests

Often times overlooked, PNG files can occupy unnecessary space in your plugin
552 compressed PNG files occupy 6.01MB
Potential savings
Compression of 5 random PNG files using pngquant
FileSize - originalSize - compressedSavings
js/leaflet/images/layers.png0.68KB1.05KB0.00%
images/flags/16/Nagorno-Karabakh.png0.14KB0.16KB0.00%
images/flags/32/Switzerland.png0.12KB0.12KB0.00%
images/flags/16/Mozambique.png0.31KB0.32KB0.00%
images/flags/32/Uzbekistan.png0.36KB0.37KB0.00%