Turnstile 1.4.0

Does Turnstile work with WordPress 6.9.4 and PHP 8.1.12? A smoke test was performed on .

Summary

Errors
4PHP fatal errors
2PHP warnings
1JavaScript exceptions
1Page failed to load
  • 1 500 Internal Server Error
1Resource error (CSS, JS, images, fonts and so on.)
  • 1 net::ERR_FAILED
Performance

Memory usage: 78.07 KiB
The average PHP memory usage increased by this amount after activating by the plugin.

Page speed impact: insignificant.
The plugin didn't make the site noticeably slower.

Environment
WordPress version6.9.4
PHP version8.1.12
MySQL version10.6.10
PHP memory limit512M
Plugin Info
Last updated
Active installs <10
WordPress.org page https://wordpress.org/plugins/turnstile/
Badges

WordPress compatibility badge PHP compatibility badge

Get badge code

Pages 3

WordPress › Error

Page screenshot: WordPress › Error
URL /wp-admin/plugins.php?activate=true&plugin_status=all&paged=1&s=
Requested URL /wp-admin/plugins.php?action=activate&plugin=turnstile%2Fturnstile.php&plugin_status=all&paged=1&s&_wpnonce=5047b86598
Aspect after-activation
HTTP status 500
Load time 0.124 s
Memory usage N/A
JS errors None
Resource errors None

Settings → Turnstile user tracking

Page screenshot: Settings → Turnstile user tracking
URL /wp-admin/options-general.php?page=turnstile-setting-admin
Aspect menu-item
HTTP status 200
Load time 0.268 s
Memory usage 3.81 MiB
JS errors None
Resource errors None

Test site – Just another WordPress site

Page screenshot: Test site – Just another WordPress site
URL /
Aspect front-page
HTTP status 200
Load time 0.318 s
Memory usage 4.13 MiB
JS errors
[
    {
        "message": "TypeError: turnstile.Turnstile is not a constructor\n    at turnstile_client_js-js-after:241:2",
        "trace": null,
        "code": null
    }
]
Resource errors
[
    {
        "status": null,
        "statusText": null,
        "url": "https://turnstile.me/event",
        "errorString": "net::ERR_FAILED"
    }
]

Benchmark

URL Load time Memory usage
Inactive Active Change Inactive Active Change
/wp-admin/index.php0.373 s0.342 s-0.031 s3.78 MiB3.87 MiB+ 93.74 KiB
/wp-admin/edit.php0.359 s0.307 s-0.052 s3.78 MiB3.87 MiB+ 87.91 KiB
/wp-admin/post-new.php0.864 s0.276 s-0.588 s6.31 MiB
/wp-admin/upload.php0.649 s0.528 s-0.121 s3.74 MiB3.81 MiB+ 76.41 KiB
/wp-admin/options-writing.php0.334 s0.356 s+0.022 s3.71 MiB3.79 MiB+ 80.4 KiB
/wp-admin/media-new.php0.484 s0.350 s-0.134 s3.7 MiB3.79 MiB+ 88.59 KiB
/wp-admin/edit-tags.php?taxonomy=category0.463 s0.309 s-0.154 s3.72 MiB3.81 MiB+ 93.45 KiB
/wp-admin/post-new.php?post_type=page0.694 s0.266 s-0.428 s6.3 MiB
/wp-admin/options-discussion.php0.359 s0.288 s-0.071 s3.71 MiB3.79 MiB+ 76.59 KiB
/wp-admin/edit-comments.php0.338 s0.303 s-0.035 s3.73 MiB3.81 MiB+ 76.39 KiB
/0.286 s0.210 s-0.076 s4.11 MiB4.14 MiB+ 29.12 KiB
Average 0.473 s0.321 s-0.152 s4.23 MiB3.85 MiB+ 78.07 KiB

Code Statistics

Note: Third-party libraries and minified JS/CSS files are excluded from these statistics where possible, so the numbers you see here may be lower than those reported by other tools.

PHP
JavaScript
CSS
Language % Lines of code Comment lines Files
PHP81.8%1,07313822
JavaScript10.1%132354
CSS8.1%10612
Total 1,311 174 28

PHP Code Analysis | More results »

Lines of code 1,089
Total complexity 209
Median class complexity 4.0
Median method complexity 1.0
Most complex class Turnstile
Most complex function TurnstileAdmin::save_post()
Classes 11
Methods 81
Functions 29

Additions

Things that the plugin adds to the site. This section is not intended to be comprehensive. The test tool only looks for a few specific types of added content.

No new entries found.

PHP Error Log 53 lines

