{"id":324036,"date":"2026-06-14T01:04:18","date_gmt":"2026-06-14T01:04:18","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/loi-25-comply\/"},"modified":"2026-06-29T01:20:49","modified_gmt":"2026-06-29T01:20:49","slug":"loi-25-comply","status":"publish","type":"plugin","link":"https:\/\/me.wordpress.org\/plugins\/loi-25-comply\/","author":16352673,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.9.5","stable_tag":"1.9.5","tested":"7.0","requires":"6.0","requires_php":"8.0","requires_plugins":null,"header_name":"Loi 25 Comply","header_author":"AZ Internet Communications","header_description":"Conformit\u00e9 compl\u00e8te \u00e0 la Loi 25 du Qu\u00e9bec - Banni\u00e8re de consentement, politique de confidentialit\u00e9 et d\u00e9signation du RPRP.","assets_banners_color":"1b5e20","last_updated":"2026-06-29 01:20:49","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/azinternet.ca\/extensions\/loi25-comply\/","header_author_uri":"https:\/\/azinternet.ca","rating":0,"author_block_rating":0,"active_installs":0,"downloads":322,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.2.0":{"tag":"1.2.0","author":"cfgilles","date":"2026-06-14 01:03:57"},"1.3.0":{"tag":"1.3.0","author":"cfgilles","date":"2026-06-14 17:17:18"},"1.4.0":{"tag":"1.4.0","author":"cfgilles","date":"2026-06-15 22:46:54"},"1.5.0":{"tag":"1.5.0","author":"cfgilles","date":"2026-06-15 23:07:53"},"1.5.1":{"tag":"1.5.1","author":"cfgilles","date":"2026-06-15 23:32:49"},"1.6.0":{"tag":"1.6.0","author":"cfgilles","date":"2026-06-16 12:26:55"},"1.7.0":{"tag":"1.7.0","author":"cfgilles","date":"2026-06-16 13:53:30"},"1.8.0":{"tag":"1.8.0","author":"cfgilles","date":"2026-06-16 19:20:08"},"1.8.1":{"tag":"1.8.1","author":"cfgilles","date":"2026-06-16 19:40:38"},"1.8.2":{"tag":"1.8.2","author":"cfgilles","date":"2026-06-16 19:55:23"},"1.8.3":{"tag":"1.8.3","author":"cfgilles","date":"2026-06-16 23:20:17"},"1.9.0":{"tag":"1.9.0","author":"cfgilles","date":"2026-06-18 00:05:21"},"1.9.1":{"tag":"1.9.1","author":"cfgilles","date":"2026-06-18 00:09:54"},"1.9.2":{"tag":"1.9.2","author":"cfgilles","date":"2026-06-18 00:24:07"},"1.9.4":{"tag":"1.9.4","author":"cfgilles","date":"2026-06-29 00:45:37"},"1.9.5":{"tag":"1.9.5","author":"cfgilles","date":"2026-06-29 01:20:49"}},"upgrade_notice":{"1.2.0":"<p>Major restructuring: plugin is now fully free and functional. Pro features (obligations 4-8) are available in the separate Loi 25 Comply Pro plugin.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3571431,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3571431,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3571431,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3571431,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.2.0","1.3.0","1.4.0","1.5.0","1.5.1","1.6.0","1.7.0","1.8.0","1.8.1","1.8.2","1.8.3","1.9.0","1.9.1","1.9.2","1.9.4","1.9.5"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3571431,"resolution":"1","location":"assets","locale":"","width":1920,"height":919},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3571431,"resolution":"2","location":"assets","locale":"","width":1912,"height":922},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3571431,"resolution":"3","location":"assets","locale":"","width":1920,"height":919},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3571431,"resolution":"4","location":"assets","locale":"","width":1920,"height":919},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3571431,"resolution":"5","location":"assets","locale":"","width":1920,"height":919}},"screenshots":{"1":"Compliance dashboard showing Loi 25 obligations with status indicators.","2":"Cookie consent banner displayed at the bottom of the page on the frontend.","3":"Cookie banner admin settings with French and English text tabs.","4":"Privacy Officer (RPRP) designation form in the WordPress admin."}},"plugin_section":[],"plugin_tags":[20011,389,267014,396,16635],"plugin_category":[54],"plugin_contributors":[267015],"plugin_business_model":[],"class_list":["post-324036","plugin","type-plugin","status-publish","hentry","plugin_tags-consent","plugin_tags-cookies","plugin_tags-law-25","plugin_tags-privacy","plugin_tags-quebec","plugin_category-security-and-spam-protection","plugin_contributors-cfgilles","plugin_committers-cfgilles"],"banners":{"banner":"https:\/\/ps.w.org\/loi-25-comply\/assets\/banner-772x250.png?rev=3571431","banner_2x":"https:\/\/ps.w.org\/loi-25-comply\/assets\/banner-1544x500.png?rev=3571431","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/loi-25-comply\/assets\/icon-128x128.png?rev=3571431","icon_2x":"https:\/\/ps.w.org\/loi-25-comply\/assets\/icon-256x256.png?rev=3571431","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/loi-25-comply\/assets\/screenshot-1.png?rev=3571431","caption":"Compliance dashboard showing Loi 25 obligations with status indicators."},{"src":"https:\/\/ps.w.org\/loi-25-comply\/assets\/screenshot-2.png?rev=3571431","caption":"Cookie consent banner displayed at the bottom of the page on the frontend."},{"src":"https:\/\/ps.w.org\/loi-25-comply\/assets\/screenshot-3.png?rev=3571431","caption":"Cookie banner admin settings with French and English text tabs."},{"src":"https:\/\/ps.w.org\/loi-25-comply\/assets\/screenshot-4.png?rev=3571431","caption":"Privacy Officer (RPRP) designation form in the WordPress admin."},{"src":"https:\/\/ps.w.org\/loi-25-comply\/assets\/screenshot-5.png?rev=3571431","caption":""}],"raw_content":"<!--section=description-->\n<p>Loi 25 Comply is a WordPress plugin designed specifically for Quebec businesses and organizations that must comply with Law 25 (Act to modernize legislative provisions as regards the protection of personal information), fully in force since September 2024.<\/p>\n\n<p>The plugin covers the three core obligations available in the free version, with no external SaaS dependency and no data sent to third-party servers.<\/p>\n\n<p><strong>Free features:<\/strong><\/p>\n\n<ul>\n<li>RPRP (Privacy Officer) designation form with public shortcode - Obligation 1<\/li>\n<li>Automatically generated privacy policy (French and English) - Obligation 2<\/li>\n<li>Configurable cookie consent banner (5 positions) - Obligation 3<\/li>\n<li>Category-based consent modal (necessary, analytics, functional, advertising)<\/li>\n<li>Locally stored, timestamped consent log<\/li>\n<li>Permanent revocation button via [loi25_manage_consent] shortcode<\/li>\n<li>Bilingual French \/ English admin and public interface<\/li>\n<li>Compatible with WPML, Polylang, WP Rocket, LiteSpeed, Elementor<\/li>\n<\/ul>\n\n<p><strong>Pro features (separate plugin):<\/strong><\/p>\n\n<p>Additional obligations covered by the separate Loi 25 Comply Pro plugin, available at azinternet.ca:<\/p>\n\n<ul>\n<li>Privacy incident register - Obligation 4<\/li>\n<li>Data retention schedule - Obligation 5<\/li>\n<li>Privacy Impact Assessment (PIA \/ EFVP) - Obligation 6<\/li>\n<li>Data subject rights management (access, rectification, erasure, portability) - Obligation 7<\/li>\n<li>Employee training register - Obligation 8<\/li>\n<li>Third-party script blocking before consent, with custom pattern support<\/li>\n<li>Google Consent Mode v2 integration<\/li>\n<li>Automated compliance reports by email<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Download the ZIP file<\/li>\n<li>In WordPress, go to Plugins &gt; Add New<\/li>\n<li>Click Upload Plugin<\/li>\n<li>Select the ZIP file and click Install Now<\/li>\n<li>Activate the plugin<\/li>\n<li>Go to Loi 25 Comply &gt; Privacy Officer (RPRP) to get started<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"what%20obligations%20does%20the%20free%20version%20cover%3F\"><h3>What obligations does the free version cover?<\/h3><\/dt>\n<dd><p>The free version covers obligations 1 (Privacy Officer designation), 2 (Privacy policy generation), and 3 (Cookie consent banner). Obligations 4 through 8 are available in the separate Loi 25 Comply Pro plugin.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20work%20with%20elementor%3F\"><h3>Does the plugin work with Elementor?<\/h3><\/dt>\n<dd><p>Yes, the cookie banner and privacy policy injection are fully compatible with Elementor and Elementor Pro.<\/p><\/dd>\n<dt id=\"is%20data%20stored%20locally%3F\"><h3>Is data stored locally?<\/h3><\/dt>\n<dd><p>Yes. All data generated by the plugin (consent log, RPRP information) is stored exclusively in your local WordPress database. No personal data from your visitors is transmitted to external servers.<\/p><\/dd>\n<dt id=\"is%20this%20plugin%20for%20quebec%20businesses%20only%3F\"><h3>Is this plugin for Quebec businesses only?<\/h3><\/dt>\n<dd><p>Yes. This plugin is designed specifically to help Quebec businesses comply with Quebec's Law 25. The admin interface and generated documents are in Canadian French, with bilingual French\/English support for public-facing content.<\/p><\/dd>\n<dt id=\"how%20do%20i%20display%20the%20privacy%20policy%20on%20a%20page%3F\"><h3>How do I display the privacy policy on a page?<\/h3><\/dt>\n<dd><p>Go to Loi 25 Comply &gt; Politique, fill in your organization information, and select a WordPress page. The policy is injected automatically. You can also use the [loi25_politique] shortcode manually.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.9.5<\/h4>\n\n<ul>\n<li>Fix: readme.txt no longer lists \"third-party script blocking\" as a free feature - this was removed from the Lite build in 1.9.3 and has always been Pro-only; it is now listed under Pro features instead, alongside Google Consent Mode v2 and automated email reports<\/li>\n<\/ul>\n\n<h4>1.9.4<\/h4>\n\n<ul>\n<li>Fix: duplicate wp_unslash() call removed from Loi25_Security sanitization methods (the caller already unslashes $_POST\/$_GET before calling)<\/li>\n<li>Fix: inconsistent accented title on the \"Banniere cookies\" admin page, and missing accents on \"Politique de confidentialite\" menu label<\/li>\n<li>Fix: misplaced docblock comment in class-loi25-politique.php<\/li>\n<li>Fix: outdated \"Pro\" docblock on the privacy policy module - this module has been part of the Lite version since 1.2.0<\/li>\n<li>Note: languages\/loi25-comply.pot version header refreshed; full regeneration via wp i18n make-pot still pending (tracked separately)<\/li>\n<\/ul>\n\n<h4>1.9.3<\/h4>\n\n<ul>\n<li>Fix: missing uninstall.php restored - plugin tables and options are now properly removed on uninstall<\/li>\n<li>Fix: Pro-only files (script blocker, plugin detector) removed from the Lite build - these belong only in the separate Loi 25 Comply Pro plugin<\/li>\n<li>Fix: dead code removed (orphaned PDF export referencing a non-existent class)<\/li>\n<li>Fix: banner position list unified between the setup wizard and the banner settings screen - selecting \"Bottom left\", \"Bottom right\", or \"Centered modal\" in the wizard now correctly applies matching CSS<\/li>\n<\/ul>\n\n<h4>1.7.0<\/h4>\n\n<ul>\n<li>Aucun changement cote Lite (version Pro uniquement)<\/li>\n<\/ul>\n\n<h4>1.6.0<\/h4>\n\n<ul>\n<li>Correction : titre de la page \"Scripts bloques\" corrige en \"Scripts bloques\" avec accent<\/li>\n<li>Amelioration : texte d'avertissement renforce sur les risques de non-conformite Loi 25<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>Major: plugin restructured as a fully functional free plugin (Lite) for WordPress.org<\/li>\n<li>Added: Privacy Policy generator (Module 2) now included in the free version<\/li>\n<li>Removed: all Pro module code (modules 4-9) - available in separate Loi 25 Comply Pro plugin<\/li>\n<li>Removed: Freemius SDK and license checks<\/li>\n<li>Fix: inline scripts moved to wp_add_inline_script() (WordPress.org compliance)<\/li>\n<li>Fix: WordPress.org directory assets (banner, icons) removed from plugin ZIP<\/li>\n<li>Fix: Contributors field updated with WordPress.org username cfgilles<\/li>\n<\/ul>\n\n<h4>1.1.5<\/h4>\n\n<ul>\n<li>Fix: CSS anchored to #loi25-banner and #loi25-modal IDs to prevent theme override conflicts<\/li>\n<\/ul>\n\n<h4>1.1.4<\/h4>\n\n<ul>\n<li>Fix: phpcs:ignore extended on DROP TABLE in uninstall cleanup<\/li>\n<\/ul>\n\n<h4>1.1.3<\/h4>\n\n<ul>\n<li>Fix: text domain corrected from 'loi25-comply' to 'loi-25-comply' in all PHP files<\/li>\n<\/ul>\n\n<h4>1.1.2<\/h4>\n\n<ul>\n<li>Fix: uninstall.php removed - cleanup logic moved to Freemius after_uninstall hook<\/li>\n<\/ul>\n\n<h4>1.1.1<\/h4>\n\n<ul>\n<li>Fix: esc_attr() added on CSS class output in dashboard<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Fix: various WordPress.org compliance fixes<\/li>\n<\/ul>\n\n<h4>0.9.0<\/h4>\n\n<ul>\n<li>Add: category-based consent modal<\/li>\n<li>Add: third-party script blocking by category<\/li>\n<li>Add: [loi25_manage_consent] shortcode<\/li>\n<\/ul>\n\n<h4>0.1.0<\/h4>\n\n<ul>\n<li>Initial release<\/li>\n<\/ul>","raw_excerpt":"WordPress compliance plugin for Quebec&#039;s Law 25 (privacy legislation). Cookie consent banner, privacy policy generator, and RPRP designation.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/me.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/324036","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/me.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/me.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/me.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=324036"}],"author":[{"embeddable":true,"href":"https:\/\/me.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/cfgilles"}],"wp:attachment":[{"href":"https:\/\/me.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=324036"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/me.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=324036"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/me.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=324036"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/me.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=324036"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/me.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=324036"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/me.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=324036"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}