Cookies and Content Security Policy


Be fully GDPR and CCPA compliant through Content Security Policy.

Block cookies and unwanted external content by setting Content Security Policy. A modal will be shown on the front end to let the visitor choose what kind of resources to accept. It also adds a layer of security for your site since iframes, scripts and images from unknown domains are blocked.

Multilingual support through WPML, Polylang or probably any multilingual plugin out there since this plugin follows WordPress Coding Standards. See FAQ below on how to translate with WPML or Polylang.

New: Quickstart

New since version 1.57: Quickstart, choose common resources from a list that are automatically added to your Domains list. So, it’s even easier to set it up! Check, check, check and check!
Updated regularly.


  • First modal, when using default colors.

  • Second modal, when using default colors.

  • Banner, when using default colors. Replaces First modal, when the setting "Do not use a modal, I want a banner." is used.

  • First modal, example of customized colors.

  • Second modal, example of customized colors.

  • Banner, example of customized colors.

  • Activate, by default when installing, the plugin is deactivated, choose admin to test your settings before going live just to check out if everything works.

  • Quickstart, choose from a long list of common resources to get started super quick.

  • Domains, this is where you white list all the domains where you allow content to be served from.

  • Texts, use the default texts or write your own. This is also fully multi language supported.

  • Settings, cusomize it how you like it.

  • Colors, without knowing css or anything, customize the colors to fit your site.

  • Look in console to see what is blocked. In this case you'd probably like to add to Experience > Script. Or just use Quickstart and choose Twitter.


Search for Cookies and Content Security Policy under Plugins on your WordPress install or download and:

  1. Upload cookies-and-content-security-policy to the /wp-content/plugins/ directory
  2. Activate the plugin through the ‚Plugins‘ menu in WordPress
  3. Go to Settings > Cookies and Content Security Policy


Does this make my site GDPR compliant?

Yes, if you set it up right.

Does this make my site CCPA compliant?

Yes, if you set it up right.

How do I know what resources are used on my site?

After install, open a console (see screenshot 13) and see what is blocked by Content Security Policy. Then just go to the settings and white list all domains you want to accept.

The settings does not seem to have an effect. What do I do?

There are three scenarios where this can happen:

  • In some cases cookies are cached. It could be your hosting (for example WP Engine does this), then just contact them and ask them to uncache the cookies_and_content_security_policy cookie.
  • In other cases it could be your cache plugin (for example Litespeed cache does this), then just review your settings. In the case of Litespeed cache, go to Cache/Excludes and exclude cookies_and_content_security_policy.
  • If you’re using static page cache that doesn’t go through php, go to Settings > Cookies and Content Security Policy > Settings and check Use meta under Advanced settings.

Can you show me some examples of sites using this plugin?

In English

  • – Transladed strings in Polylang, works in the same way with WPML
  • – Transladed strings in Polylang, works in the same way with WPML

In Swedish

  • – Transladed strings in Polylang, works in the same way with WPML
  • – Transladed strings in Polylang, works in the same way with WPML
  • – Multisite, also
  • – Multisite, also
  • – Multisite for all sites

In Norwegian

  • – Transladed strings in Polylang, works in the same way with WPML

Is the plugin responsive?


Is the plugin translatable?

Yes, all texts are translatable. There are 10+ languages already translated. And if you want to contribute with a translation of your own language, please do! <3 All texts on the front end can be changed directly in the admin. And if you are using WPML, Polylang, or some other multilanguage plugin, there is also support for multilanguage translations.

How do I translate in WPML?

  1. Make sure you have „WPML String Translation“ installed.
  2. Go to Settings > Cookies and Content Security Policy > Texts and save your texts.
  3. Go to WPML > String Translation.
  4. Search for „cacsp_“ (without quotes).
  5. Click the plus sign to add translation.
  6. If you have a string named „cacsp_option_settings_policy_link“, the value is a number. It is the ID of the Cookie policy page. Translate this by entering the ID of the cookie policy page in the language you are translating to.

How do I translate in Polylang?

  1. Go to Settings > Cookies and Content Security Policy > Texts and save your texts.
  2. In the WordPress admin bar, choose „Show all languages“.
  3. Go to Languages > Strings translations.
  4. In the „View all groups“ dropdown, choose cookies-and-content-security-policy, and click „Filter“.
  5. Translate your texts in the form.
  6. If you have a string named „cacsp_option_settings_policy_link“, the value is a number. It is the ID of the Cookie policy page. Translate this by entering the ID of the cookie policy page in the language you are translating to.

Can I change the look of it?

Yes, there are settings for using a modal or a banner. Also you can choose if the site should be locked behind the modal or if the site should be usable without setting your preferences. You can also change the colors of everything. And if you want you can disable the css entirely and use your own.

