{"id":324018,"date":"2026-06-15T13:32:48","date_gmt":"2026-06-15T13:32:48","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/openporte-spam-protection\/"},"modified":"2026-07-26T20:26:10","modified_gmt":"2026-07-26T20:26:10","slug":"openporte","status":"publish","type":"plugin","link":"https:\/\/eu.wordpress.org\/plugins\/openporte\/","author":8177095,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.28.0","stable_tag":"1.28.0","tested":"7.0.2","requires":"5.6","requires_php":"8.0","requires_plugins":null,"header_name":"OpenPorte Spam Protection","header_author":"OpenPorte Contributors","header_description":"OpenPorte is a free, open-source CAPTCHA alternative that offers robust spam and bot protection without using cookies, ensuring full GDPR compliance by design. A community-maintained fork of the ALTCHA Spam Protection plugin (v1).","assets_banners_color":"ffffff","last_updated":"2026-07-26 20:26:10","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/github.com\/jcberthon\/openporte\/graphs\/contributors","rating":5,"author_block_rating":0,"active_installs":10,"downloads":268,"num_ratings":1,"support_threads":1,"support_threads_resolved":1,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.27.1":{"tag":"1.27.1","author":"huygens-25","date":"2026-06-15 13:32:23"},"1.27.2":{"tag":"1.27.2","author":"huygens-25","date":"2026-06-22 14:17:01"},"1.27.3":{"tag":"1.27.3","author":"huygens-25","date":"2026-07-10 21:14:16"},"1.28.0":{"tag":"1.28.0","author":"huygens-25","date":"2026-07-26 20:26:10"}},"upgrade_notice":{"1.28.0":"<p>&quot;Custom HTML&quot; is deprecated and switched off by this upgrade. Sites using the\n     tags (in theme templates or custom HTML) are concerned. If\naffected, re-enable the setting, or replace those tags with the <code>[openporte]<\/code>\nshortcode.\nThe paid spam-filter classifier is removed.<\/p>"},"ratings":{"1":0,"2":0,"3":0,"4":0,"5":1},"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3603394,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3603394,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256},"icon.svg":{"filename":"icon.svg","revision":3603394,"resolution":false,"location":"assets","locale":false}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3603394,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3603394,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.27.1","1.27.2","1.27.3","1.28.0"],"block_files":[],"assets_screenshots":[],"screenshots":{"1":"Friction-less Captcha without puzzles","2":"Configuration","3":"Protection on the login page","4":"Protection with WPForms","5":"Floating UI Captcha"}},"plugin_section":[],"plugin_tags":[267985,11324,2656,362,599],"plugin_category":[44,54],"plugin_contributors":[267252],"plugin_business_model":[],"class_list":["post-324018","plugin","type-plugin","status-publish","hentry","plugin_tags-altcha","plugin_tags-anti-bot","plugin_tags-anti-spam","plugin_tags-captcha","plugin_tags-spam","plugin_category-discussion-and-community","plugin_category-security-and-spam-protection","plugin_contributors-huygens-25","plugin_committers-huygens-25","plugin_support_reps-huygens-25"],"banners":{"banner":"https:\/\/ps.w.org\/openporte\/assets\/banner-772x250.png?rev=3603394","banner_2x":"https:\/\/ps.w.org\/openporte\/assets\/banner-1544x500.png?rev=3603394","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":"https:\/\/ps.w.org\/openporte\/assets\/icon.svg?rev=3603394","icon":"https:\/\/ps.w.org\/openporte\/assets\/icon.svg?rev=3603394","icon_2x":false,"generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>OpenPorte is a community-maintained fork of the ALTCHA Spam Protection\nplugin for WordPress (version 1), which provides a free, open source,\nself-hostable, privacy-friendly CAPTCHA alternative based on a proof-\nof-work mechanism \u2014 no cookies, no tracking, GDPR-friendly by design.<\/p>\n\n<p>For the list of contributors, refer to our GitHub project: <a href=\"https:\/\/github.com\/jcberthon\/openporte\/graphs\/contributors?from=1.6.2024\">Contributors<\/a>.<\/p>\n\n<h4>AI-assisted development<\/h4>\n\n<p>AI-assisted project. Architecture, security decisions, and final review are\nmine; AI tools (Claude, Mistral, and others) help with drafting code, tests,\ntranslations, and documentation \u2014 without them, one person couldn't keep\nthis fork alive.<\/p>\n\n<h4>Background<\/h4>\n\n<p>The original ALTCHA WordPress plugin (v1) was open source (GPLv2). Its\nauthors have since released a version 2\/3 which is no longer open source,\nand some features that were free in v1 are now paid. They no longer\nmaintain v1 and recommend that users migrate to v2\/v3. See the official\nproject at https:\/\/altcha.org for their offering.<\/p>\n\n<p>OpenPorte continues the v1 line as free software (GPLv2 or later) for users\nwho want to stay on a fully open-source, self-hosted solution. It is a\nfaithful fork: existing v1 installations can switch to OpenPorte and keep\ntheir settings (see Upgrading).<\/p>\n\n<h4>Compatibility<\/h4>\n\n<p>OpenPorte is backward-compatible with ALTCHA v1:<\/p>\n\n<ul>\n<li>Your existing settings are migrated automatically on activation.<\/li>\n<li>The <code>[altcha]<\/code> shortcode keeps working (alongside the new <code>[openporte]<\/code>).<\/li>\n<li>The <code>altcha_*<\/code> filters and actions keep firing as deprecated aliases.<\/li>\n<li>Custom API Mode has been verified against <a href=\"https:\/\/gatecha.org\">GateCHA<\/a>,\nan open source server implementing the creation and verification of ALTCHA challenges.<\/li>\n<\/ul>\n\n<p>See the Deprecations section for the full list of compatibility aliases and\nwhat they map to.<\/p>\n\n<h3>Upgrading<\/h3>\n\n<h4>From the original ALTCHA v1 plugin<\/h4>\n\n<p>Deactivate the old ALTCHA plugin, then install and activate OpenPorte. Your\nexisting configuration is detected and copied into the OpenPorte settings on\nfirst activation; the original ALTCHA settings are left untouched, so you can\nroll back to ALTCHA v1 without losing anything. Do not run both plugins at the\nsame time.<\/p>\n\n<h4>From ALTCHA v2\/v3<\/h4>\n\n<p>If your site was already moved to ALTCHA v2\/v3 (for example by the automatic\n3.0.0 update), your original v1 settings are normally still in the database:\nthe v2\/v3 upgrade neither migrates nor removes them. Deactivate ALTCHA, then\ninstall and activate OpenPorte \u2014 it finds and imports the v1 settings, even\nwhen the v1 plugin itself has long been deleted. Settings made in v2\/v3 are\nnot read.<\/p>\n\n<h3>Deprecations<\/h3>\n\n<p>The following ALTCHA-era identifiers are kept as aliases for backward\ncompatibility and are scheduled for removal in a future release:<\/p>\n\n<ul>\n<li>The <code>[altcha]<\/code> shortcode \u2014 use <code>[openporte]<\/code>.<\/li>\n<li>The <code>altcha\/v1<\/code> REST namespace \u2014 use <code>openporte\/v1<\/code>.<\/li>\n<li>The <code>altcha_*<\/code> filters and actions \u2014 now firing through WordPress' deprecated\nhook mechanism; use the <code>openporte_*<\/code> equivalents.<\/li>\n<li>The <code>AltchaPlugin<\/code> class and the <code>ALTCHA_VERSION<\/code> \/ <code>ALTCHA_WIDGET_VERSION<\/code>\nconstants \u2014 use <code>OpenPortePlugin<\/code> and the <code>OPENPORTE_*<\/code> constants.<\/li>\n<li>Integrations targeting paid-only third-party plugins; affected users should\nmigrate to the official ALTCHA v2\/v3 plugin.<\/li>\n<li>The \"Custom HTML\" integration (auto-configuration of hand-written\n   tags) \u2014 place the <code>[openporte]<\/code> shortcode instead. You can\nre-enable it for now under Settings \u2192 OpenPorte \u2192 Integrations.<\/li>\n<\/ul>\n\n<h3>Privacy<\/h3>\n\n<h4>No cookies, no tracking<\/h4>\n\n<p>OpenPorte prioritizes user privacy by avoiding the use of cookies and fingerprinting techniques.<\/p>\n\n<h4>No external service<\/h4>\n\n<p>This plugin remains fully contained within your WordPress installation, eliminating any reliance on external services.<\/p>\n\n<h3>Modes of Operation<\/h3>\n\n<p>OpenPorte verifies submissions in one of two modes, selected in the settings\n(API Mode):<\/p>\n\n<ul>\n<li>Self-hosted (default) \u2014 a proof-of-work challenge is issued and verified by\nyour own WordPress site through the REST API. Fully self-contained, with no\nexternal service and no additional setup beyond enabling the integrations you\nneed.<\/li>\n<li>Custom \u2014 point the Challenge URL at your own ALTCHA-compatible backend (for\nexample a self-hosted ALTCHA Sentinel, or <a href=\"https:\/\/gatecha.org\">GateCHA<\/a>).\nSubmissions are verified with your site's shared secret.<\/li>\n<\/ul>\n\n<p>The paid altcha.org regional SaaS classifier offered by earlier versions has\nbeen removed; both remaining modes are free and self-hostable.<\/p>\n\n<h3>REST API<\/h3>\n\n<p>This plugin requires the WordPress REST API. If you are using any \"Disable REST API\" plugins, ensure that the endpoint <code>\/altcha\/v1\/challenge<\/code> (marked for deprecation) and <code>\/openporte\/v1\/challenge<\/code> are allowed.<\/p>\n\n<h3>Supported Integrations<\/h3>\n\n<ul>\n<li>CoBlocks<\/li>\n<li>Contact Form 7<\/li>\n<li>Elementor Pro Forms (deprecated \u2014 paid plugin, see Deprecations)<\/li>\n<li>Formidable Forms<\/li>\n<li>Forminator<\/li>\n<li>GravityForms<\/li>\n<li>HTML Forms<\/li>\n<li>wpDiscuz<\/li>\n<li>WPForms<\/li>\n<li>WordPress Login, Register, Password reset<\/li>\n<li>WordPress Comments<\/li>\n<li>WooCommerce<\/li>\n<li>Many other plugins and your own content (via the <code>[openporte]<\/code> shortcode, or the deprecated <code>[altcha]<\/code> alias)<\/li>\n<\/ul>\n\n<h3>Source Code<\/h3>\n\n<p>All source code for the plugin, and the ALTCHA widget is available on GitHub. In the repository, you'll also find versions of non-minified JavaScript and CSS assets:<\/p>\n\n<ul>\n<li>Plugin: https:\/\/github.com\/jcberthon\/openporte<\/li>\n<li>ALTCHA Widget: https:\/\/github.com\/altcha-org\/altcha<\/li>\n<\/ul>\n\n<!--section=installation-->\n<p>Download, install and activate <code>OpenPorte Spam Protection<\/code>.<\/p>\n\n<p>Alternatively, install the plugin manually:<\/p>\n\n<ol>\n<li>Download the <code>.zip<\/code> from the <a href=\"https:\/\/github.com\/jcberthon\/openporte\/releases\">Releases<\/a>.<\/li>\n<li>Upload <code>openporte<\/code> folder to the <code>\/wp-content\/plugins\/<\/code> directory  <\/li>\n<li>Activate the plugin through the 'Plugins' menu in WordPress  <\/li>\n<li>Review the settings and enable your integrations<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"is%20placing%20the%20%60%5Bopenporte%5D%60%20shortcode%20enough%20to%20protect%20a%20form%3F\"><h3>Is placing the `[openporte]` shortcode enough to protect a form?<\/h3><\/dt>\n<dd><p>Not on its own. The shortcode displays the widget; the verification that\nrejects unsolved submissions is performed by the integration for that form\nplugin. For a supported plugin, enable its toggle under Settings \u2192 OpenPorte \u2192\nIntegrations as well.<\/p>\n\n<p>In a form plugin OpenPorte has no integration for, the shortcode still shows\nthe widget and visitors still have to tick it, but nothing checks the result on\nthe server \u2014 a bot posting directly to the form's endpoint is not stopped. See\n<strong>Supported Integrations<\/strong> for the list.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.28.0<\/h4>\n\n<ul>\n<li>ALTCHA Widget 2.3.0. Note: the bundled widget file still reports \"2.2.4\" \u2014 upstream 2.3.0 only repackaged optional plugins OpenPorte does not use and did not rebuild its distributed file, which is byte-identical to 2.2.4. Nothing is missing.<\/li>\n<li>Removed the remaining spam-filter plumbing from the paid-SaaS classifier; verification relies on the proof-of-work challenge alone.<\/li>\n<li>WordPress and plugin integration settings are now simple on\/off toggles rather than dropdowns. The removal of the spam filter reduced the dropdown choices to two values which justified their replacement with toggles. Existing settings automatically convert on upgrades; any legacy mode that displayed or verified the captcha is now \"on\". The two \"shortcode\" modes preserve their behaviour: HTML Forms\u2019 shortcode-placed widget verification remains unaffected, while Contact Form 7\u2019s verification is enforced even though the integration skips auto-injection for any form already displaying a widget.<\/li>\n<li>New Algorithm setting (SHA-256\/384\/512). New installs are seeded with SHA-512; upgraded sites keep SHA-256, so existing custom ALTCHA-compatible backends continue to verify.<\/li>\n<li>Expiration is now a preset list (5\/30\/60 minutes) plus a Custom input accepting 0-14400 seconds; new installs default to 5 minutes.<\/li>\n<li>Retuned the Low\/Medium\/High proof-of-work complexity for modern hardware; developers can adjust the ranges via the new <code>openporte_complexity_matrix<\/code> filter.<\/li>\n<li>The settings page now health-checks a custom Challenge URL and warns about misconfiguration (unreachable backend, algorithm or secret mismatch) before visitors are impacted.<\/li>\n<li>Settings screen refresh: per-field hints throughout, a Show\/Hide toggle on the secret field (now called \"Shared secret\"), and clearer API-mode wording. The \"Floating UI\" checkbox is now a \"Display Mode\" dropdown menu for Inline or Floating; the setting itself is unchanged, so sites keep their current behaviour.<\/li>\n<li>\"Hide logo\" and \"Hide footer\" are now grouped as \"Acknowledgement\", each a Show\/Hide toggle. Both remain independent settings, still off by default, so nothing changes for existing sites \u2014 the hints simply explain that the ALTCHA logo and \"Protected by ALTCHA\" text credit the open-source project OpenPorte is built on, and that hiding them affects nothing else.<\/li>\n<li>\"Delay\" is now \"Verification Delay\", and the pause it adds drops from 1.5 seconds to 0.5. This setting only ever changed how the check is <em>perceived<\/em> \u2014 it never made spam-blocking stronger, and the hint now says so and points at Complexity, which does.<\/li>\n<li>Deprecated: the \"Custom HTML\" integration (auto-configuring hand-written <code>&lt;altcha-widget&gt;<\/code> tags by loading the widget scripts on every front-end page) is deprecated and will be removed in the next major release \u2014 use the <code>[openporte]<\/code> shortcode instead. The setting is switched off on upgrade and no longer enabled on new installs; if your site relies on hand-written widget tags, re-enable the toggle under Integrations while you migrate. See <strong>Upgrade Notice<\/strong>.<\/li>\n<li>For developers and third-party integrators: the spam-filter API is removed \u2014 the <code>OpenPortePlugin::$spamfilter_result<\/code> property, the <code>get_blockspam()<\/code> method, the <code>$option_blockspam<\/code> option and the <code>blockspam<\/code> \/ <code>spamfilter<\/code> widget attributes are gone, and <code>verify_server_signature()<\/code> no longer parses classification data. The integration-listing methods <code>get_integrations()<\/code> and <code>has_active_integrations()<\/code> are deprecated with no replacement (they lost their only caller in 1.21.0) and will be removed in the next major release.<\/li>\n<li>Fix: Contact Form 7 showed the widget twice when a form contained an <code>[openporte]<\/code>\/<code>[altcha]<\/code> shortcode and the CF7 integration was also enabled \u2014 two checkboxes to tick, two challenge requests per page. The integration no longer auto-injects a widget into a form that already renders one. This affected 1.27.x and earlier too; verification is unchanged.<\/li>\n<li>Fix: a form submitted while the widget was still verifying lost the click silently; the submission is now held and replayed once the challenge is solved.<\/li>\n<li>Fix: WooCommerce login and registration silently failed with auto-verification \"On form submit\" or Display Mode set to Floating (the widget's replayed submission dropped the submit button's name, which WooCommerce requires).<\/li>\n<li>Fix: wpDiscuz comments could be posted before the challenge was solved; the submission is now held until verification completes.<\/li>\n<li>Fix: the \"OpenPorte cannot be activated\" conflict screen now links to the Plugins page instead of a browser Back link, which failed with \"the page has expired\" when activating right from the plugin uploader.<\/li>\n<li>Tested on WordPress 7.0.2. The browser E2E suite (tests\/e2e, not shipped) covers WordPress comments, Contact Form 7, wpDiscuz, WPForms and WooCommerce login\/registration across every auto-verification and display-mode combination, with negative controls (missing, forged and expired tokens).<\/li>\n<li>4 new translations. OpenPorte has been localised in 4 new languages: Czech, Polish, Romanian and Turkish.<\/li>\n<\/ul>\n\n<h4>1.27.3<\/h4>\n\n<p>This is a small bug-fix release.\n* Branding: add a logo refresh and new banners\n* Fix a conflict with ALTCHA v2+ by extending the plugin's guard at activation\n* Doc: define support workflow and add it to the readmes\n* Support up to WordPress 7.0.1<\/p>\n\n<h4>1.27.2<\/h4>\n\n<p>This is a security-hardening release. None of these are exploitable vulnerabilities; they are defence-in-depth improvements with no change to normal behaviour.\n* Hardening: submitted verification tokens are now strictly validated before use, so malformed or junk submissions fail closed without emitting PHP warnings.\n* Hardening: signed server (spam-filter) responses are now only accepted while unexpired and explicitly verified, mirroring the proof-of-work path. Minimal custom backends that omit those fields keep working.\n* Hardening: new installs now generate a 256-bit HMAC signing key. Existing keys \u2014 and the challenges already signed with them \u2014 are left untouched.\n* Hardening: the inline widget-configuration script now hex-escapes its JSON so attribute values cannot break out of the <code>&lt;script&gt;<\/code> context.\n* Hardening: tightened the Formidable Forms autoloader class-name guard.\n* Fixed a typo in the settings field markup (<code>autcomplete=\"none\"<\/code> became <code>autocomplete=\"off\"<\/code>).\n* Removed dead code left over from the paid-SaaS removal.<\/p>\n\n<h4>1.27.1<\/h4>\n\n<ul>\n<li>Renamed the Elementor form-field integration class to use the <code>OpenPorte_<\/code> prefix, as requested by the wordpress.org plugin review (avoids the reserved <code>Elementor<\/code> prefix). No behaviour change.<\/li>\n<li>Removed the wordpress.org directory icon files from the plugin package; they are deployed separately as directory assets.<\/li>\n<li>Removed the <code>load_plugin_textdomain()<\/code> call: since WordPress 4.6 (we require 5.6+) translations are loaded automatically by core. No behaviour change.<\/li>\n<\/ul>\n\n<h4>1.27.0<\/h4>\n\n<ul>\n<li>Forked ALTCHA Spam Protection v1 as OpenPorte, a community-maintained, fully open-source (GPLv2 or later) continuation.<\/li>\n<li>Rebranded the plugin to OpenPorte: new <code>[openporte]<\/code> shortcode and <code>openporte\/v1<\/code> REST namespace, with the <code>[altcha]<\/code> shortcode, <code>altcha\/v1<\/code> endpoint, <code>altcha_*<\/code> hooks and the <code>ALTCHA_*<\/code> \/ <code>AltchaPlugin<\/code> symbols kept as deprecated aliases (see Deprecations).<\/li>\n<li>Existing ALTCHA v1 settings are copied into the OpenPorte namespace on activation; the original <code>altcha_*<\/code> options are left in place so you can roll back.<\/li>\n<li>Removed the paid altcha.org regional SaaS classifier; self-hosted proof-of-work and custom self-hostable backends are unchanged.<\/li>\n<li>Security: HMAC signatures are now compared with <code>hash_equals()<\/code> (timing-safe).<\/li>\n<li>Wrapped the \"This form requires JavaScript!\" message so it can be translated.<\/li>\n<li>Corrected the documented minimum requirements to match the plugin's existing PHP 8.0 \/ WordPress 5.6 floor.\nContributors (GitHub) for this release: jcberthon, ded-furby.\nCo-contributors: Mistral (AI), Claude (AI), GPT-OSS (AI).<\/li>\n<\/ul>\n\n<h4>1.26.3<\/h4>\n\n<ul>\n<li>Fixed possible replay attacks via salt splicing.<\/li>\n<\/ul>\n\n<h4>1.26.2<\/h4>\n\n<ul>\n<li>Updated readme for the new version 2.<\/li>\n<\/ul>\n\n<h4>1.26.1<\/h4>\n\n<ul>\n<li>Fix Elementor Pro Forms widget rendering<\/li>\n<\/ul>\n\n<h4>1.26.0<\/h4>\n\n<ul>\n<li>Added Formidable Forms integration<\/li>\n<li>Fixed PHP warning in the verify function<\/li>\n<li>ALTCHA Widget 2.2.2<\/li>\n<\/ul>\n\n<h4>1.25.0<\/h4>\n\n<ul>\n<li>Added hooks for improved customization and integration flexibility. [#45]<\/li>\n<\/ul>\n\n<h4>1.24.0<\/h4>\n\n<ul>\n<li>Fix issue with duplicate widget rendering in Elementor popups and WPDiscuz replies<\/li>\n<\/ul>\n\n<h4>1.23.0<\/h4>\n\n<ul>\n<li>Support for CoBlocks<\/li>\n<\/ul>\n\n<h4>1.22.1<\/h4>\n\n<ul>\n<li>Fix Gravity Forms validation with custom server <\/li>\n<\/ul>\n\n<h4>1.22.0<\/h4>\n\n<ul>\n<li>Fix Forminator multi-page forms<\/li>\n<li>Fix Gravity Forms with Sentinel and fields classification<\/li>\n<\/ul>\n\n<h4>1.21.0<\/h4>\n\n<ul>\n<li>ALTCHA Widget 2.0.2<\/li>\n<li>Widget scripts are now injected only on pages, which include the widget<\/li>\n<li>Support for custom Challenge URL and ALTCHA Sentinel<\/li>\n<\/ul>\n\n<h4>1.20.0<\/h4>\n\n<ul>\n<li>Enfold Theme (contact and newsletter forms) integration<\/li>\n<\/ul>\n\n<h4>1.19.0<\/h4>\n\n<ul>\n<li>Fix submit issues with Contact Form 7 + Conditional fields<\/li>\n<\/ul>\n\n<h4>1.18.0<\/h4>\n\n<ul>\n<li>Fix language with Contact Form 7<\/li>\n<\/ul>\n\n<h4>1.17.0<\/h4>\n\n<ul>\n<li>Update widget to 1.2.0<\/li>\n<li>Widget removes support for Expires header fixing potential auto-revalidation issues<\/li>\n<li>Widget script provided as a UMD module allowing for JS minification<\/li>\n<\/ul>\n\n<h4>1.16.0<\/h4>\n\n<ul>\n<li>Fix reply to comments from the admin page [#36]<\/li>\n<\/ul>\n\n<h4>1.15.0<\/h4>\n\n<ul>\n<li>Translations with gettext and automatic language detection [#33]<\/li>\n<\/ul>\n\n<h4>1.14.1<\/h4>\n\n<ul>\n<li>Fix the \"Settings\" link [#32]<\/li>\n<\/ul>\n\n<h4>1.14.0<\/h4>\n\n<ul>\n<li>Automatic language detection [#31]<\/li>\n<li>Change placement of the \"Settings\" link in the plugin list [#32]<\/li>\n<\/ul>\n\n<h4>1.13.1<\/h4>\n\n<ul>\n<li>Ignore WooCommerce form submissions in WordPress integration [#30]<\/li>\n<\/ul>\n\n<h4>1.13.0<\/h4>\n\n<ul>\n<li>WooCommerce integration [#26]<\/li>\n<li>Improved validation message [#27]<\/li>\n<li>Password lost error message [#28]<\/li>\n<\/ul>\n\n<h4>1.12.0<\/h4>\n\n<ul>\n<li>HTML Forms - skip verification if the shortcode is not in the form markup [#23]<\/li>\n<\/ul>\n\n<h4>1.11.1<\/h4>\n\n<ul>\n<li>Fix Forminator compatibility issue<\/li>\n<\/ul>\n\n<h4>1.11.0<\/h4>\n\n<ul>\n<li>Added support for WP-Members<\/li>\n<\/ul>\n\n<h4>1.10.0<\/h4>\n\n<ul>\n<li>Added support for WPDiscuz<\/li>\n<\/ul>\n\n<h4>1.9.3<\/h4>\n\n<ul>\n<li>Fix REST API Cache-Control header<\/li>\n<\/ul>\n\n<h4>1.9.2<\/h4>\n\n<ul>\n<li>Enable Custom HTML (shortcode) integration by default when activated<\/li>\n<\/ul>\n\n<h4>1.9.1<\/h4>\n\n<ul>\n<li>PHP 7 support (replace str_contains by strpos) [#19]<\/li>\n<\/ul>\n\n<h4>1.9.0<\/h4>\n\n<ul>\n<li>Widget updated to version 1.0.0<\/li>\n<li>CF7 - fix widget placement<\/li>\n<li>Fix page caching<\/li>\n<\/ul>\n\n<h4>1.8.0<\/h4>\n\n<ul>\n<li>Shortcode (custom integration) - fix mode (SpamFilter) <\/li>\n<\/ul>\n\n<h4>1.7.0<\/h4>\n\n<ul>\n<li>HTML Forms - add Shortcode option<\/li>\n<\/ul>\n\n<h4>1.6.1<\/h4>\n\n<ul>\n<li>Fix WordPress login integration<\/li>\n<\/ul>\n\n<h4>1.6.0<\/h4>\n\n<ul>\n<li>Fix Elementor Pro Forms widget rendering<\/li>\n<li>Fix Contact Form 7 widget position and shortcode support<\/li>\n<\/ul>\n\n<h4>1.5.0<\/h4>\n\n<ul>\n<li>Fix REST base URL (+ REST prefix removed from settings) [#13]<\/li>\n<\/ul>\n\n<h4>1.4.0<\/h4>\n\n<ul>\n<li>Support for Elementor Pro Forms<\/li>\n<li>Widget updated to 0.6.7<\/li>\n<\/ul>\n\n<h4>1.3.1<\/h4>\n\n<ul>\n<li>Fix site_url parsing issue [#11]<\/li>\n<\/ul>\n\n<h4>1.3.0<\/h4>\n\n<ul>\n<li>Added support for custom REST API prefixes<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>Forminator - fix widget rendering with file input<\/li>\n<li>Widget updated to 0.6.4<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Shortcode - support for <code>language<\/code> attribute<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Widget updated to 0.6.3<\/li>\n<\/ul>\n\n<h4>0.3.0<\/h4>\n\n<ul>\n<li>Added nonce sanitization<\/li>\n<li>Removed server-side spam filter (required for Plugin Directory)<\/li>\n<\/ul>\n\n<h4>0.2.1<\/h4>\n\n<ul>\n<li>Fixes requested by Plugin Directory review<\/li>\n<li>Fixed various Spam Filter issues<\/li>\n<\/ul>\n\n<h4>0.2.0<\/h4>\n\n<ul>\n<li>Widget updated to 0.6.0<\/li>\n<li>Added support for Floating UI<\/li>\n<\/ul>\n\n<h4>0.1.7<\/h4>\n\n<ul>\n<li>Fix Forminator multi-step forms<\/li>\n<\/ul>\n\n<h4>0.1.6<\/h4>\n\n<ul>\n<li>Widget updated to 0.5.1<\/li>\n<\/ul>\n\n<h4>0.1.5<\/h4>\n\n<ul>\n<li>Fixes requested by Plugin Directory review<\/li>\n<\/ul>\n\n<h4>0.1.4<\/h4>\n\n<ul>\n<li>GravityForms - added label and description options<\/li>\n<li>Altcha widget updated to 0.4.3<\/li>\n<\/ul>\n\n<h4>0.1.3<\/h4>\n\n<ul>\n<li>Fixed \"lost password\" verification bug<\/li>\n<li>Altcha widget updated to 0.4.1<\/li>\n<\/ul>\n\n<h4>0.1.2<\/h4>\n\n<ul>\n<li>Fixed widgets footer link and log warnings<\/li>\n<\/ul>\n\n<h4>0.1.1<\/h4>\n\n<ul>\n<li>Widget v0.4.0<\/li>\n<li>Challenge expiration<\/li>\n<\/ul>\n\n<h4>0.1.0<\/h4>\n\n<ul>\n<li>First version<\/li>\n<\/ul>","raw_excerpt":"OpenPorte offers a free, open-source Captcha alternative, ensuring robust spam protection while respecting user privacy and GDPR compliance.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/eu.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/324018","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/eu.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/eu.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/eu.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=324018"}],"author":[{"embeddable":true,"href":"https:\/\/eu.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/huygens-25"}],"wp:attachment":[{"href":"https:\/\/eu.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=324018"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/eu.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=324018"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/eu.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=324018"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/eu.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=324018"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/eu.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=324018"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/eu.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=324018"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}