[26-Mar-2026 18:32:42 UTC] PHP Fatal error:  Uncaught TypeError: call_user_func_array(): Argument #1 ($callback) must be a valid callback, cannot access private method Turnstile::allowed_redirect_hosts() in /wp-includes/class-wp-hook.php:343
Stack trace:
#0 /wp-includes/plugin.php(205): WP_Hook->apply_filters()
#1 /wp-includes/pluggable.php(1721): apply_filters()
#2 /wp-includes/pluggable.php(1639): wp_validate_redirect()
#3 /wp-content/plugins/turnstile/src/includes/core/functions.php(12): wp_safe_redirect()
#4 /wp-content/plugins/turnstile/src/includes/admin/common.php(18): turnstile_redirect()
#5 /wp-includes/class-wp-hook.php(341): turnstile_do_activation_redirect()
#6 /wp-includes/class-wp-hook.php(365): WP_Hook->apply_filters()
#7 /wp-includes/plugin.php(522): WP_Hook->do_action()
#8 /wp-content/plugins/turnstile/src/includes/admin/actions.php(30): do_action()
#9 /wp-includes/class-wp-hook.php(341): turnstile_admin_init()
#10 /wp-includes/class-wp-hook.php(365): WP_Hook->apply_filters()
#11 /wp-includes/plugin.php(522): WP_Hook->do_action()
#12 /wp-admin/admin.php(180): do_action()
#13 /wp-admin/plugins.php(10): require_once('...')
#14 {main}
  thrown in /wp-includes/class-wp-hook.php on line 343
[26-Mar-2026 18:32:45 UTC] PHP Warning:  Trying to access array offset on value of type bool in /wp-content/plugins/turnstile/src/turnstile.php on line 119
[26-Mar-2026 18:32:46 UTC] PHP Fatal error:  Uncaught TypeError: implode(): Argument #2 ($array) must be of type ?array, string given in /wp-content/plugins/turnstile/src/turnstile.php:126
Stack trace:
#0 /wp-content/plugins/turnstile/src/turnstile.php(126): implode()
#1 /wp-content/plugins/turnstile/src/turnstile.php(173): Turnstile->url()
#2 /wp-content/plugins/turnstile/src/includes/admin/class-turnstile-meta-boxes.php(146): Turnstile->connect_url()
#3 /wp-content/plugins/turnstile/src/includes/admin/class-turnstile-meta-boxes.php(134): TurnstileMetaBoxes->render_connect_required()
#4 /wp-admin/includes/template.php(1453): TurnstileMetaBoxes->render_metrics_meta_box()
#5 /wp-admin/includes/post.php(2401): do_meta_boxes()
#6 /wp-admin/edit-form-blocks.php(383): the_block_editor_meta_boxes()
#7 /wp-admin/post-new.php(72): require('...')
#8 {main}
  thrown in /wp-content/plugins/turnstile/src/turnstile.php on line 126
[26-Mar-2026 18:32:49 UTC] PHP Fatal error:  Uncaught TypeError: implode(): Argument #2 ($array) must be of type ?array, string given in /wp-content/plugins/turnstile/src/turnstile.php:126
Stack trace:
#0 /wp-content/plugins/turnstile/src/turnstile.php(126): implode()
#1 /wp-content/plugins/turnstile/src/turnstile.php(173): Turnstile->url()
#2 /wp-content/plugins/turnstile/src/includes/admin/class-turnstile-meta-boxes.php(146): Turnstile->connect_url()
#3 /wp-content/plugins/turnstile/src/includes/admin/class-turnstile-meta-boxes.php(134): TurnstileMetaBoxes->render_connect_required()
#4 /wp-admin/includes/template.php(1453): TurnstileMetaBoxes->render_metrics_meta_box()
#5 /wp-admin/includes/post.php(2401): do_meta_boxes()
#6 /wp-admin/edit-form-blocks.php(383): the_block_editor_meta_boxes()
#7 /wp-admin/post-new.php(72): require('...')
#8 {main}
  thrown in /wp-content/plugins/turnstile/src/turnstile.php on line 126
[26-Mar-2026 18:32:50 UTC] PHP Warning:  Trying to access array offset on value of type bool in /wp-content/plugins/turnstile/src/turnstile.php on line 119
[26-Mar-2026 18:32:51 UTC] PHP Fatal error:  Uncaught TypeError: call_user_func_array(): Argument #1 ($callback) must be a valid callback, cannot access private method Turnstile::allowed_redirect_hosts() in /wp-includes/class-wp-hook.php:343
Stack trace:
#0 /wp-includes/plugin.php(205): WP_Hook->apply_filters()
#1 /wp-includes/pluggable.php(1721): apply_filters()
#2 /wp-includes/functions.php(1986): wp_validate_redirect()
#3 /wp-includes/pluggable.php(1374): wp_get_referer()
#4 /wp-admin/plugins.php(204): check_admin_referer()
#5 {main}
  thrown in /wp-includes/class-wp-hook.php on line 343
See also: All tests for this plugin