iubenda Cookie Solution for GDPR - Version 2.3.0

Version Description

  • Fix: Multiple consent forms per page support
  • Fix: WP Forms checkbox field compatibility
  • Tweak: AMP consent geolocation support
Download this release

Release Info

Developer dfactory
Plugin Icon 128x128 iubenda Cookie Solution for GDPR
Version 2.3.0
Comparing to
See all releases

Code changes from version 2.2.0 to 2.3.0

Files changed (5) hide show
  1. includes/amp.php +14 -3
  2. includes/forms.php +9 -0
  3. iubenda_cookie_solution.php +3 -3
  4. js/frontend.js +174 -137
  5. readme.txt +42 -20
includes/amp.php CHANGED
@@ -39,10 +39,21 @@ class iubenda_AMP {
39
  echo '
40
  <script async custom-element="amp-consent" src="https://cdn.ampproject.org/v0/amp-consent-latest.js"></script>
41
  <script async custom-element="amp-iframe" src="https://cdn.ampproject.org/v0/amp-iframe-latest.js"></script>';
42
- /* optional geo support
43
- echo '
 
 
 
 
 
 
 
 
 
 
44
  <script async custom-element="amp-geo" src="https://cdn.ampproject.org/v0/amp-geo-0.1.js"></script>';
45
- */
 
46
  // CSS style
47
  echo '
48
  <style amp-custom>
39
  echo '
40
  <script async custom-element="amp-consent" src="https://cdn.ampproject.org/v0/amp-consent-latest.js"></script>
41
  <script async custom-element="amp-iframe" src="https://cdn.ampproject.org/v0/amp-iframe-latest.js"></script>';
42
+
43
+ // optional geo support
44
+ if ( iubenda()->multilang && ! empty( iubenda()->lang_current ) ) {
45
+ $code = iubenda()->options['cs']['code_' . iubenda()->lang_current];
46
+ } else {
47
+ $code = iubenda()->options['cs']['code_default'];
48
+ }
49
+
50
+ $configuration_raw = iubenda()->parse_configuration( $code );
51
+
52
+ if ( isset( $configuration_raw['gdprAppliesGlobally'] ) && ! $configuration_raw['gdprAppliesGlobally'] ) {
53
+ echo '
54
  <script async custom-element="amp-geo" src="https://cdn.ampproject.org/v0/amp-geo-0.1.js"></script>';
55
+ }
56
+
57
  // CSS style
58
  echo '
59
  <style amp-custom>
includes/forms.php CHANGED
@@ -610,6 +610,15 @@ class iubenda_Forms {
610
  );
611
  }
612
  break;
 
 
 
 
 
 
 
 
 
613
  default :
614
  $formdata['form_fields'][] = array(
615
  'id' => $field['id'],
610
  );
611
  }
612
  break;
613
+ // fix multiple choice checkbox
614
+ case 'checkbox' :
615
+ $formdata['form_fields'][] = array(
616
+ 'id' => $field['id'],
617
+ 'name' => 'wpforms[fields][' . $index . '][]',
618
+ 'type' => $field['type'],
619
+ 'label' => $field['label']
620
+ );
621
+ break;
622
  default :
