{"id":311231,"date":"2026-05-13T00:10:00","date_gmt":"2026-05-13T00:10:00","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/shed-turnstile\/"},"modified":"2026-05-13T00:10:00","modified_gmt":"2026-05-13T00:10:00","slug":"shed-turnstile","status":"publish","type":"plugin","link":"https:\/\/ro.wordpress.org\/plugins\/shed-turnstile\/","author":23489683,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"1.0.6","stable_tag":"1.0.6","tested":"6.9.4","requires":"6.0","requires_php":"8.1","requires_plugins":null,"header_name":"Shed Turnstile","header_author":"WP Shed","header_description":"Cloudflare Turnstile \u3092\u4e00\u5143\u7ba1\u7406\u3057\u3001\u4ed6\u30d7\u30e9\u30b0\u30a4\u30f3\u3078 API \u3092\u63d0\u4f9b\u3059\u308b","assets_banners_color":"434952","last_updated":"2026-05-13 00:10:00","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/wpshed.jp\/plugins\/shed-turnstile\/","header_author_uri":"https:\/\/wpshed.jp","rating":0,"author_block_rating":0,"active_installs":0,"downloads":25,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.6":{"tag":"1.0.6","author":"teamstaccato","date":"2026-05-13 00:10:00"}},"upgrade_notice":{"1.0.6":"<p>Apply wp_unslash() to nonce field before verification for WordPress Coding Standards compliance.<\/p>","1.0.5":"<p>Security hardening: sanitize externally-supplied IP address in verify_token(). Remove HTTP_CLIENT_IP trust.<\/p>","1.0.4":"<p>Added i18n support and GPL-2.0 LICENSE file for WordPress.org compliance.<\/p>","1.0.3":"<p>All prefixes renamed. If upgrading from 1.0.2 or earlier, existing Turnstile keys will be automatically migrated.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3530417,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3530417,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3530417,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3530417,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.6"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3530417,"resolution":"1","location":"assets","locale":"","width":873,"height":870}},"screenshots":{"1":"Settings page \u2014 enter your Cloudflare Turnstile Site Key and Secret Key."},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[166108,362,3882,599,214603],"plugin_category":[44,54],"plugin_contributors":[262385],"plugin_business_model":[],"class_list":["post-311231","plugin","type-plugin","status-publish","hentry","plugin_tags-bot-protection","plugin_tags-captcha","plugin_tags-cloudflare","plugin_tags-spam","plugin_tags-turnstile","plugin_category-discussion-and-community","plugin_category-security-and-spam-protection","plugin_contributors-teamstaccato","plugin_committers-teamstaccato"],"banners":{"banner":"https:\/\/ps.w.org\/shed-turnstile\/assets\/banner-772x250.png?rev=3530417","banner_2x":"https:\/\/ps.w.org\/shed-turnstile\/assets\/banner-1544x500.png?rev=3530417","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/shed-turnstile\/assets\/icon-128x128.png?rev=3530417","icon_2x":"https:\/\/ps.w.org\/shed-turnstile\/assets\/icon-256x256.png?rev=3530417","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/shed-turnstile\/assets\/screenshot-1.png?rev=3530417","caption":"Settings page \u2014 enter your Cloudflare Turnstile Site Key and Secret Key."}],"raw_content":"<!--section=description-->\n<p>Shed Turnstile provides centralized management of Cloudflare Turnstile Site Key and Secret Key, offering a shared API for compatible plugins such as Shed Form.<\/p>\n\n<p><strong>Features:<\/strong><\/p>\n\n<ul>\n<li>Centralized Site Key \/ Secret Key management<\/li>\n<li>API functions callable from other plugins<\/li>\n<li>Turnstile widget rendering helper<\/li>\n<li>Server-side token verification<\/li>\n<\/ul>\n\n<h4>API Functions<\/h4>\n\n<ul>\n<li><code>shedturn_is_configured()<\/code> \u2014 Check if keys are configured<\/li>\n<li><code>shedturn_render_widget( $args )<\/code> \u2014 Return widget HTML<\/li>\n<li><code>shedturn_verify_token( $token, $ip )<\/code> \u2014 Verify a Turnstile token<\/li>\n<li><code>shedturn_enqueue_script()<\/code> \u2014 Enqueue Cloudflare JS<\/li>\n<\/ul>\n\n<h4>\u65e5\u672c\u8a9e\u306e\u8aac\u660e<\/h4>\n\n<p>Shed Turnstile \u306f Cloudflare Turnstile \u306e Site Key \/ Secret Key \u3092\u4e00\u5143\u7ba1\u7406\u3057\u3001Shed Form \u306a\u3069\u306e\u5bfe\u5fdc\u30d7\u30e9\u30b0\u30a4\u30f3\u306b\u5171\u901a\u306e API \u3092\u63d0\u4f9b\u3057\u307e\u3059\u3002<\/p>\n\n<p><strong>\u4e3b\u306a\u6a5f\u80fd:<\/strong><\/p>\n\n<ul>\n<li>Site Key \/ Secret Key \u306e\u4e00\u5143\u7ba1\u7406<\/li>\n<li>\u4ed6\u30d7\u30e9\u30b0\u30a4\u30f3\u304b\u3089\u547c\u3073\u51fa\u305b\u308b API \u95a2\u6570<\/li>\n<li>Turnstile \u30a6\u30a3\u30b8\u30a7\u30c3\u30c8\u306e\u63cf\u753b\u30d8\u30eb\u30d1\u30fc<\/li>\n<li>\u30c8\u30fc\u30af\u30f3\u306e\u30b5\u30fc\u30d0\u30fc\u30b5\u30a4\u30c9\u691c\u8a3c<\/li>\n<\/ul>\n\n<h3>Third-Party Services<\/h3>\n\n<p>This plugin connects to Cloudflare's servers for Turnstile verification.<\/p>\n\n<ul>\n<li>Service: <a href=\"https:\/\/www.cloudflare.com\/products\/turnstile\/\">Cloudflare Turnstile<\/a><\/li>\n<li>Privacy Policy: <a href=\"https:\/\/www.cloudflare.com\/privacypolicy\/\">https:\/\/www.cloudflare.com\/privacypolicy\/<\/a><\/li>\n<li>Terms of Service: <a href=\"https:\/\/www.cloudflare.com\/website-terms\/\">https:\/\/www.cloudflare.com\/website-terms\/<\/a><\/li>\n<li>Data sent: Turnstile token, site key, user IP address<\/li>\n<li>When: Each time a form with Turnstile enabled is submitted<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin folder to <code>\/wp-content\/plugins\/<\/code>, or install directly through the WordPress plugin screen.<\/li>\n<li>Activate the plugin through the 'Plugins' menu.<\/li>\n<li>Go to <strong>Settings \u2192 Shed Turnstile<\/strong> and enter your Cloudflare Turnstile Site Key and Secret Key.<\/li>\n<li>Compatible plugins (e.g. Shed Form) will automatically detect and use the configured keys.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"where%20do%20i%20get%20a%20turnstile%20site%20key%20and%20secret%20key%3F\"><h3>Where do I get a Turnstile Site Key and Secret Key?<\/h3><\/dt>\n<dd><p>Log in to your Cloudflare dashboard, navigate to Turnstile, and create a new site. The Site Key and Secret Key will be provided.<\/p><\/dd>\n<dt id=\"does%20this%20plugin%20work%20standalone%3F\"><h3>Does this plugin work standalone?<\/h3><\/dt>\n<dd><p>This plugin manages Turnstile keys and provides an API. To use Turnstile on your forms, you need a compatible form plugin such as Shed Form.<\/p><\/dd>\n<dt id=\"is%20cloudflare%20turnstile%20free%3F\"><h3>Is Cloudflare Turnstile free?<\/h3><\/dt>\n<dd><p>Yes. Cloudflare Turnstile is a free CAPTCHA alternative service.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.6<\/h4>\n\n<ul>\n<li>Fixed: Apply wp_unslash() to nonce field in admin settings save handler<\/li>\n<li>Added: languages\/shed-turnstile.pot for translation support<\/li>\n<\/ul>\n\n<h4>1.0.5<\/h4>\n\n<ul>\n<li>Fixed: Sanitize externally-supplied $ip parameter in shedturn_verify_token()<\/li>\n<li>Fixed: Remove HTTP_CLIENT_IP trust in shedturn_get_client_ip() (spoofable header)<\/li>\n<li>Fixed: Add is_array() guard on json_decode result<\/li>\n<li>Added: Screenshots section to readme.txt<\/li>\n<\/ul>\n\n<h4>1.0.4<\/h4>\n\n<ul>\n<li>Added: GPL-2.0 LICENSE file<\/li>\n<li>Added: Domain Path header<\/li>\n<li>Fixed: i18n \u2014 all user-facing strings wrapped with __()<\/li>\n<li>Fixed: uninstall.php now removes legacy wsf_turnstile_* options<\/li>\n<\/ul>\n\n<h4>1.0.3<\/h4>\n\n<ul>\n<li>Changed: All function, class, constant, hook, and option prefixes renamed from wst_\/WST_ to shedturn_\/SHEDTURN_\/Shedturn_.<\/li>\n<\/ul>\n\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>Changed: Plugin slug<\/li>\n<\/ul>","raw_excerpt":"Centralized Cloudflare Turnstile management with a shared API for other plugins.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/ro.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/311231","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ro.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/ro.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/ro.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=311231"}],"author":[{"embeddable":true,"href":"https:\/\/ro.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/teamstaccato"}],"wp:attachment":[{"href":"https:\/\/ro.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=311231"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/ro.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=311231"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/ro.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=311231"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/ro.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=311231"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/ro.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=311231"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/ro.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=311231"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}