Does it include a cookie policy page?

No, but you can make your own, and in the settings you can select it and the modal won’t show there so that the user can read it without accepting first.

What if the user wants to change their settings?

You can add a link anywhere on your site that links to #cookiesAndContentPolicySettings and clicking that will open the settings.

Are the css and js files minified?

Yes, but you also get them unminified and the css also comes as SASS so you can change anything.

Can I bypass the plugin for testing purposes?

Yes, just add the querystring ?cacsp_bypass=true to your url, when running speedtest in Gmetrix for instance. It will set a session cookie that accepts all Domains you’ve set.

Does it work with page builders?

Yes! Not all are tested, but all tested works!

These have been tested:

  • Divi
  • Beaver Builder
  • WPBakery Page Builder

I’m using a custom path in my WordPress setup and now the plugin doesn’t work. What do I do?

This happens if you are using for example Bedrock by Roots.

Go to the plugins folder, and in the folder cookies-and-content-security-policy, rename the file cookies-and-content-security-policy-vars-sample.php to cookies-and-content-security-policy-vars.php and save it to your plugins folder. After that, change this line:
$wp_load_path = ‚/your/custom/path/to/wp-load.php‘; so that the path reflects your server path to wp-load.php. The value can also be relative, like ../../../../wp-load.php.


18. April 2021
Works perfectly and an amazing add to my site. Recommended highly :)!
1. April 2021
It's easy to set up, apparently blocks what you tell it to and personally I feel it works really well. They update it regularly which is a plus point. I would add in Domains the Amazon referral links. I don't know if it will be possible but as it is an external resource I understand that it should be able to be rejected. Thanks for the good work done
Alle 31 Rezensionen lesen

Mitwirkende & Entwickler

„Cookies and Content Security Policy“ ist Open-Source-Software. Folgende Menschen haben an diesem Plugin mitgewirkt:


„Cookies and Content Security Policy“ wurde in 10 Sprachen übersetzt. Danke an die Übersetzerinnen und Übersetzer für ihre Mitwirkung.

Übersetze „Cookies and Content Security Policy“ in deine Sprache.

Interessiert an der Entwicklung?

