Benchmarks
Plugin footprint 65% from 16 tests
Installer Passed 1 test
🔺 Critical test (weight: 50) | The install procedure must perform silently
This plugin's installer ran successfully
Server metrics [RAM: ▼0.33MB] [CPU: ▼36.83ms] Passed 4 tests
Analyzing server-side resources used by Opal Service
This plugin does not affect your website's performance
Page | Memory (MB) | CPU Time (ms) |
---|---|---|
Home / | 3.64 ▲0.18 | 23.12 ▼16.84 |
Dashboard /wp-admin | 3.69 ▲0.38 | 23.79 ▼25.34 |
Posts /wp-admin/edit.php | 3.69 ▲0.33 | 24.23 ▼23.65 |
Add New Post /wp-admin/post-new.php | 3.69 ▼2.20 | 22.61 ▼81.49 |
Media Library /wp-admin/upload.php | 3.69 ▲0.46 | 23.81 ▼12.24 |
Tags /wp-admin/edit-tags.php?taxonomy=opalservice_tags&post_type=opal_service | 3.69 | 25.92 |
Add Service /wp-admin/post-new.php?post_type=opal_service | 3.69 | 22.92 |
Categories /wp-admin/edit-tags.php?taxonomy=opalservice_category_service&post_type=opal_service | 3.69 | 24.07 |
Settings /wp-admin/edit.php?post_type=opal_service&page=opalservice-settings | 3.69 | 24.64 |
Services /wp-admin/edit.php?post_type=opal_service | 3.69 | 23.16 |
Server storage [IO: ▲5.92MB] [DB: ▲0.00MB] Passed 3 tests
Analyzing filesystem and database footprints of this plugin
The plugin installed successfully
Filesystem: 479 new files
Database: no new tables, 11 new options
New WordPress options |
---|
db_upgraded |
widget_theysaidso_widget |
opalservice_settings |
can_compress_scripts |
theysaidso_admin_options |
widget_opalservice_category_service_widget |
opalservice_setup |
widget_recent-comments |
widget_opalservice_sidebar_service_widget |
widget_recent-posts |
... |
Browser metrics Passed 4 tests
This is an overview of browser requirements for Opal Service
Normal browser usage
Page | Nodes | Memory (MB) | Script (ms) | Layout (ms) |
---|---|---|---|---|
Home / | 2,940 ▲205 | 13.76 ▼0.61 | 7.09 ▲5.46 | 41.97 ▼5.63 |
Dashboard /wp-admin | 2,249 ▲61 | 4.90 ▼0.05 | 113.35 ▲10.03 | 43.30 ▼1.49 |
Posts /wp-admin/edit.php | 2,132 ▲43 | 2.03 ▼0.15 | 34.93 ▼5.81 | 33.07 ▼1.58 |
Add New Post /wp-admin/post-new.php | 1,550 ▲36 | 23.33 ▲5.86 | 610.17 ▼60.83 | 53.91 ▼5.31 |
Media Library /wp-admin/upload.php | 1,425 ▲40 | 4.27 ▲0.10 | 94.96 ▼4.82 | 41.73 ▼4.82 |
Tags /wp-admin/edit-tags.php?taxonomy=opalservice_tags&post_type=opal_service | 1,302 | 2.15 | 25.54 | 27.20 |
Add Service /wp-admin/post-new.php?post_type=opal_service | 2,442 | 7.92 | 191.29 | 70.08 |
Categories /wp-admin/edit-tags.php?taxonomy=opalservice_category_service&post_type=opal_service | 1,492 | 3.15 | 44.65 | 28.58 |
Settings /wp-admin/edit.php?post_type=opal_service&page=opalservice-settings | 726 | 1.14 | 6.78 | 15.72 |
Services /wp-admin/edit.php?post_type=opal_service | 1,118 | 1.95 | 31.82 | 26.76 |
Uninstaller [IO: ▲0.00MB] [DB: ▲0.00MB] 50% from 4 tests
🔸 Tests weight: 35 | The uninstall procedure must remove all plugin files and extra database tables
It is recommended to fix the following
- Uninstall procedure validation failed for this plugin
- > Warning in wp-content/plugins/opal-service/inc/vendors/cmb2/libraries/includes/helper-functions.php+44
include_once(wp-content/plugins/opal-service/inc/vendors/cmb2/libraries/includes/CMB2_Hookup.php): failed to open stream: No such file or directory
- This plugin does not fully uninstall, leaving 11 options in the database
- recovery_mode_email_last_sent
- widget_opalservice_category_service_widget
- widget_recent-comments
- widget_recent-posts
- can_compress_scripts
- opalservice_settings
- db_upgraded
- widget_theysaidso_widget
- opalservice_setup
- widget_opalservice_sidebar_service_widget
- ...
Smoke tests 0% from 4 tests
Server-side errors 0% from 1 test
🔹 Test weight: 20 | A shallow check that no server-side errors were triggered
Almost there, just fix the following server-side errors
- 7 occurences, only the last one shown
- > GET request to /wp-admin/edit.php?post_type=opal_service
- > POST request to /wp-admin/admin-ajax.php
- > Warning in wp-content/plugins/opal-service/inc/vendors/cmb2/libraries/includes/helper-functions.php+44
include_once(wp-content/plugins/opal-service/inc/vendors/cmb2/libraries/includes/CMB2_Hookup.php): failed to open stream: No such file or directory
- 7 occurences, only the last one shown
- > GET request to /wp-admin/edit.php?post_type=opal_service
- > POST request to /wp-admin/admin-ajax.php
- > Warning in wp-content/plugins/opal-service/inc/vendors/cmb2/libraries/includes/helper-functions.php+44
include_once(): Failed opening 'wp-content/plugins/opal-service/inc/vendors/cmb2/libraries/includes/CMB2_Hookup.php' for inclusion (include_path='.:/usr/share/php')
- 6 occurences, only the last one shown
- > GET request to /wp-admin/edit.php?post_type=opal_service
- > POST request to /wp-admin/admin-ajax.php
- > Warning in wp-includes/class-wp-hook.php+310
call_user_func_array() expects parameter 1 to be a valid callback, class 'CMB2_Hookup' not found
- > GET request to /wp-admin/edit.php?post_type=opal_service&page=opalservice-settings
- > Error in wp-content/plugins/opal-service/inc/vendors/cmb2/libraries/includes/helper-functions.php+331
Uncaught Error: Class 'CMB2_Hookup' not found in wp-content/plugins/opal-service/inc/vendors/cmb2/libraries/includes/helper-functions.php:331
Stack trace:
#0 wp-content/plugins/opal-service/inc/vendors/cmb2/libraries/includes/helper-functions.php(363): cmb2_print_metabox_form()
#1 wp-content/plugins/opal-service/inc/admin/register-settings.php(138): cmb2_metabox_form()
#2 wp-includes/class-wp-hook.php(310): Opalservice_Plugin_Settings->admin_page_display()
#3 wp-includes/class-wp-hook.php(334): WP_Hook->apply_filters()
#4 wp-includes/plugin.php(517): WP_Hook->do_action()
#5 wp-admin/admin.php(259): do_action()
#6 wp-admin/edit.php(10): require_once('/var/www/wordpr...')
#7 {main}
thrown
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
The following issues need your attention
- 3× PHP files output text when accessed directly:
- > /wp-content/plugins/opal-service/templates/content-opal-service.php
- > /wp-content/plugins/opal-service/opalservice.php
- > /wp-content/plugins/opal-service/templates/content-single-service.php
- 92× GET requests to PHP files have triggered server-side errors or warnings (only 10 are shown):
- > PHP Fatal error
Uncaught Error: Call to undefined function do_shortcode() in wp-content/plugins/opal-service/templates/kingcomposer/element_service_tabs_service.php:6
- > PHP Fatal error
Uncaught Error: Class 'CMB2_Base' not found in wp-content/plugins/opal-service/inc/vendors/cmb2/libraries/includes/CMB2_Field.php:17
- > PHP Fatal error
Uncaught Error: Call to undefined function wp_reset_postdata() in wp-content/plugins/opal-service/templates/shortcodes/list-services.php:59
- > PHP Notice
Undefined variable: limit in wp-content/plugins/opal-service/templates/kingcomposer/element_service_list_service.php on line 5
- > PHP Warning
array_merge(): Expected parameter 2 to be an array, null given in wp-content/plugins/opal-service/templates/kingcomposer/element_service_tabs_service.php on line 3
- > PHP Fatal error
Uncaught Error: Call to undefined function esc_url() in wp-content/plugins/opal-service/inc/vendors/cmb2/custom-fields/upload/media-avatar-tpl.php:12
- > PHP Notice
Undefined variable: atts in wp-content/plugins/opal-service/templates/kingcomposer/element_service_carousel_service.php on line 15
- > PHP Warning
extract() expects parameter 1 to be array, null given in wp-content/plugins/opal-service/templates/kingcomposer/element_service_carousel_service.php on line 16
- > PHP Notice
Undefined variable: column in wp-content/plugins/opal-service/templates/kingcomposer/element_service_list_service.php on line 5
- > PHP Fatal error
Uncaught Error: Call to undefined function vc_map_get_attributes() in wp-content/plugins/opal-service/templates/vc_templates/opalservice_vc_category_service.php:9
- > PHP Fatal error
User-side errors 0% from 1 test
🔹 Test weight: 20 | A shallow check that no browser errors were triggered
Please fix the following browser errors
- > GET request to /wp-admin/post-new.php?post_type=opal_service
- > Console-api (warning) in unknown
/wp-admin/load-scripts.php?c=0&load%5Bchunk_0%5D=jquery-core,jquery-migrate,utils,moxiejs,plupload&ver=6.3.1 1:28609 "jQuery.Deferred exception: $(...).fontIconPicker is not a function" "TypeError: $(...).fontIconPicker is not a function\n at Object.init (/wp-content/plugins/opal-service/assets/js/opalservice.js?ver=1.0.0:96:29)\n at HTMLDocument.\u003Canonymous> (/wp-content/plugins/opal-service/assets/js/opalservice.js?ver=1.0.0:167:45)\n at e (/wp-admin/load-scripts.php?c=0&load%5Bchunk_0%5D=jquery-core,jquery-migrate,utils,moxiejs,plupload&ver=6.3.1:2:26990)\n at t (/wp-admin/load-scripts.php?c=0&load%5Bchunk_0%5D=jquery-core,jquery-migrate,utils,moxiejs,plupload&ver=6.3.1:2:27292)" undefined
- > GET request to /wp-admin/post-new.php?post_type=opal_service
- > Javascript (severe) in unknown
/wp-admin/load-scripts.php?c=0&load%5Bchunk_0%5D=jquery-core,jquery-migrate,utils,moxiejs,plupload&ver=6.3.1 1:28721 Uncaught TypeError: $(...).fontIconPicker is not a function
Optimizations
Plugin configuration 96% from 29 tests
readme.txt Passed 16 tests
Don't ignore readme.txt as it is the file that instructs WordPress.org on how to present your plugin to the world
1 plugin tags: services
opal-service/opalservice.php 92% from 13 tests
The primary PHP file in "Opal Service" version 1.9.1 is used by WordPress to initiate all plugin functionality
Please take the time to fix the following:
- Main file name: It is recommended to name the main PHP file as the plugin slug ("opal-service.php" instead of "opalservice.php")
Code Analysis Passed 3 tests
File types Passed 1 test
🔸 Test weight: 35 | This is an overview of programming languages used in this plugin; dangerous file extensions are not allowed
Everything looks great! No dangerous files found in this plugin64,874 lines of code in 309 files:
Language | Files | Blank lines | Comment lines | Lines of code |
---|---|---|---|---|
PO File | 120 | 14,315 | 18,502 | 32,323 |
PHP | 124 | 3,143 | 7,548 | 12,859 |
CSS | 39 | 473 | 1,367 | 11,995 |
JavaScript | 17 | 1,537 | 886 | 5,391 |
SVG | 5 | 0 | 0 | 1,592 |
Markdown | 3 | 233 | 0 | 701 |
JSON | 1 | 0 | 0 | 13 |
PHP code Passed 2 tests
An overview of cyclomatic complexity and code structure
Great job! No cyclomatic complexity issues were detected in this plugin
Cyclomatic complexity | |
---|---|
Average complexity per logical line of code | 0.41 |
Average class complexity | 14.74 |
▷ Minimum class complexity | 1.00 |
▷ Maximum class complexity | 186.00 |
Average method complexity | 3.06 |
▷ Minimum method complexity | 1.00 |
▷ Maximum method complexity | 31.00 |
Code structure | ||
---|---|---|
Namespaces | 0 | |
Interfaces | 0 | |
Traits | 0 | |
Classes | 101 | |
▷ Abstract classes | 9 | 8.91% |
▷ Concrete classes | 92 | 91.09% |
▷ Final classes | 1 | 1.09% |
Methods | 677 | |
▷ Static methods | 153 | 22.60% |
▷ Public methods | 578 | 85.38% |
▷ Protected methods | 95 | 14.03% |
▷ Private methods | 4 | 0.59% |
Functions | 74 | |
▷ Named functions | 74 | 100.00% |
▷ Anonymous functions | 0 | 0.00% |
Constants | 26 | |
▷ Global constants | 12 | 46.15% |
▷ Class constants | 14 | 53.85% |
▷ Public constants | 14 | 100.00% |
Plugin size Passed 2 tests
Image compression Passed 2 tests
Using a strong compression for your PNG files is a great way to speed-up your plugin
19 compressed PNG files occupy 0.11MB
Potential savings
Compression of 5 random PNG files using pngquant | |||
---|---|---|---|
File | Size - original | Size - compressed | Savings |
inc/vendors/cmb2/libraries/images/ui-bg_highlight-soft_75_cccccc_1x100.png | 0.10KB | 0.17KB | 0.00% |
inc/vendors/cmb2/libraries/images/ui-bg_glass_55_fbf9ee_1x400.png | 0.12KB | 0.14KB | 0.00% |
inc/vendors/cmb2/libraries/images/ui-icons_cd0a0a_256x240.png | 4.27KB | 4.11KB | ▼ 3.78% |
inc/vendors/cmb2/libraries/images/ui-bg_flat_75_ffffff_40x100.png | 0.17KB | 0.08KB | ▼ 51.12% |
assets/img/service-icon.png | 1.67KB | 1.37KB | ▼ 18.05% |