623
  $formdata['form_fields'][] = array(
624
  'id' => $field['id'],
iubenda_cookie_solution.php CHANGED
@@ -3,7 +3,7 @@
3
  Plugin Name: Cookie and Consent Solution for the GDPR & ePrivacy
4
  Plugin URI: https://www.iubenda.com
5
  Description: An All-in-One approach developed by iubenda, which includes functionalities of two powerful solutions that help to make your website GDPR and ePrivacy compliant.
6
- Version: 2.2.0
7
  Author: iubenda
8
  Author URI: https://www.iubenda.com
9
  License: MIT License
@@ -32,7 +32,7 @@ define( 'IUB_DEBUG', false );
32
  * iubenda final class.
33
  *
34
  * @class iubenda
35
- * @version 2.2.0
36
  */
37
  class iubenda {
38
 
@@ -62,7 +62,7 @@ class iubenda {
62
  )
63
  );
64
  public $base_url;
65
- public $version = '2.2.0';
66
  public $activation = array(
67
  'update_version' => 0,
68
  'update_notice' => true,
3
  Plugin Name: Cookie and Consent Solution for the GDPR & ePrivacy
4
  Plugin URI: https://www.iubenda.com
5
  Description: An All-in-One approach developed by iubenda, which includes functionalities of two powerful solutions that help to make your website GDPR and ePrivacy compliant.
6
+ Version: 2.3.0
7
  Author: iubenda
8
  Author URI: https://www.iubenda.com
9
  License: MIT License
32
  * iubenda final class.
33
  *
34
  * @class iubenda
35
+ * @version 2.3.0
36
  */
37
  class iubenda {
38
 
62
  )
63
  );
64
  public $base_url;
65
+ public $version = '2.3.0';
66
  public $activation = array(
67
  'update_version' => 0,
68
  'update_notice' => true,
js/frontend.js CHANGED
@@ -1,151 +1,188 @@
1
  ( function ( $ ) {
2
 
3
  $( document ).ready( function () {
4
- // parse args
5
- var args = $.parseJSON( iubForms );
6
-
7
- // console.log( args );
8
-
9
- // loop though plugins
10
- if ( $( args ).length > 0 ) {
11
- $.each( args, function( source, forms ) {
12
- // loop through forms
13
- if ( $( forms ).length > 0 ) {
14
- $.each( forms, function( id, form ) {
15
- // console.log( form );
16
-
17
- var formArgs = {};
18
-
19
- // get corresponding html form id
20
- switch ( source ) {
21
-
22
- // WooCommerce Checkout Form
23
- case 'woocommerce' :
24
- var htmlFormContainer = $( '.woocommerce-checkout' );
25
-
26
- // form exists, let's use it
27
- if ( htmlFormContainer.length > 0 ) {
28
- // setup vars
29
- formArgs = {
30
- submitElement: null,
31
- form: {
32
- selector: document.querySelectorAll( 'form.woocommerce-checkout' )[0],
33
- map: form.form.map
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
34
  }
35
- };
36
-
37
- // handle ajax submit
38
- $( htmlFormContainer ).on( 'checkout_place_order', function( e ) {
39
- _iub.cons.sendData();
40
- // don't send before page refresh
41
- // on succcessfull submit it will be sent automatically
42
- // _iub.cons.sendFromLocalStorage();
43
- } );
44
- }
45
-
46
- break;
47
-
48
- // WordPress Comment Form
49
- case 'wp_comment_form' :
50
- var htmlFormContainer = $( '#commentform' );
51
-
52
- // form exists, let's use it
53
- if ( htmlFormContainer.length > 0 ) {
54
- // adjust submit element id
55
- var submitElement = document.getElementById( htmlFormContainer.attr( 'id' ) ).querySelectorAll( 'input[type=submit]' )[0];
56
-
57
- /* id="submit" override
58
- if ( typeof submitElement !== 'undefined' && submitElement.name == 'submit' ) {
59
- submitElement.id = 'wp-comment-submit';
60
- submitElement.name = 'wp-comment-submit';
61
- }
62
- */
63
-
64
- // setup vars
65
- formArgs = {
66
- submitElement: submitElement,
67
- form: {
68
- selector: document.getElementById( htmlFormContainer.attr( 'id' ) ),
69
- map: form.form.map
70
- }
71
- };
72
- }
73
-
74
- break;
75
-
76
- // Contact Form 7
77
- case 'wpcf7' :
78
- // var regex = new RegExp( '^wpcf7-f([0-9]*)-' );
79
- var htmlFormContainer = $( 'div[id^="wpcf7-f' + id + '-"]' );
80
-
81
- // form exists, let's use it
82
- if ( htmlFormContainer.length > 0 ) {
83
- // setup vars
84
- formArgs = {
85
- // submitElement: document.getElementById( htmlFormContainer.attr( 'id' ) ).getElementsByClassName( 'wpcf7-submit' )[0],
86
- submitElement: null,
87
- form: {
88
- selector: document.getElementById( htmlFormContainer.attr( 'id' ) ).getElementsByClassName( 'wpcf7-form' )[0],
89
- map: form.form.map
90
- }
91
- };
92
-
93
- // handle ajax submit
94
- $( document ).on( 'wpcf7mailsent', formArgs.form.selector, function( e ) {
95
- _iub.cons.sendData();
96
- _iub.cons.sendFromLocalStorage();
97
- // console.log( 'test' );
98
- } );
99
-
100
- };
101
-
102
- break;
103
 
104
- // WP Forms
105
- case 'wpforms' :
106
- var htmlFormContainer = $( 'div[id^="wpforms-' + id + '"]' );
107
-
108
- // form exists, let's use it
109
- if ( htmlFormContainer.length > 0 ) {
110
- var isAjax = $( '#wpforms-form-' + id ).hasClass( 'wpforms-ajax-form' );
111
-
112
- // setup vars
113
- formArgs = {
114
- submitElement: ( isAjax ? null : document.getElementById( 'wpforms-submit-' + id ) ),
115
- form: {
116
- selector: document.getElementById( 'wpforms-form-' + id ),
117
- map: form.form.map
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
118
  }
119
- };
120
-
121
- // handle ajax submit
122
- $( document ).on( 'wpformsAjaxSubmitSuccess', formArgs.form.selector, function( e ) {
123
- _iub.cons.sendData();
124
- _iub.cons.sendFromLocalStorage();
125
- // console.log( 'test' );
126
- } );
127
- };
128
-
129
- break;
130
- }
131
 
132
- // make sure corresponding form exists push form
133
- if ( ! $.isEmptyObject( formArgs ) ) {
134
- // push consent vars
135
- if ( typeof form.consent !== 'undefined' && form.consent.legal_notices.length > 0 ) {
136
- formArgs.consent = {};
137
- formArgs.consent.legal_notices = form.consent.legal_notices;
138
- }
139
-
140
- console.log( formArgs );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
141
 
142
- // build form consent data
143
- _iub.cons_instructions.push( [ 'load', formArgs ] );
144
  }
145
  } );
146
  }
147
- } );
148
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
149
  } );
150
 
151
  } )( jQuery );
1
  ( function ( $ ) {
2
 
3
  $( document ).ready( function () {
4
+
5
+ var iubendaConsentSolution = new function () {
6
+ var _this = this;
7
+
8
+ // parse args
9
+ var args = $.parseJSON( iubForms );
10
+
11
+ // console.log( args );
12
+
13
+ // get forms
14
+ this.init = function () {
15
+ // loop though plugins
16
+ if ( $( args ).length > 0 ) {
17
+ $.each( args, function( source, forms ) {
18
+ // loop through forms
19
+ if ( $( forms ).length > 0 ) {
20
+ $.each( forms, function( id, form ) {
21
+ // console.log( form );
22
+
23
+ // get corresponding html form id
24
+ switch ( source ) {
25
+
26
+ // WooCommerce Checkout Form
27
+ case 'woocommerce' :
28
+ var htmlFormContainer = $( '.woocommerce-checkout' );
29
+
30
+ // form exists, let's use it
31
+ if ( htmlFormContainer.length > 0 ) {
32
+ // setup vars
33
+ formArgs = {
34
+ submitElement: null,
35
+ form: {
36
+ selector: document.querySelectorAll( 'form.woocommerce-checkout' )[0],
37
+ map: form.form.map
38
+ }
39
+ };
40
+
41
+ // handle ajax submit
42
+ $( htmlFormContainer ).on( 'checkout_place_order', function( e ) {
43
+ _this.submitForm( form, formArgs );
44
+
45
+ _iub.cons.sendData();
46
+ // don't send before page refresh
47
+ // on succcessfull submit it will be sent automatically
48
+ // _iub.cons.sendFromLocalStorage();
49
+ } );
50
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
51
 
52
+ break;
53
+
54
+ // WordPress Comment Form
55
+ case 'wp_comment_form' :
56
+ var htmlFormContainer = $( '#commentform' );
57
+
58
+ // form exists, let's use it
59
+ if ( htmlFormContainer.length > 0 ) {
60
+ // adjust submit element id
61
+ var submitElement = document.getElementById( htmlFormContainer.attr( 'id' ) ).querySelectorAll( 'input[type=submit]' )[0];
62
+
63
+ /* id="submit" override
64
+ if ( typeof submitElement !== 'undefined' && submitElement.name == 'submit' ) {
65
+ submitElement.id = 'wp-comment-submit';
66
+ submitElement.name = 'wp-comment-submit';
67
+ }
68
+ */
69
+
70
+ // setup vars
71
+ formArgs = {
72
+ // submitElement: submitElement,
73
+ submitElement: null,
74
+ form: {
75
+ selector: document.getElementById( htmlFormContainer.attr( 'id' ) ),
76
+ map: form.form.map
77
+ }
78
+ };
79
+
80
+ $( submitElement ).on( 'click touchstart', function( e ) {
81
+ _this.submitForm( form, formArgs );
82
+
83
+ _iub.cons.sendData();
84
+ // don't send before page refresh
85
+ // on succcessfull submit it will be sent automatically
86
+ // _iub.cons.sendFromLocalStorage();
87
+ } );
88
  }
 
 
 
 
 
 
 
 
 
 
 
 
89
 
90
+ break;
91
+
92
+ // Contact Form 7
93
+ case 'wpcf7' :
94
+ // var regex = new RegExp( '^wpcf7-f([0-9]*)-' );
95
+ var htmlFormContainer = $( 'div[id^="wpcf7-f' + id + '-"]' );
96
+
97
+ // form exists, let's use it
98
+ if ( htmlFormContainer.length > 0 ) {
99
+ var selector = document.getElementById( htmlFormContainer.attr( 'id' ) ).getElementsByClassName( 'wpcf7-form' )[0];
100
+
101
+ // handle ajax submit
102
+ $( document ).on( 'wpcf7mailsent', selector, function( e ) {
103
+ // setup vars
104
+ formArgs = {
105
+ // submitElement: document.getElementById( htmlFormContainer.attr( 'id' ) ).getElementsByClassName( 'wpcf7-submit' )[0],
106
+ submitElement: null,
107
+ form: {
108
+ selector: selector,
109
+ map: form.form.map
110
+ }
111
+ };
112
+
113
+ // send only if specific form has been submitted
114
+ if ( selector.parentElement.id == e.target.id ) {
115
+ _this.submitForm( form, formArgs );
116
+
117
+ _iub.cons.sendData();
118
+ _iub.cons.sendFromLocalStorage();
119
+ }
120
+ } );
121
+
122
+ };
123
+
124
+ break;
125
+
126
+ // WP Forms
127
+ case 'wpforms' :
128
+ var htmlFormContainer = $( 'div[id^="wpforms-' + id + '"]' );
129
+
130
+ // form exists, let's use it
131
+ if ( htmlFormContainer.length > 0 ) {
132
+ var selector = document.getElementById( 'wpforms-form-' + id );
133
+ var isAjax = $( '#wpforms-form-' + id ).hasClass( 'wpforms-ajax-form' );
134
+
135
+ // handle ajax submit
136
+ $( document ).on( 'wpformsAjaxSubmitSuccess', selector, function( e ) {
137
+ // setup vars
138
+ formArgs = {
139
+ submitElement: ( isAjax ? null : document.getElementById( 'wpforms-submit-' + id ) ),
140
+ form: {
141
+ selector: selector,
142
+ map: form.form.map
143
+ }
144
+ };
145
+
146
+ // send only if specific form has been submitted
147
+ if ( selector.id == e.target.id ) {
148
+ _this.submitForm( form, formArgs );
149
+
150
+ _iub.cons.sendData();
151
+ _iub.cons.sendFromLocalStorage();
152
+ }
153
+ } );
154
+ };
155
+
156
+ break;
157
+ }
158
+
159
+ // console.log( source );
160
 
161
+ } );
 
162
  }
163
  } );
164
  }
165
+ };
166
+
167
+ // submit form
168
+ this.submitForm = function ( form, formArgs ) {
169
+ // push consent vars
170
+ if ( typeof form.consent !== 'undefined' && form.consent.legal_notices.length > 0 ) {
171
+ formArgs.consent = {};
172
+ formArgs.consent.legal_notices = form.consent.legal_notices;
173
+ }
174
+
175
+ console.log( formArgs );
176
+
177
+ // build form consent data
178
+ _iub.cons_instructions.push( [ 'load', formArgs ] );
179
+ };
180
+
181
+ };
182
+
183
+ // initialize
184
+ iubendaConsentSolution.init();
185
+
186
  } );
187
 
188
  } )( jQuery );
readme.txt CHANGED
@@ -5,7 +5,7 @@ Tags: cookies, cookie law, cookie policy, cookie banner, privacy policy, cookie
5
  Requires at least: 4.0
6
  Requires PHP: 5.2.4
7
  Tested up to: 5.3.2
8
- Stable tag: 2.2.0
9
  License: MIT License
10
  License URI: http://opensource.org/licenses/MIT
11
 
@@ -23,11 +23,14 @@ This plugin drastically reduces the need for direct interventions in the code of
23
 
24
  * The plugin automatically inserts the iubenda code in the head of every page of the site
25
  * Allows you to automatically or manually block scripts that can install cookies prior to consent, without the need of direct intervention on the code
 
26
  * Asynchronously re-activates cookie scripts once consent is collected.
27
  * Handles the display of the cookie banner and cookie policy, allowing you to fully customize the banner to match the look and colors of your site if needed
 
28
  * Saves user preferences about the use of cookies and displays a clean page (without banner) to users who have already provided their consent
29
  * Integrates with IAB’s [Transparency and Consent Framework](https://www.iubenda.com/en/help/7440-enable-preference-management-iab-framework#revenue) (TCF)
30
- * Provides Google AMP compatibility
 
31
  * Features an easy-to-use interface for entering custom scripts and iframes
32
  * Detects bots/spiders and serves them a clean page so that your SEO efforts are never compromised
33
 
@@ -105,36 +108,53 @@ Our Cookie and Consent Solution plugin for WordPress simplifies and manages thes
105
 
106
  == Installation ==
107
 
108
- - Search in your WordPress plugins admin panel for "iubenda Cookie Solution", install it;
109
- - Once the plugin is installed and activated, go to the Admin Panel -> iubenda menu where you will be asked to paste the code into tht field that gets generated from your Iubenda account dashboard when you activate the cookie law kit for your privacy policy. For more information on how to activate the cookie law kit, see this article: https://www.iubenda.com/it/help/posts/680;
110
- - At this point the plugin will begin to show the banner on which displays your cookie policy (link) to users who visit the site for the first time. No need for other configurations;
111
- - Furthermore, the plugin automatically recognizes and blocks cookies that get installed via the YouTube video player and social widgets - such as the Facebook Like Box - on your site. **Important note** the scripts for Facebook, Twitter, G+, and YouTube iframe only get blocked automatically when generated from the server side (therefore processed by PHP via WordPress). Scripts that are added to the page via Javascript after page load cannot be blocked automatically;
112
- - If you'd like to manually block a specific script "wrap" it eith the following HTML comments:
113
-
114
- `<!--IUB-COOKIE-BLOCK-START-->
115
- <!--IUB-COOKIE-BLOCK-END-->`
116
- - In case you're querying WordPress via API, you can disable our plugin by using the iub_no_parse=true URL parameter, like this: www.example.com/api/get_recent_posts?iub_no_parse=true.
 
 
 
 
 
 
 
117
 
118
  == Frequently Asked Questions ==
119
 
120
  **Where can I find help?**
121
- You can find a dedicated support forum thread here [Uservoice forum](http://support.iubenda.com/forums/314835-general/suggestions/9670701-discussion-regarding-the-iubenda-cookie-law-soluti) or we're happy to answer at info@iubenda.com.
122
 
123
  **Do you have more guidance, or a demo?**
124
- Yes, right here: https://www.iubenda.com/en/help/posts/1177
 
 
125
 
126
  **Bug reports**
127
- The best way you can help us is by providing as much information as possible, including the use of wp_debug https://codex.wordpress.org/Debugging_in_WordPress.
128
- We will be very happy to receive feedback here: [Uservoice forum](http://support.iubenda.com/forums/314835-general/suggestions/9670701-discussion-regarding-the-iubenda-cookie-law-soluti)
129
 
130
  == Screenshots ==
131
 
132
- 1. This screen shot shows the default banner on top of our test site testkada4.altervista.org/cookie-test/example2.html
133
- 2. When clicking on the cookie policy link, the user gets a view of the entire cookie policy, where they ultimately can give their consent
134
- 3. It's as simple as copy-pasting the code from iubenda into the plugin form.
 
 
 
135
 
136
  == Changelog ==
137
 
 
 
 
 
 
138
  = 2.2.0 =
139
  * Fix: Undefined notice during plugin update
140
 
@@ -405,5 +425,7 @@ We will be very happy to receive feedback here: [Uservoice forum](http://support
405
 
406
  == Upgrade Notice ==
407
 
408
- = 2.2.0 =
409
- * Fix: Undefined notice during plugin update
 
 
5
  Requires at least: 4.0
6
  Requires PHP: 5.2.4
7
  Tested up to: 5.3.2
8
+ Stable tag: 2.3.0
9
  License: MIT License
10
  License URI: http://opensource.org/licenses/MIT
11
 
23
 
24
  * The plugin automatically inserts the iubenda code in the head of every page of the site
25
  * Allows you to automatically or manually block scripts that can install cookies prior to consent, without the need of direct intervention on the code
26
+ * Allows you to autodetect and limit prior-blocking and cookie consent requests only to users from the EU – where this is a legal requirement – while running cookies scripts normally in regions where you are still legally allowed to do so.
27
  * Asynchronously re-activates cookie scripts once consent is collected.
28
  * Handles the display of the cookie banner and cookie policy, allowing you to fully customize the banner to match the look and colors of your site if needed
29
+ * California Consumer Privacy Act [(CCPA) Support](https://www.iubenda.com/en/help/21165-ccpa-how-to-add-a-notice-of-collection-and-a-do-not-sell-link)
30
  * Saves user preferences about the use of cookies and displays a clean page (without banner) to users who have already provided their consent
31
  * Integrates with IAB’s [Transparency and Consent Framework](https://www.iubenda.com/en/help/7440-enable-preference-management-iab-framework#revenue) (TCF)
32
+ * Allows you to provide you users with granular, per-category preference control (e.g. basic functionalities, experience enhancement, targeting & advertising)
33
+ * Compatible with Google's Accelerated Mobile Pages (AMP)
34
  * Features an easy-to-use interface for entering custom scripts and iframes
35
  * Detects bots/spiders and serves them a clean page so that your SEO efforts are never compromised
36
 
108
 
109
  == Installation ==
110
 
111
+ * Search in your WordPress plugins admin panel for iubenda Cookie and Consent Solution”, install it;
112
+ * Once the plugin is installed and activated, go to the Admin Panel iubenda menu where you can select either the Cookie Solution or Consent Solution (depending on which you’d like to set up first).
113
+ * **For the Cookie Solution**, you will be asked to paste your script into that field – the script is generated from your iubenda account dashboard when you activate the solution. For more information on how to activate the Cookie Solution, see this article (https://www.iubenda.com/en/help/1177-cookie-solution-getting-started#banner).
114
+ * At this point the plugin will begin to show your banner on which displays the legal text, the consent options and your cookie policy (link) to users who visit the site for the first time. No need for other configurations;
115
+ * Furthermore, the plugin automatically recognizes and blocks cookies that get installed via an extensive list of services such as the YouTube video player, social widgets (e.g the Facebook Like Box) etc. on your site. The full list is included in the “details” above.
116
+ * Important note: Scripts can only be automatically blocked when generated from the server side (therefore processed by PHP via WordPress). Scripts that are added to the page via Javascript after page load must be blocked manually. Thankfully, this is fairly easy to do via the Custom Scripts field in the plugin console. Simply enter the custom script or iframe sources you'd like to block within the field, and click on the save changes button. You can find details, examples and further information [here](https://www.iubenda.com/en/help/1215-cookie-solution-wordpress-plugin-installation-guide#blocking-custom-scripts).
117
+ * If you’d like to manually block a specific script using a manual “wrap” method, you can use the following:
118
+ `<!--IUB-COOKIE-BLOCK-START-->
119
+ <iframe src="...
120
+ <img src="...
121
+ <!--IUB-COOKIE-BLOCK-END-->`
122
+ * For elements installed directly within WordPress posts (as opposed to elements integrated at the template level – example footer.php) there are shortcodes available:
123
+ `[iub-cookie-policy]
124
+ [/iub-cookie-policy]`
125
+ * In case you’re querying WordPress via API, you can disable our plugin by using the iub_no_parse=true URL parameter, like this: www.example.com/api/get_recent_posts?iub_no_parse=true (http://www.example.com/api/get_recent_posts?iub_no_parse=true).
126
+ * **For the Consent Solution**, you will need to paste in your Consent Solution API key. Once you’ve activated the Consent Solution in your iubenda dashboard, you can find your public API key in your dashboard (https://www.iubenda.com/en/dashboard) at [Your website] > Consent Solution > Embed).
127
 
128
  == Frequently Asked Questions ==
129
 
130
  **Where can I find help?**
131
+ You can find a dedicated support forum thread here [Uservoice forum](https://support.iubenda.com/support/discussions/forums/42000118028) or we're happy to answer at info@iubenda.com.
132
 
133
  **Do you have more guidance, or a demo?**
134
+ Here’s a [quick video](https://iubenda.wistia.com/medias/02ie8av6kt) on what the cookie banner looks like and how you can configure it. More details on how to fully set up the Cookie Solution for wordpress [here](https://www.iubenda.com/en/help/1215-cookie-solution-wordpress-plugin-installation-guide).
135
+
136
+ Here’s a [quick look](https://iubenda.wistia.com/medias/fsbr465bku) at the Consent Solution dashboard. More details on how to fully set up the Consent Solution for wordpress [here](https://www.iubenda.com/en/help/13083-consent-solution-wordpress-contact-form-7) .
137
 
138
  **Bug reports**
139
+ The best way you can help us is by providing as much information as possible, including the use of [wp_debug](https://wordpress.org/support/article/debugging-in-wordpress/).
140
+ We will be very happy to receive feedback here: [Uservoice forum](https://support.iubenda.com/support/discussions/forums/42000115771)
141
 
142
  == Screenshots ==
143
 
144
+ 1. It's as simple as copy-pasting the code from iubenda into the plugin form.
145
+ 2. Simply enter you API key and click on autodetect to see all forms eligible for mapping.
146
+ 3. The visual configurator lets you fully customize the look and feel of your banner, wording, and consent collection options.
147
+ 4. When clicking on the cookie policy link, the user gets a view of the entire cookie policy, where they ultimately can give their consent.
148
+ 5. IAB Transparency and consent framework integrated.
149
+ 6. IAB Transparency and consent framework integrated.
150
 
151
  == Changelog ==
152
 
153
+ = 2.3.0 =
154
+ * Fix: Multiple consent forms per page support
155
+ * Fix: WP Forms checkbox field compatibility
156
+ * Tweak: AMP consent geolocation support
157
+
158
  = 2.2.0 =
159
  * Fix: Undefined notice during plugin update
160
 
425
 
426
  == Upgrade Notice ==
427
 
428
+ = 2.3.0 =
429
+ * Fix: Multiple consent forms per page support
430
+ * Fix: WP Forms checkbox field compatibility
431
+ * Tweak: AMP consent geolocation support