Durchstöbere den Code, sieh dir das SVN Repository an oder abonniere das Entwicklungsprotokoll per RSS.



  • Vars file moved to make sure it’s not deleted on update
  • Bug fix for embedded PDFs in Gutenberg block


  • Better Quickstart for LinkedIn
  • Wildcard for Doubleclick when setting up Google Ads with Quickstart


  • Vars file added for all of you weird path people out there, I’m looking at you Bedrock 😉
  • Hubspot iframe for posting forms added to Quickstart
  • Googleapis domain for Google Maps added to Quickstart


  • Mime type specified for error message file
  • Wildcard domain for YouTube images in Quickstart


  • Fix for keeping cookie settings across sessions in iOS


  • Add file for allowed domains


  • Allowed domains for error message moved to separate file for better support for cache plugins
  • Fix for cookie message appearing in WordPress 5.8 block widgets


  • Deep link to #cookiesAndContentPolicySettings
  • Better readability in debug
  • Possibility to disable unsafe-inline
  • Possibility to disable unsafe-eval


  • Domain Path
  • Mailchimp added to Quickstart


  • added to Quickstart for Google Maps frame.


  • Quickstart for Jetpack
  • Body position for CLS
  • Better flex for scroll in settings modal


  • Google in Quickstart checkboxes


  • Patch: Bug found in „Only reload page when accepting“ from 1.83


  • Bust cache for js and css when new version of the plugin gets installed
  • Faster enqueue of js and css, millisecond(s) faster, but on big sites …
  • Compact custom css
  • Only reload page when accepting if there are visible blocked elements, like iframes and images. Otherwise just hide the modal and save the settings.
  • Added Calendly to Quickstart
  • Categorized resources in Quickstart
  • Domains for all Google resources updated in Quickstart
  • Better description on how to work with translation plugins


  • Text domain
  • Improvement of Google Analytics in Quickstart


  • Tested up to 5.7.
  • Patch bug that appeared in 1.80 when saving Settings in admin. Where Cookie policy target gave a warning when saving if it was not checked.
  • Better check for double domains in Quickstart, no more double new lines.
  • Added posibility to allow blob:. Found under Settings > Advanced settings.
  • and added to Quickstart for Google Maps.


  • Added posibility to add worker. Found under Settings > Advanced settings. Then just add your worker-domains under Domains.
  • Alternative link to cookie policy for those of you who have the policy on a different domain, in a PDF or something else.
  • Option to open your cookie policy in a new tab.
  • Accept cookies cookie has now SameSite set to strict.
  • Accept cookies cookie set to secure for SSL sites.


  • Patch bug in Quickstart for Twitter
  • Added and to Quickstart for YouTube
  • Added to Quickstart for Google Analytics
  • Updated text about static cache
  • Descriptions for settings moved to own row, to make settings easier to skim through


  • Google Translate without the extra t
  • Tested up to 5.6.1
  • Helpful tip on static cache
  • Screenshot of console


  • Update of Quickstart for reCAPTCHA v3


  • Possibility to hide unused sections in Settings. Example: If you don’t have any domains specified for Marketing, that setting won’t show for the visitor. Found under Settings > Basic settings


  • Patch bug found by @stafca in possibility to disable X-Content-Security-Policy. Thanks!


  • Capitalise company names correctly
  • Possibility to disable X-Content-Security-Policy. Found under Settings > Advanced settings
  • New optional button for refusing all cookies. Found under Settings > Basic settings


  • Minor translation fixes
  • Update of Quickstart for reCAPTCHA v3


  • Individual height of warning messages for blocked iframes and objects improved


  • Button width not based on flex basis on small screens
  • New Quickstart: Twitter


  • Updated Quickstart for Google Maps


  • Custom color for Save button border was used for background too.


  • Translations and spelling
  • We have Finnish translation!


  • Minor typos
  • Added to Quickstart: Google Translate
  • Hubspot in Quickstart is out of beta


  • Better string translation in WPML
  • Support for multiple cookie policy pages, one for each language, on multi language sites
  • Bypass querystring added to make testing easier, when testing speed in Gmetrix for instance, you don’t want anything blocked. Just add ?cacsp_bypass=true to your url when testing.


  • Grandma mode


  • Tested for CCPA compliance
  • Changed the expiry of consent to 1 year, so this can be stated in the cookie policy page for CCPA compliance, the default „Settings text“ has been updated to show this
  • New icon and banner, cookie and grandma drawn by Hedda Fager
  • New screenshots
  • Fixed typo in WPML FAQ
  • Disable scroll on page when settings modal is shown, gave double scrolbars when unsing „Allow user to access site without saving settings“


  • Added to Quickstart: SoundCloud
  • No outline on clicked setting in modal



  • Quickstart, out of beta
  • Quickstart, more resources added: Google Optimize, Google Ads conversions, Google Ads remarketing, Hubspot and reCAPTCHA v3
  • Bugfix for iframes and objects without src attribute


  • Translations


  • Translations


  • Adding refactored files


  • Refactoring of settings
  • Quickstart, choose common resources from a list that are automatically added to your Domains list


  • Make site clickable when using „Allow user to access site without saving settings“


  • googleoff: index added for modal and banner to be absolutely sure that the content of these doen’t get indexed by google
  • Fix for Safari on iOS 13 and the setting „Allow user to access site without saving settings“


  • Disable UI warning messages for hidden iframes, like Hotjar and so on


  • Rogue c


  • Spelling Marketing can be tricky 😉


  • Version number for automatic updating


  • Blocking object with the same rules as for iframe, to secure old style flash embeds, like for example old YouTube embeds
  • Support tab
  • Better support for // urls


  • Tested up to WordPress 5.5


  • Fix for „Only use CSP“ option. Don’t try to show UI error message.


  • WordPress 5.5 ready


  • Translations and spelling


  • By popular demand: Plugin is now deactivated on install. You can also activate the plugin only for administrators to test your settings without disturbing your visitors.


  • Since translations is only available in API through Polylang Pro, I rewrote the error messages for blocked iframes in oldschool js to make error messages appear translated in the free version of Polylang.


  • Admin css
  • Translations


  • Tested up to 5.4.1
  • Translations


  • Bug fix, allow scroll on html element when option „Allow user to access site without saving settings. Only works with banner.“ is checked.


  • IE11 support


  • Css for accepted type


  • Check for blank iframes


  • Uninstall for new values


  • Encode js mail link subject


  • Support for X-Content-Security-Policy
  • Better debug placement
  • Advanced settings
  • Visible warning for blocked iframes
  • Saving bug in mobile Safari fixed
  • More help texts
  • No texts must be edited, everything has default values


  • Versioning, SVN is not my friend


  • Added possibility to use the settings as a meta tag instead, if the host does not accept setting php header()


  • Translations


  • Coding standards


  • WP_DEBUG, clean


  • Added support for forms


  • Screenshot text, and active settings value


  • Assets


  • Assets and Contributors


  • Ready for the world!


  • List width


  • Minor fixes


  • Securing


  • Sanitize


  • Nonce


  • Uninstall


  • WPML config for Cookie policy page id


  • Admin referrer


  • Initial release