{"id":264429,"date":"2025-12-25T20:06:57","date_gmt":"2025-12-25T20:06:57","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/record-of-consent-extension-for-complianz\/"},"modified":"2026-07-25T19:48:34","modified_gmt":"2026-07-25T19:48:34","slug":"record-of-consent-extension-for-complianz","status":"publish","type":"plugin","link":"https:\/\/te.wordpress.org\/plugins\/record-of-consent-extension-for-complianz\/","author":23407308,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"2.1","stable_tag":"2.1","tested":"7.0.2","requires":"5.0","requires_php":"7.4","requires_plugins":null,"header_name":"Record of Consent Extension for Complianz","header_author":"davidevalerio","header_description":"Stores custom consent records triggered by Complianz events into database with full compliance tracking and auditing features.","assets_banners_color":"9ac4db","last_updated":"2026-07-25 19:48:34","external_support_url":"","external_repository_url":"","donate_link":"https:\/\/www.paypal.com\/donate\/?hosted_button_id=7BQAL64REFATS","header_plugin_uri":"","header_author_uri":"https:\/\/www.davidevalerio.it\/","rating":5,"author_block_rating":0,"active_installs":500,"downloads":3068,"num_ratings":3,"support_threads":1,"support_threads_resolved":1,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.3":{"tag":"1.3","author":"davidevalerio","date":"2026-01-02 09:05:22"},"1.4":{"tag":"1.4","author":"davidevalerio","date":"2026-01-23 10:57:20"},"1.4.1":{"tag":"1.4.1","author":"davidevalerio","date":"2026-02-03 15:28:33"},"1.4.2":{"tag":"1.4.2","author":"davidevalerio","date":"2026-02-04 19:16:53"},"1.4.3":{"tag":"1.4.3","author":"davidevalerio","date":"2026-02-06 19:59:12"},"1.4.4":{"tag":"1.4.4","author":"davidevalerio","date":"2026-02-09 14:52:48"},"1.4.5":{"tag":"1.4.5","author":"davidevalerio","date":"2026-03-17 12:10:16"},"1.5":{"tag":"1.5","author":"davidevalerio","date":"2026-05-07 09:55:08"},"1.5.0.1":{"tag":"1.5.0.1","author":"davidevalerio","date":"2026-05-07 09:55:08"},"1.5.1":{"tag":"1.5.1","author":"davidevalerio","date":"2026-05-26 14:01:21"},"1.5.2":{"tag":"1.5.2","author":"davidevalerio","date":"2026-05-26 14:01:21"},"2.0":{"tag":"2.0","author":"davidevalerio","date":"2026-07-06 11:36:09"},"2.1":{"tag":"2.1","author":"davidevalerio","date":"2026-07-25 19:48:34"}},"upgrade_notice":{"1.0":"<p>Initial release. Adds essential consent record-keeping functionality alongside Complianz free.<\/p>"},"ratings":{"1":0,"2":0,"3":0,"4":0,"5":3},"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3427456,"resolution":"128x128","location":"assets","locale":"","width":267,"height":267},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3427456,"resolution":"256x256","location":"assets","locale":"","width":534,"height":534},"icon.svg":{"filename":"icon.svg","revision":3427456,"resolution":false,"location":"assets","locale":false}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3589882,"resolution":"1544x500","location":"assets","locale":"","width":3217,"height":1042},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3589882,"resolution":"772x250","location":"assets","locale":"","width":1609,"height":521}},"assets_blueprints":{"blueprint.json":{"filename":"blueprint.json","revision":3622788,"resolution":false,"location":"assets","locale":"","contents":"{\"$schema\":\"https:\\\/\\\/playground.wordpress.net\\\/blueprint-schema.json\",\"meta\":{\"title\":\"Record of Consent Extension Demo\",\"author\":\"yourusername\",\"description\":\"Live demo with 20 sample consent records\"},\"preferredVersions\":{\"php\":\"8.3\",\"wp\":\"latest\"},\"steps\":[{\"step\":\"installPlugin\",\"pluginData\":{\"resource\":\"wordpress.org\\\/plugins\",\"slug\":\"complianz-gdpr\"},\"options\":{\"activate\":true}},{\"step\":\"installPlugin\",\"pluginData\":{\"resource\":\"wordpress.org\\\/plugins\",\"slug\":\"record-of-consent-extension-for-complianz\"},\"options\":{\"activate\":true}},{\"step\":\"runSql\",\"sql\":{\"resource\":\"literal\",\"name\":\"sample-data.sql\",\"contents\":\"CREATE TABLE IF NOT EXISTS `wp_roc_extension_for_complianz` (id INTEGER PRIMARY KEY AUTO_INCREMENT, user_id VARCHAR(50) NOT NULL, anonymized_ip VARCHAR(20) NOT NULL, ip_source VARCHAR(20) NOT NULL, region VARCHAR(10) NOT NULL, categories TEXT NOT NULL, policy_version VARCHAR(10) NOT NULL DEFAULT '1.0', user_agent TEXT NOT NULL, consent_method VARCHAR(20) NOT NULL DEFAULT 'banner', action_type VARCHAR(20) NOT NULL DEFAULT 'grant', integrity_hash VARCHAR(64) NOT NULL, created_at DATETIME NOT NULL);INSERT INTO `wp_roc_extension_for_complianz` (user_id, anonymized_ip, ip_source, region, categories, policy_version, user_agent, consent_method, action_type, integrity_hash, created_at) VALUES ('MjU9bmWOamKBuq','31.11.39.*','REMOTE_ADDR','EU','{\\\"functional\\\":\\\"allow\\\",\\\"statistics\\\":\\\"allow\\\",\\\"marketing\\\":\\\"allow\\\",\\\"preferences\\\":\\\"allow\\\"}','1.0','Mozilla\\\/5.0 (Mac Safari)','banner','grant','a1b2c3d4e5f67890123456789abcdef0','2026-01-26 10:00:00'),('WA0o3RW75EQrYd','212.138.1.*','REMOTE_ADDR','EU','{\\\"functional\\\":\\\"allow\\\",\\\"statistics\\\":\\\"allow\\\",\\\"marketing\\\":\\\"deny\\\",\\\"preferences\\\":\\\"deny\\\"}','1.0','Chrome\\\/122','banner','update','f6e5d4c3b2a19876543210fedcba9876','2026-01-26 09:30:00'),('5UH5086eRDCirl','185.220.194.*','REMOTE_ADDR','EU','{\\\"functional\\\":\\\"deny\\\",\\\"statistics\\\":\\\"allow\\\",\\\"marketing\\\":\\\"allow\\\",\\\"preferences\\\":\\\"allow\\\"}','1.0','Firefox\\\/123','banner','grant','x9y8z7w6v5u432109876543210fedcba9','2026-01-25 16:45:00'),('K9pQ2mNx4vR7tY','172.16.23.*','REMOTE_ADDR','EU','{\\\"functional\\\":\\\"allow\\\",\\\"statistics\\\":\\\"allow\\\",\\\"marketing\\\":\\\"deny\\\",\\\"preferences\\\":\\\"allow\\\"}','1.0','Edge\\\/122','banner','update','k1l2m3n4o5p6q7r8s9t0u1v2w3x4y5z6','2026-01-26 08:15:00'),('Hx8jL5kP9mW2qZ','122.118.14.*','REMOTE_ADDR','EU','{\\\"functional\\\":\\\"allow\\\",\\\"statistics\\\":\\\"deny\\\",\\\"marketing\\\":\\\"allow\\\",\\\"preferences\\\":\\\"deny\\\"}','1.0','Safari\\\/605.1','banner','grant','b9c8d7e6f5a4b3c2d1e0f9e8d7c6b5a4','2026-01-26 07:45:00'),('N3rT6uY8iO1pA','88.77.66.*','REMOTE_ADDR','EU','{\\\"functional\\\":\\\"deny\\\",\\\"statistics\\\":\\\"deny\\\",\\\"marketing\\\":\\\"allow\\\",\\\"preferences\\\":\\\"allow\\\"}','1.0','Chrome\\\/121','banner','update','z9y8x7w6v5u4t3s2r1q0p9o8n7m6l5k4','2026-01-25 18:20:00'),('V4bF7gJ9kM2nX','203.0.113.*','REMOTE_ADDR','EU','{\\\"functional\\\":\\\"allow\\\",\\\"statistics\\\":\\\"allow\\\",\\\"marketing\\\":\\\"allow\\\",\\\"preferences\\\":\\\"deny\\\"}','1.0','Firefox\\\/122','banner','grant','e5d4c3b2a19876543210fedcba9876543','2026-01-26 11:15:00'),('Q8wE1rT5yU9iP','198.51.100.*','REMOTE_ADDR','EU','{\\\"functional\\\":\\\"deny\\\",\\\"statistics\\\":\\\"allow\\\",\\\"marketing\\\":\\\"deny\\\",\\\"preferences\\\":\\\"allow\\\"}','1.0','Edge\\\/121','banner','update','m9n8b7v6c5x4z3w2q1p0o9i8u7y6t5r4','2026-01-25 14:30:00'),('L2dS6fH9jK4mN','45.67.89.*','REMOTE_ADDR','EU','{\\\"functional\\\":\\\"allow\\\",\\\"statistics\\\":\\\"allow\\\",\\\"marketing\\\":\\\"deny\\\",\\\"preferences\\\":\\\"allow\\\"}','1.0','Opera\\\/108','banner','grant','t7r6e5w4q3p2o1i9u8y7t6r5e4w3q2p1','2026-01-26 12:45:00'),('P7xZ0cV3bN8kQ','91.234.56.*','REMOTE_ADDR','EU','{\\\"functional\\\":\\\"deny\\\",\\\"statistics\\\":\\\"allow\\\",\\\"marketing\\\":\\\"allow\\\",\\\"preferences\\\":\\\"deny\\\"}','1.0','Chrome\\\/120','banner','update','g5f4d3s2a1q9w8e7r6t5y4u3i2o1p0n9','2026-01-25 10:10:00'),('R4tY7uI1mW6pA','109.87.43.*','REMOTE_ADDR','EU','{\\\"functional\\\":\\\"allow\\\",\\\"statistics\\\":\\\"allow\\\",\\\"marketing\\\":\\\"deny\\\",\\\"preferences\\\":\\\"deny\\\"}','1.0','Safari\\\/604.1','banner','grant','h8j7k6l5m4n3b2v1c0x9z8y7t6r5e4w3','2026-01-26 09:00:00'),('T9kM2qX5vB8nL','78.90.12.*','REMOTE_ADDR','EU','{\\\"functional\\\":\\\"deny\\\",\\\"statistics\\\":\\\"deny\\\",\\\"marketing\\\":\\\"allow\\\",\\\"preferences\\\":\\\"allow\\\"}','1.0','Firefox\\\/121','banner','update','d2c1v0b9n8m7l6k5j4h3g2f1e0d9c8b7','2026-01-25 15:55:00'),('J6hR9pO3fY7tD','156.34.78.*','REMOTE_ADDR','EU','{\\\"functional\\\":\\\"allow\\\",\\\"statistics\\\":\\\"allow\\\",\\\"marketing\\\":\\\"allow\\\",\\\"preferences\\\":\\\"allow\\\"}','1.0','Edge\\\/120','banner','grant','a5b4c3d2e1f0g9h8i7j6k5l4m3n2o1p0','2026-01-26 13:30:00'),('F1wE4rG8uT2yV','234.56.78.*','REMOTE_ADDR','EU','{\\\"functional\\\":\\\"deny\\\",\\\"statistics\\\":\\\"allow\\\",\\\"marketing\\\":\\\"deny\\\",\\\"preferences\\\":\\\"deny\\\"}','1.0','Chrome\\\/123','banner','update','q1w2e3r4t5y6u7i8o9p0a1s2d3f4g5h6','2026-01-25 16:22:00'),('Z5nX8cK2bQ9mJ','67.89.01.*','REMOTE_ADDR','EU','{\\\"functional\\\":\\\"allow\\\",\\\"statistics\\\":\\\"deny\\\",\\\"marketing\\\":\\\"allow\\\",\\\"preferences\\\":\\\"allow\\\"}','1.0','Firefox\\\/120','banner','grant','j7k8l9m0n1b2c3v4x5z6y7t8r9e0w1q2','2026-01-26 14:10:00'),('M3vB6tP9iL4kR','123.45.67.*','REMOTE_ADDR','EU','{\\\"functional\\\":\\\"deny\\\",\\\"statistics\\\":\\\"allow\\\",\\\"marketing\\\":\\\"deny\\\",\\\"preferences\\\":\\\"allow\\\"}','1.0','Safari\\\/605.1.15','banner','update','s3d4f5g6h7j8k9l0m1n2b3c4v5x6z7y8','2026-01-25 11:40:00'),('Y7qW1eR5tU9oN','89.12.34.*','REMOTE_ADDR','EU','{\\\"functional\\\":\\\"allow\\\",\\\"statistics\\\":\\\"allow\\\",\\\"marketing\\\":\\\"allow\\\",\\\"preferences\\\":\\\"deny\\\"}','1.0','Chrome\\\/119','banner','grant','t9r8e7w6q5p4o3i2u1y0t9r8e7w6q5p4','2026-01-26 10:25:00'),('H2kF8mJ4pX7vB','210.98.76.*','REMOTE_ADDR','EU','{\\\"functional\\\":\\\"deny\\\",\\\"statistics\\\":\\\"allow\\\",\\\"marketing\\\":\\\"allow\\\",\\\"preferences\\\":\\\"deny\\\"}','1.0','Edge\\\/123','banner','update','p0o9i8u7y6t5r4e3w2q1a0s9d8f7g6h5','2026-01-25 13:15:00'),('G9nL3qV6bT1yU','54.32.10.*','REMOTE_ADDR','EU','{\\\"functional\\\":\\\"allow\\\",\\\"statistics\\\":\\\"allow\\\",\\\"marketing\\\":\\\"deny\\\",\\\"preferences\\\":\\\"allow\\\"}','1.0','Opera\\\/107','banner','grant','k5j4h3g2f1e0d9c8b7v6n5m4l3k2j1h0','2026-01-26 15:05:00'),('X4rT8wP2fM7kQ','176.54.32.*','REMOTE_ADDR','EU','{\\\"functional\\\":\\\"deny\\\",\\\"statistics\\\":\\\"deny\\\",\\\"marketing\\\":\\\"allow\\\",\\\"preferences\\\":\\\"allow\\\"}','1.0','Firefox\\\/124','banner','update','m2n3b4c5v6x7z8y9t0r1e2w3q4a5s6d7','2026-01-25 17:35:00'),('B6uY9iR3hK8nZ','99.88.77.*','REMOTE_ADDR','EU','{\\\"functional\\\":\\\"allow\\\",\\\"statistics\\\":\\\"allow\\\",\\\"marketing\\\":\\\"deny\\\",\\\"preferences\\\":\\\"deny\\\"}','1.0','Chrome\\\/122','banner','grant','n8m7l6k5j4h3g2f1e0d9c8b7a6v5x4z3','2026-01-26 12:00:00');\"}},{\"step\":\"login\",\"username\":\"admin\",\"password\":\"password\"}],\"landingPage\":\"\\\/wp-admin\\\/tools.php?page=rocext-custom-consent\"}"}},"all_blocks":[],"tagged_versions":["1.3","1.4","1.4.1","1.4.2","1.4.3","1.4.4","1.4.5","1.5","1.5.0.1","1.5.1","1.5.2","2.0","2.1"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3589882,"resolution":"1","location":"assets","locale":"","width":2145,"height":1618},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3589882,"resolution":"2","location":"assets","locale":"","width":2145,"height":1618},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3589882,"resolution":"3","location":"assets","locale":"","width":2145,"height":1618},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3589882,"resolution":"4","location":"assets","locale":"","width":2144,"height":2252},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3589882,"resolution":"5","location":"assets","locale":"","width":2145,"height":1618}},"screenshots":{"1":"Record of Consent","2":"Custom Label","3":"Filtering Options","4":"Settings","5":"Data Integrity Tool"}},"plugin_section":[],"plugin_tags":[14361,20011,153,396],"plugin_category":[54,59],"plugin_contributors":[252842],"plugin_business_model":[],"class_list":["post-264429","plugin","type-plugin","status-publish","hentry","plugin_tags-compliance","plugin_tags-consent","plugin_tags-database","plugin_tags-privacy","plugin_category-security-and-spam-protection","plugin_category-utilities-and-tools","plugin_contributors-davidevalerio","plugin_committers-davidevalerio"],"banners":{"banner":"https:\/\/ps.w.org\/record-of-consent-extension-for-complianz\/assets\/banner-772x250.png?rev=3589882","banner_2x":"https:\/\/ps.w.org\/record-of-consent-extension-for-complianz\/assets\/banner-1544x500.png?rev=3589882","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":"https:\/\/ps.w.org\/record-of-consent-extension-for-complianz\/assets\/icon.svg?rev=3427456","icon":"https:\/\/ps.w.org\/record-of-consent-extension-for-complianz\/assets\/icon.svg?rev=3427456","icon_2x":false,"generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/record-of-consent-extension-for-complianz\/assets\/screenshot-1.png?rev=3589882","caption":"Record of Consent"},{"src":"https:\/\/ps.w.org\/record-of-consent-extension-for-complianz\/assets\/screenshot-2.png?rev=3589882","caption":"Custom Label"},{"src":"https:\/\/ps.w.org\/record-of-consent-extension-for-complianz\/assets\/screenshot-3.png?rev=3589882","caption":"Filtering Options"},{"src":"https:\/\/ps.w.org\/record-of-consent-extension-for-complianz\/assets\/screenshot-4.png?rev=3589882","caption":"Settings"},{"src":"https:\/\/ps.w.org\/record-of-consent-extension-for-complianz\/assets\/screenshot-5.png?rev=3589882","caption":"Data Integrity Tool"}],"raw_content":"<!--section=description-->\n<p>This plugin works alongside the free Complianz plugin to helps you keep a clear, reliable record of your visitors' consents so you can stay on top of privacy rules and audits. It is designed specifically to save and manage consent records, making it ideal if you don\u2019t need all the bells and whistles of Complianz Pro.<\/p>\n\n<p>I built this plugin with care to give you a solid, easy-to-use tool that should meet GDPR requirements. However, it doesn\u2019t guarantee full legal compliance, and none of its settings or descriptions should be considered legal advice.<\/p>\n\n<p>That said, here's why you'll like this plugin:<\/p>\n\n<ul>\n<li>Keeps user IDs anonymous so your visitors' privacy is respected while staying compliant with data laws.<\/li>\n<li>5-step wizard to get you started quickly.<\/li>\n<li>Uses SHA-256 hashing to help ensure consent records cannot be changed or tampered with without being detected.<\/li>\n<li>Lets you customize how you view consent records. You can show or hide details, pick custom dates, and see the full history of consents if you want.<\/li>\n<li>Gives you advanced filters to find exactly the records you need.<\/li>\n<li>Allows you to export all consent data, so you can keep a backup or review it offline.<\/li>\n<li>Manages data with options to automatically clean up old records.<\/li>\n<li>Thorough uninstall deletes all plugin data.<\/li>\n<\/ul>\n\n<h3>Legal Notice &amp; Disclaimer<\/h3>\n\n<p>This plugin is provided \"as is,\" and the author makes no warranties, express or implied, regarding its accuracy, reliability, or legal compliance. By using this plugin, you acknowledge and agree that:<\/p>\n\n<ul>\n<li>You are solely responsible for your compliance with GDPR, CCPA, and other applicable data protection laws.<\/li>\n<li>You must update your website's Privacy Policy to disclose the collection and processing of consent data.<\/li>\n<li>You should regularly back up your data and keep your site well-maintained.<\/li>\n<li>None of the settings or descriptions in this plugin should be taken as legal advice.<\/li>\n<li>The author expressly disclaims any liability for damages, data loss, or other issues arising from the use, misuse, or reliance on this plugin.<\/li>\n<li>You use this plugin at your own risk, and the author assumes no liability for any resulting consequences.<\/li>\n<li><a href=\"https:\/\/www.paypal.com\/donate\/?hosted_button_id=7BQAL64REFATS\">Donations<\/a> are welcome to support ongoing development but do not imply any warranty or official support.<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate the free Complianz plugin.<\/li>\n<li>Upload and activate this plugin.<\/li>\n<li>Go to Settings &gt; Record of Consent and run the 5-step wizard.<\/li>\n<li>Configure filters, labels, and retention options as needed.<\/li>\n<li>Consent records will be stored automatically when Complianz triggers consent events.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20plugin%20replace%20complianz%20pro%3F\"><h3>Does this plugin replace Complianz Pro?<\/h3><\/dt>\n<dd><p>No. This plugin is made to work alongside the free Complianz plugin by adding just the consent recording part. If you want all the extra features, you would use Complianz Pro instead.<\/p><\/dd>\n<dt id=\"do%20i%20need%20complianz%20installed%20for%20this%20plugin%20to%20work%3F\"><h3>Do I need Complianz installed for this plugin to work?<\/h3><\/dt>\n<dd><p>Yes. This plugin relies on the free Complianz plugin to be active. Think of it as an add-on that extends Complianz's consent features.<\/p><\/dd>\n<dt id=\"can%20i%20use%20this%20plugin%20with%20other%20consent%20plugins%3F\"><h3>Can I use this plugin with other consent plugins?<\/h3><\/dt>\n<dd><p>No. This plugin is specifically designed to work with Complianz.<\/p><\/dd>\n<dt id=\"is%20this%20plugin%20compatible%20with%20w3%20total%20cache%3F\"><h3>Is this plugin compatible with W3 Total Cache?<\/h3><\/dt>\n<dd><p>Yes.<\/p><\/dd>\n<dt id=\"is%20this%20plugin%20compatible%20with%20autoptimize%3F\"><h3>Is this plugin compatible with Autoptimize?<\/h3><\/dt>\n<dd><p>Yes.<\/p><\/dd>\n<dt id=\"how%20do%20i%20verify%20consent%20records%20integrity%3F\"><h3>How do I verify consent records integrity?<\/h3><\/dt>\n<dd><p>Each consent record is protected with a SHA-256 hash that uses a secret salt. If someone changes a record directly in the database, the integrity check will detect the mismatch.<\/p><\/dd>\n<dt id=\"can%20i%20also%20add%20the%20country%20or%20city%20of%20origin%20of%20a%20visitor%20in%20each%20record%3F\"><h3>Can I also add the country or city of origin of a visitor in each record?<\/h3><\/dt>\n<dd><p>A GDPR consent record requires only strictly necessary information to demonstrate compliance. Detailed geographic data, like country or city of origin, generally exceeds data minimization principles.<\/p><\/dd>\n<dt id=\"i%20don%E2%80%99t%20have%20any%20marketing%20cookies%20on%20my%20website%2C%20but%20i%20still%20see%20records%20showing%20%E2%80%9Cmarketing%20allowed.%E2%80%9D%20why%20is%20that%3F\"><h3>I don\u2019t have any marketing cookies on my website, but I still see records showing \u201cmarketing allowed.\u201d Why is that?<\/h3><\/dt>\n<dd><p>If your website doesn\u2019t use marketing cookies, Complianz hides that category in the banner but still keeps it in the background data. That\u2019s why you might see \u201cmarketing allowed\u201d in your Record of Consent \u2014 it\u2019s just a placeholder in the system. No marketing cookies are actually loaded or tracked, and you can safely ignore it.<\/p><\/dd>\n<dt id=\"why%20are%20ip%20addresses%20not%20matching%20external%20analytics%20tools%3F\"><h3>Why are IP addresses not matching external analytics tools?<\/h3><\/dt>\n<dd><p>This usually happens because some hosting providers use reverse proxies or load balancers that don't forward the original visitor IP to PHP. In those cases, server-side tools (like this plugin) may record the proxy's IP, while browser-based analytics tools (which are usually client-side JS) capture the correct visitor IP.<\/p>\n\n<p>This is a hosting infrastructure issue, not a plugin limitation. The plugin correctly stores consent records, but unreliable IP forwarding can make it harder to match records to specific users, which may affect compliance with data subject access or deletion requests.<\/p>\n\n<p>The plugin includes a PHP multi-header fallback system to detect the real visitor IP when possible, by checking headers such as <code>X-Forwarded-For<\/code> or <code>HTTP_CF_CONNECTING_IP<\/code>. However, this cannot guarantee accuracy in all environments.<\/p>\n\n<p>To improve detection:<\/p>\n\n<ul>\n<li>Ask your hosting provider to enable <code>X-Forwarded-For<\/code> or <code>X-Real-IP<\/code><\/li>\n<li>Use a hosting service that fully supports IP forwarding<\/li>\n<li>Use multiple identifiers (IP + User Agent + timestamp + UID)<\/li>\n<li>Document this limitation in your privacy policy<\/li>\n<\/ul><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>2.1<\/h4>\n\n<ul>\n<li>Improved privacy. Rate limiting now uses the anonymized IP address instead of the original client IP, ensuring that no trace of the non-anonymized IP is ever stored.<\/li>\n<li>Safer CSV and JSON exports. Exported user_agent values are now protected against CSV\/Formula Injection, preventing spreadsheet apps from executing malicious formulas.<\/li>\n<li>Improved performance. Integrity verification now checks records in batches of 1,000 instead of loading the entire database table at once, preventing memory and timeout issues on large sites.<\/li>\n<li>Improved Records tab performance. Region, policy version, consent method, and action type filters are now cached, avoiding unnecessary database queries every time the tab is opened.<\/li>\n<li>More robust bulk actions. Bulk delete, CSV and JSON export now handle malformed requests gracefully instead of causing fatal errors.<\/li>\n<li>Stronger input validation. Consent categories submitted through AJAX are now validated against an approved list and have a maximum size limit, preventing unexpected or oversized data from being stored.<\/li>\n<li>Stronger input validation. The \"Delete Old Records\" setting now rejects invalid values before deletion and provides clear error messages, while also fixing an input display issue in Safari.<\/li>\n<li>Clearer documentation. Tooltips now clarify that enabling Hide Bot Records doesn\u2019t affect exports. CSV and JSON exports always include all records to preserve GDPR compliance.<\/li>\n<li>Better settings validation. Invalid or empty custom table suffixes are now detected before saving, with a clear error message instead of silently ignoring the value.<\/li>\n<li>More efficient upgrades. The legacy retention-period migration now runs only once during plugin upgrades instead of executing every time the Settings page is opened.<\/li>\n<li>More consistent error handling. AJAX requests now use a standardized error format, preventing confusing \u201cundefined\u201d error messages in the admin interface.<\/li>\n<li>Clearer messaging. Removed the admin notice suggesting an integrity salt is required for GDPR compliance; setting a salt remains a recommended but optional hardening measure.<\/li>\n<li>Fixed display issue. Labels added from the Records tab now appear immediately in the Settings tab's User ID Labels list without requiring a page reload.<\/li>\n<li>Fixed display issues. The toggle switch markup in Display Settings has been corrected to prevent broken rendering.<\/li>\n<li>Improved reliability. Removed an unused duplicate settings-save handler from the Bot Filter module to prevent conflicts with the central Settings save process.<\/li>\n<li>Stronger security. Fixed an issue that could cause consent record operations to fail under certain conditions and closed an edge case where a compressed IPv6 address could bypass IP anonymization checks.<\/li>\n<\/ul>\n\n<h4>2.0<\/h4>\n\n<ul>\n<li>Completely redesigned Settings page. The Settings interface has been rebuilt for a cleaner, more intuitive experience.<\/li>\n<li>Improved usability. Refined the Settings page layout and interactions for a smoother configuration workflow.<\/li>\n<li>Better responsive design. Improved the layout of the Settings and Records pages on smaller screens.<\/li>\n<li>Improved mobile readability. Optimized the Records table for easier viewing on mobile devices.<\/li>\n<\/ul>\n\n<h4>1.5.2<\/h4>\n\n<ul>\n<li>WordPress 7.0 compatibility. Verified compatibility with WordPress 7.0.<\/li>\n<li>Code cleanup. Consolidated the plugin's color palette by removing redundant color variables.<\/li>\n<\/ul>\n\n<h4>1.5.1<\/h4>\n\n<ul>\n<li>Safer database upgrades. Record migrations now match columns explicitly instead of relying on column order, preventing data loss if database schemas differ.<\/li>\n<li>Improved upgrade reliability. Database migrations and the setup wizard now create the complete table structure, ensuring all required columns are available.<\/li>\n<li>More robust IP handling. Fixed an edge case where certain malformed IPv6 addresses could cause the plugin to crash.<\/li>\n<li>More reliable AJAX responses. Consent revocation requests now return consistent JSON responses, even when security tokens have expired.<\/li>\n<li>Code cleanup. Removed unnecessary SQL escaping that could interfere with export queries.<\/li>\n<li>Fixed invalid record exports. Exporting invalid records no longer attempts to access a database column that doesn't exist.<\/li>\n<li>Reduced code duplication. Consolidated duplicate export query logic into a single shared implementation.<\/li>\n<li>More reliable consent tracking. Consent action types are now updated only after a successful server response, preventing incorrect values during rapid consecutive consent changes.<\/li>\n<li>Stronger security. Salt generation in the Settings page now uses a cryptographically secure server-side source instead of client-side random values.<\/li>\n<li>Improved extensibility. Consent records now adapt automatically when additional fields are added, preventing data from being silently omitted.<\/li>\n<\/ul>\n\n<h4>1.5.0.1<\/h4>\n\n<ul>\n<li>Bug fix for searching functionality<\/li>\n<\/ul>\n\n<h4>1.5<\/h4>\n\n<ul>\n<li>New look for the Filters section, with cleaner layout and responsive fields.<\/li>\n<li>Improved searching functionality: Searching by IP address now works with any format or partial input.<\/li>\n<\/ul>\n\n<h4>1.4.5<\/h4>\n\n<ul>\n<li>New feature. Added an optional Bot Filter module that hides well-known crawlers and vendor-specific bots from the Records view, making consent data easier to review.<\/li>\n<li>Improved data quality. Bot filtering keeps the Records view focused on real user consents while preserving all records for auditing and exports.<\/li>\n<li>Better extensibility. Added a new integration hook that allows modules to extend the Display Settings page.<\/li>\n<li>Improved cleanup. The Bot Filter module now removes its settings automatically when the plugin is uninstalled.<\/li>\n<\/ul>\n\n<h4>1.4.4<\/h4>\n\n<ul>\n<li>Stronger DoS protection. Reduced the rate limit to 10 requests per hour for each IP address and browser combination, making abusive traffic significantly harder.<\/li>\n<li>Cleaner browser console. Removed development logging from JavaScript files to reduce unnecessary console output in production.<\/li>\n<li>Improved module compatibility. Module detection now supports both folder-based and standalone module structures.<\/li>\n<li>Better error diagnostics. Important error and warning messages are still logged to the browser console to simplify troubleshooting.<\/li>\n<li>Improved performance. Eliminated unnecessary logging overhead in the production environment.<\/li>\n<\/ul>\n\n<h4>1.4.3<\/h4>\n\n<ul>\n<li>More accurate consent tracking. Consent methods are now detected using reliable inference instead of unavailable Complianz events, correctly distinguishing content blocker consent from banner consent.<\/li>\n<\/ul>\n\n<h4>1.4.2<\/h4>\n\n<ul>\n<li>Critical bug fix. Prevents duplicate consent records from being created on every page load, avoiding unnecessary database growth. This update is recommended for all users.<\/li>\n<\/ul>\n\n<h4>1.4.1<\/h4>\n\n<ul>\n<li>Improved extensibility. Added new hooks and enhanced dynamic column support, making it easier for modules to extend the plugin.<\/li>\n<li>More reliable pagination. Fixed an issue where page numbers with multiple digits were not handled correctly.<\/li>\n<\/ul>\n\n<h4>1.4<\/h4>\n\n<ul>\n<li>Improved code quality. Refactored the codebase for better compliance with WordPress Coding Standards and more complete developer documentation.<\/li>\n<\/ul>\n\n<h4>1.3<\/h4>\n\n<ul>\n<li>New feature. Introduced a modular architecture that allows optional functionality to be added through drop-in modules.<\/li>\n<li>More reliable IP detection. Added support for Cloudflare, Nginx, X-Forwarded-For, Client-IP, and other common proxy headers.<\/li>\n<li>Improved GDPR auditing. Consent records now store which HTTP header supplied the detected IP address.<\/li>\n<li>Better security. X-Forwarded-For headers now use only the first IP address to prevent spoofing.<\/li>\n<li>Improved usability. Settings sections can now be collapsed, with their state remembered between visits.<\/li>\n<li>Automatic upgrades. Existing installations are updated automatically to support the new IP source tracking.<\/li>\n<\/ul>\n\n<h4>1.2.2<\/h4>\n\n<ul>\n<li>Improved compatibility. Enhanced IP detection across Cloudflare, reverse proxies, VPS environments, and shared hosting.<\/li>\n<li>Improved GDPR auditing. Consent records now include the source of the detected IP address.<\/li>\n<li>Better security. X-Forwarded-For headers now use only the first IP address to prevent spoofing.<\/li>\n<li>Automatic upgrades. Existing installations are updated automatically to support IP source tracking.<\/li>\n<li>Improved debugging. Added optional diagnostic logging for IP detection when debug mode is enabled.<\/li>\n<li>Improved usability. Updated timestamp format options and recommended ISO 8601 as the default format.<\/li>\n<\/ul>\n\n<h4>1.2.1<\/h4>\n\n<ul>\n<li>Improved GDPR compliance. Consent refusals are no longer stored, as proof of refusal is generally not required.<\/li>\n<\/ul>\n\n<h4>1.2<\/h4>\n\n<ul>\n<li>New feature. Added automatic database migration when changing the custom table suffix, including verification and automatic rollback on failure.<\/li>\n<li>Safer database changes. Table migrations now require confirmation before proceeding to help prevent accidental data loss.<\/li>\n<li>Improved compatibility. Consent records are now stored even when geographic region information is unavailable, improving support for Complianz Free.<\/li>\n<li>Stronger security. Hardened input validation, output escaping, and database queries in line with WordPress security best practices.<\/li>\n<li>Improved code quality. Enhanced WordPress Coding Standards compliance and internal documentation.<\/li>\n<\/ul>\n\n<h4>1.1.9<\/h4>\n\n<ul>\n<li>Improved compatibility. Fixed consent storage when geographic region information is unavailable.<\/li>\n<li>Stronger security. Hardened input validation, output escaping, and database queries in line with WordPress security best practices.<\/li>\n<li>Improved code quality. Enhanced WordPress Coding Standards compliance and reduced unnecessary logging.<\/li>\n<\/ul>\n\n<h4>1.1.8<\/h4>\n\n<ul>\n<li>Improved compatibility. Fixed consent storage when geographic region information is unavailable.<\/li>\n<li>Improved error handling. Reduced unnecessary logging during cancelled consent requests.<\/li>\n<\/ul>\n\n<h4>1.1.7<\/h4>\n\n<ul>\n<li>Improved WordPress compatibility. Resolved Plugin Check issues for WordPress.org compliance.<\/li>\n<li>Better localization. Improved translation support and updated language files.<\/li>\n<li>More reliable consent tracking. Fixed a JavaScript issue that could occur when all consent categories were rejected.<\/li>\n<li>Improved code quality. Refactored internal code to improve maintainability and translation support.<\/li>\n<\/ul>\n\n<h4>1.1.6<\/h4>\n\n<ul>\n<li>Improved code quality. Simplified CSS selectors for better maintainability.<\/li>\n<li>Fixed responsive layout. Corrected an issue where table headers were hidden but their corresponding data remained visible.<\/li>\n<\/ul>\n\n<h4>1.1.5<\/h4>\n\n<ul>\n<li>Fixed bulk actions. Bulk delete and export now work correctly from both bulk action menus.<\/li>\n<li>More reliable consent tracking. Fixed consent storage issues and simplified category handling.<\/li>\n<li>Better security. Improved nonce handling for bulk actions to avoid failures caused by expired security tokens.<\/li>\n<li>Improved code quality. Removed unused consent processing logic.<\/li>\n<\/ul>\n\n<h4>1.1.4<\/h4>\n\n<ul>\n<li>Stronger security. Added additional validation and permission checks to bulk exports and database operations.<\/li>\n<li>Fixed setup issues. Resolved a problem that could prevent the consent database table from being created during installation.<\/li>\n<li>Fixed navigation. Pagination and sorting now remain on the correct admin tab.<\/li>\n<li>Improved error handling. Added clearer messages when required database tables are missing.<\/li>\n<\/ul>\n\n<h4>1.1.3<\/h4>\n\n<ul>\n<li>Security update. Strengthened protection against SQL injection, XSS, CSRF, malformed input, information disclosure, and oversized requests.<\/li>\n<li>Improved rate limiting. Requests are now identified using both IP address and browser information for more effective abuse protection.<\/li>\n<li>Improved code quality. Simplified internal logging and maintenance.<\/li>\n<\/ul>\n\n<h4>1.1.2<\/h4>\n\n<ul>\n<li>New feature. Added full localization support, including Italian translations.<\/li>\n<li>Improved user interface. Refined layouts, alignment, and styling throughout the plugin.<\/li>\n<li>Improved maintainability. Consolidated styles and introduced CSS variables for easier customization.<\/li>\n<li>Simplified interface. Removed an unused consent category from the Settings and Records pages.<\/li>\n<\/ul>\n\n<h4>1.0<\/h4>\n\n<ul>\n<li>Initial release. Introduced secure consent recording with tamper detection, privacy-preserving user labels, advanced filtering, data export, and automatic record retention.<\/li>\n<\/ul>","raw_excerpt":"Stores custom consent records triggered by Complianz events with compliance tracking and auditing capabilities.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/te.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/264429","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/te.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/te.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/te.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=264429"}],"author":[{"embeddable":true,"href":"https:\/\/te.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/davidevalerio"}],"wp:attachment":[{"href":"https:\/\/te.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=264429"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/te.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=264429"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/te.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=264429"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/te.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=264429"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/te.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=264429"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/te.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=264429"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}