GithubHelp home page GithubHelp logo

cloudflare / cloudflare-wordpress Goto Github PK

View Code? Open in Web Editor NEW
208.0 31.0 84.0 15.65 MB

A Cloudflare plugin for WordPress

Home Page: https://www.cloudflare.com/wordpress/

License: BSD 3-Clause "New" or "Revised" License

PHP 75.67% JavaScript 18.28% CSS 5.41% Shell 0.65%

cloudflare-wordpress's Introduction

Cloudflare’s Plugin for WordPress

build status

Cloudflare’s WordPress plugin brings all of the benefits of Cloudflare into your WordPress dashboard for configuration, including a one-click application of default settings specifically optimized for WordPress.

By enabling Cloudflare on your WordPress website, you’ll find performance and security gains such as doubling your page load speeds, DDoS protection, web application firewall with WordPress-specific rulesets, free SSL, and SEO improvements.

Table of Contents

Description
Installation
Support
Features
FAQ
Contributions
Changelog

Description

The WordPress plugin for Cloudflare offers all of the benefits of Cloudflare, with a one-click installation of settings specifically developed for the WordPress platform. Cloudflare’s free plugin for WordPress accelerates page load speeds, improves SEO, and protects against DDoS attacks and WordPress-specific vulnerabilities.

Features

One-click WordPress-optimized settings

One-click application of WordPress-optimized settings is the easiest way to setup Cloudflare’s performance and security on your WordPress site. You can review the recommended settings that are applied, here: https://support.cloudflare.com/hc/en-us/articles/227342487

Web application firewall (WAF) rulesets

Cloudflare’s web application firewall (WAF), available on all of Cloudflare’s paid plans, has built-in rulesets specifically built to mitigate against WordPress threats and vulnerabilities. Cloudflare’s WAF provides confidence that your website is always protected, even against the latest threats and vulnerabilities targeting WordPress websites.

Automatic cache purge on website updates

Cloudflare’s plugin for WordPress automatically refreshes the Cloudflare cache upon making changes to your website appearance. This means that you can focus on your website, while we take care of ensuring that the freshest content is always available to your visitors.

Automatic individual URL cache purge on page/post/custom post type edits

Cloudflare’s plugin for WordPress automatically refreshes the Cloudflare cache of each post/page/custom post type when you update the content.

Additional Features

  • Header rewrites to prevent a redirect loop when Cloudflare’s Universal SSL is enabled.
  • Change Cloudflare settings from within the plugin without needing to navigate to the Cloudflare.com dashboard. You can change settings for cache purge, security level, Always Online™, and image optimization.
  • View analytics such as total visitors, bandwidth saved, and threats blocked.
  • Support for HTTP2/Server Push.

Installation

  1. To install the Cloudflare plugin into your WordPress admin panel, please visit: https://wordpress.org/plugins/cloudflare/ and click “Download” or download the plugin from this GitHub repo.
    • To install the plugin after downloading it via GitHub, navigate to Plugins → Add New → Upload Plugin and upload the Cloudflare-WordPress-master.zip file.
  2. Once you’ve installed the plugin, activate it through the WordPress plugin panel.
  3. If you're upgrading from the old plugin, and had previously inputted your API Key, you'll be automatically logged-in after updating the plugin.
  4. If this is the first time installing Cloudflare's WordPress plugin, please navigate to the plugin settings inside of your WordPress admin panel after activating, and input your Cloudflare username and API key; to find your API key, follow these instructions. If you do not already have a Cloudflare account, you’ll see the option to create one.
  5. After successfully logging into the plugin, click the “Apply Default Settings” button within the plugin’s dashboard. Clicking “Apply” will enable specific Cloudflare settings, optimized for the WordPress platform. These settings can be found here.
  6. Once this setting has been applied, that’s it! Your website is now on the Cloudflare network and optimized for the WordPress platform. You’ll also begin to see improved website load speeds, bandwidth savings, and protection against hackers, spammers, and bots.

FAQ

Do I need a Cloudflare account to use the plugin?

Yes, on install and activation the plugin, first time users will be asked to enter their email address (used to sign-up for an account at cloudflare.com) and their user API key. This is needed to support all the features offered by the plugin.

What settings are applied when I click "Apply Default Settings" in Cloudflare's WordPress plugin?

You can review the recommended settings that are applied, here: https://support.cloudflare.com/hc/en-us/articles/227342487

Does the plugin work if I have Varnish enabled?

Yes, Cloudflare works with, and helps speed up your site even more, if you have Varnish enabled.

Support

Visit Our Knowledge Base

Before submitting a support ticket, check out our knowledge base to see if your question has already been answered: https://support.cloudflare.com/hc/en-us/sections/200820268-Content-Management-System-CMS-

File a Support Ticket

For all support inquiries regarding Cloudflare’s WordPress plugin, please login to your Cloudflare account, file a support ticket, include any screenshots or details: https://support.cloudflare.com/hc/en-us/requests/new

Contributions

We welcome community contribution to this repository. CONTRIBUTING.md will help you start contributing. You can find active problems to work on in Issues page.

Changelog

See changelog

cloudflare-wordpress's People

Contributors

aseure avatar brandomeniconi avatar conorriches avatar deuill avatar ethanclevenger91 avatar garrettgalow avatar icyapril avatar inwerpsel avatar jacobbednarz avatar janvitos avatar jbampton avatar joeles avatar jwineman avatar macbookandrew avatar manatarms avatar markjaquith avatar mgirouard avatar patryk avatar piscis avatar pjeby avatar razvanstoica89 avatar rvola avatar sejoker avatar sh-sh-dev avatar softmanro avatar thellimist avatar tillkruss avatar xhmikosr avatar xtuc avatar zackproser avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

cloudflare-wordpress's Issues

Purging cache throws TypeError

Using v3.0.5, choosing Purge Everything throws the following TypeError:

18:39:12.961 TypeError: response is undefined[Learn More]compiled.js:84313:5
v4ResponseOkhttps://foo.bar/wp-content/plugins/cloudflare/compiled.js:84313:5[540]</asyncZonePurgeCacheEverything/</<https://foo.bar/wp-content/plugins/cloudflare/compiled.js:77225:18[150]</request/<https://foo.bar/wp-content/plugins/cloudflare/compiled.js:7020:7[157]</Request.prototype.callbackhttps://foo.bar/wp-content/plugins/cloudflare/compiled.js:8411:3[157]</Request/<https://foo.bar/wp-content/plugins/cloudflare/compiled.js:8134:5[161]</Emitter.prototype.emithttps://foo.bar/wp-content/plugins/cloudflare/compiled.js:9036:7[157]</Request.prototype.end/xhr.onreadystatechangehttps://foo.bar/wp-content/plugins/cloudflare/compiled.js:8493:5

Automatic cache purge doesn't work when switching a page from public => private

This plugin is usually awesome and works well for purging the CF cache when a post is updated. However it doesn't do it if you change the visibility of an existing page from public to private-- the cached public version stays around.

(I imagine this bug is because it thinks "oh, I don't need to purge the cache for this private post" without taking into consideration that it used to be public a moment ago)

Feature request: "Varnish HTTP Purge" type event handling

I began making my own plugin, but it looks like the official CF plugin is starting to pave ways for this...
https://github.com/mike503/cloudflare-full-page-caching/

Essentially setting up approriate triggers (WP action hooks) for the various types of activities. As can be used when page rules are enabled to cache the entire site (using CF like a distributed Varnish)

This is functional currently in my plugin for a couple things. But reusing your existing library and zone awareness would be much more beneficial. :) This is just a couple snippets to show how to compile a list of possible URLs to purge, and a list of the actions that should trigger one.

However, there is no "queue" mechanism so if two posts got published and triggered purges while the API is still not accepting another purge will fail silently, probably, instead of being a little more intelligent.

These are some of the actions I was able to find

// PER-PAGE EVENT PURGING
add_action('wp_scheduled_delete', '_cloudflare_full_page_caching_purge_urls');
add_action('transition_post_status', '_cloudflare_full_page_caching_purge_urls', 10, 3);
/* look at leveraging these - first param is the post ID on some of these
add_action('save_post', '_cloudflare_full_page_caching_purge_urls');
add_action('deleted_post', '_cloudflare_full_page_caching_purge_urls');
add_action('trashed_post', '_cloudflare_full_page_caching_purge_urls');
add_action('edit_post', '_cloudflare_full_page_caching_purge_urls');
add_action('delete_attachment', '_cloudflare_full_page_caching_purge_urls');
*/

This is the beginning of the function I was using, it seems to work properly.

function _cloudflare_full_page_caching_purge_urls($a, $b, $post) {
  if (!$zone_id = _cloudflare_full_page_caching_zone_id()) {
// could add message
    return FALSE;
  }
  // borrowed heavily from varnish-http-purge
  $urls = array();
  if ($categories = get_the_category($post->ID)) {
    foreach ($categories as $cat) {
      array_push($urls, get_category_link($cat->term_id));
    }
  }
  if ($tags = get_the_tags($post->ID)) {
    foreach ($tags as $tag) {
      array_push($urls, get_tag_link( $tag->term_id));
    }
  }
  array_push($urls,
    get_author_posts_url(get_post_field('post_author', $post->ID)),
    get_author_feed_link(get_post_field('post_author', $post->ID))
  );
  if (get_post_type_archive_link(get_post_type($post->ID)) == true) {
    array_push($urls,
      get_post_type_archive_link(get_post_type($post->ID)),
      get_post_type_archive_feed_link(get_post_type($post->ID))
    );
  }
  array_push($urls, get_permalink($post->ID));
  array_push($urls,
    get_bloginfo_rss('rdf_url') ,
    get_bloginfo_rss('rss_url') ,
    get_bloginfo_rss('rss2_url'),
    get_bloginfo_rss('atom_url'),
    get_bloginfo_rss('comments_rss2_url'),
    get_post_comments_feed_link($post->ID)
  );
  array_push($urls, home_url('/'));
  if (get_option('show_on_front') == 'page') {
    array_push($urls, get_permalink(get_option('page_for_posts')));
  }
  $result = _cloudflare_full_page_caching_request('DELETE', 'zones/' . $zone_id . '/purge_cache', array('files' => $urls));
  if (isset($result['success']) || intval($result['success']) == 1) {
    return TRUE;
  }
  return FALSE;
}

Blank screen

When I install this plugin, in config appears a blank screen for me.
Any tips ?

Use WP_HTTP instead of Guzzle to make API requests

Hi,
we have a lot of WP websites behind CF and running on Google AppEngine. GAE uses his own library (URLFetch) to make external HTTP calls and hasn't cURL available by default.

We have also few corporate WP installation that doesn't have direct access to internet and they must send requests through a proxy.

The AppEngine Plugin and the define('WP_PROXY_HOST', '0.0.0.0'); config rules allows WP to manage these situations, but because this plugin use Guzzle instead of the WP_HTTP class, it will not work out of the box in this environments and requires manual patches.

Could this plugin be updated to use the WP_HTTP Class to better follow the WP guidelines?

Thanks for the great work.

How can I see the plugin's debug logs?

I guess that if I were a PHP programmer I would have realized how-to. Looking at your code I see you put some logging, are they saved into a file? Tried setting WP_DEBUG on but couldn't see any log in debug.log. Is it because WP_DEBUG doesn't care about Psr logging? Is it because wordpress level is not debug but error?

Set a `Cache-Control: no-cache` header on all frontend pages for logged in users

Can the plugin set a Cache-Control: no-cache (or similar) header on all frontend pages for logged in users? Does the "Cache Everything" option in Cloudflare Page Rules ignores it?

There are some elements in WP that are shown only to logged in users or contain user info (Edit buttons, Comment forms, etc). Some popular Analytics plugins disable the tracking code for logged in users.

If this works, the plugin can also keep the admin bar visible, as requested in #112

Active Zone should not show as a dropdown w/ arrow if it's not actually dropdown.

Per issue 60 it was stated that the Active Zone "dropdown" should only show one site and this was intended behavior. This is extremely confusing UI.

I have 10+ domains in the CF account I'm connected to. I'd expect to either:
A) see them all w/ the active one highlighted
B) not see a drop down arrow suggesting I should see something more here...

I also don't see any way to change it, which is going to be a problem when someone migrates their site to a new domain.

Extension 'mcrypt' is deprecated since PHP 7.1

I ran a PHP Compatibility test and got the following results

`FILE: XXXXXXX/wp-content/plugins/cloudflare/vendor/cloudflare/cloudflare-plugin-backend/src/SecurityUtil.php

FOUND 0 ERRORS AND 2 WARNINGS AFFECTING 1 LINE

16 | WARNING | Extension 'mcrypt' is deprecated since PHP 7.1 - use openssl (preferred) or pecl/mcrypt once available instead.
16 | WARNING | Function mcrypt_create_iv() is deprecated since PHP 7.1; use OpenSSL instead
--------------------------------------------------------------------------------------------------------------------------------------------`

I found this to be a long standing issue that hasn't gotten a lot of attention:
https://wordpress.org/support/topic/extension-mcrypt-is-deprecated-since-php-7-1/

Is this in the roadmap to be resolved? I noticed it's been 11 months since an update was pushed through.. What is the status of this plugin?

Thanks for your time,
Derek

3.2.0-beta fails to select domain

Using WordPresss 4.7.2, after uninstalling 3.1.1, uploading 3.2.0, entering my credentials, I get please select a domain to provision and nothing happens.

Going back to 3.1.1 works normal.

I don't have any fancy page rules for that domain, just Full SSL (Strict), Auto Minify and Disable performance in https://foo.bar/wp-admin/*.

Console log:

JQMIGRATE: Migrate is installed, version 1.4.1  load-scripts.php:9:542
%c action @ 10:00:59.934 CONFIG_FETCH color: inherit;compiled.js:25
 prev state Object { activeZone: Object, app: Object, config: Object, intl: Object, user: Object, notifications: Array[0], routing: Object, zones: Object, zoneAnalytics: Object, zoneDnsRecords: Object, 4 more… }  compiled.js:25:7270
 action Object { type: "CONFIG_FETCH" }  compiled.js:25:7376
 next state Object { activeZone: Object, app: Object, config: Object, intl: Object, user: Object, notifications: Array[0], routing: Object, zones: Object, zoneAnalytics: Object, zoneDnsRecords: Object, 4 more… }  compiled.js:25:7570
%c action @ 10:01:00.133 CONFIG_FETCH_SUCCESS color: inherit;compiled.js:25
 prev state Object { activeZone: Object, app: Object, config: Object, intl: Object, user: Object, notifications: Array[0], routing: Object, zones: Object, zoneAnalytics: Object, zoneDnsRecords: Object, 4 more… }  compiled.js:25:7270
 action Object { type: "CONFIG_FETCH_SUCCESS", config: Object }  compiled.js:25:7376
 next state Object { activeZone: Object, app: Object, config: Object, intl: Object, user: Object, notifications: Array[0], routing: Object, zones: Object, zoneAnalytics: Object, zoneDnsRecords: Object, 4 more… }  compiled.js:25:7570
%c action @ 10:01:00.139 CONFIG_UPDATE_BY_KEY color: inherit;compiled.js:25
 prev state Object { activeZone: Object, app: Object, config: Object, intl: Object, user: Object, notifications: Array[0], routing: Object, zones: Object, zoneAnalytics: Object, zoneDnsRecords: Object, 4 more… }  compiled.js:25:7270
 action Object { type: "CONFIG_UPDATE_BY_KEY", key: "absoluteUrlBase", value: "https://foo.bar/wp-conte…" }  compiled.js:25:7376
 next state Object { activeZone: Object, app: Object, config: Object, intl: Object, user: Object, notifications: Array[0], routing: Object, zones: Object, zoneAnalytics: Object, zoneDnsRecords: Object, 4 more… }  compiled.js:25:7570
%c action @ 10:01:00.144 INTL_FETCH_TRANSLATIONS color: inherit;compiled.js:25
 prev state Object { activeZone: Object, app: Object, config: Object, intl: Object, user: Object, notifications: Array[0], routing: Object, zones: Object, zoneAnalytics: Object, zoneDnsRecords: Object, 4 more… }  compiled.js:25:7270
 action Object { type: "INTL_FETCH_TRANSLATIONS" }  compiled.js:25:7376
 next state Object { activeZone: Object, app: Object, config: Object, intl: Object, user: Object, notifications: Array[0], routing: Object, zones: Object, zoneAnalytics: Object, zoneDnsRecords: Object, 4 more… }  compiled.js:25:7570
%c action @ 10:01:00.151 USER_LOGIN_SUCCESS color: inherit;compiled.js:25
 prev state Object { activeZone: Object, app: Object, config: Object, intl: Object, user: Object, notifications: Array[0], routing: Object, zones: Object, zoneAnalytics: Object, zoneDnsRecords: Object, 4 more… }  compiled.js:25:7270
 action Object { type: "USER_LOGIN_SUCCESS", email: "[email protected]" }  compiled.js:25:7376
 next state Object { activeZone: Object, app: Object, config: Object, intl: Object, user: Object, notifications: Array[0], routing: Object, zones: Object, zoneAnalytics: Object, zoneDnsRecords: Object, 4 more… }  compiled.js:25:7570
%c action @ 10:01:00.155 ZONES_FETCH color: inherit;compiled.js:25
 prev state Object { activeZone: Object, app: Object, config: Object, intl: Object, user: Object, notifications: Array[0], routing: Object, zones: Object, zoneAnalytics: Object, zoneDnsRecords: Object, 4 more… }  compiled.js:25:7270
 action Object { type: "ZONES_FETCH" }  compiled.js:25:7376
 next state Object { activeZone: Object, app: Object, config: Object, intl: Object, user: Object, notifications: Array[0], routing: Object, zones: Object, zoneAnalytics: Object, zoneDnsRecords: Object, 4 more… }  compiled.js:25:7570
%c action @ 10:01:00.162 @@router/TRANSITION color: inherit;compiled.js:25
 prev state Object { activeZone: Object, app: Object, config: Object, intl: Object, user: Object, notifications: Array[0], routing: Object, zones: Object, zoneAnalytics: Object, zoneDnsRecords: Object, 4 more… }  compiled.js:25:7270
 action Object { type: "@@router/TRANSITION", payload: Object }  compiled.js:25:7376
 next state Object { activeZone: Object, app: Object, config: Object, intl: Object, user: Object, notifications: Array[0], routing: Object, zones: Object, zoneAnalytics: Object, zoneDnsRecords: Object, 4 more… }  compiled.js:25:7570
%c action @ 10:01:00.164 @@router/UPDATE_LOCATION color: inherit;compiled.js:25
 prev state Object { activeZone: Object, app: Object, config: Object, intl: Object, user: Object, notifications: Array[0], routing: Object, zones: Object, zoneAnalytics: Object, zoneDnsRecords: Object, 4 more… }  compiled.js:25:7270
 action Object { type: "@@router/UPDATE_LOCATION", payload: Object }  compiled.js:25:7376
 next state Object { activeZone: Object, app: Object, config: Object, intl: Object, user: Object, notifications: Array[0], routing: Object, zones: Object, zoneAnalytics: Object, zoneDnsRecords: Object, 4 more… }  compiled.js:25:7570
%c action @ 10:01:00.437 INTL_FETCH_TRANSLATIONS_SUCCESS color: inherit;compiled.js:25
 prev state Object { activeZone: Object, app: Object, config: Object, intl: Object, user: Object, notifications: Array[0], routing: Object, zones: Object, zoneAnalytics: Object, zoneDnsRecords: Object, 4 more… }  compiled.js:25:7270
 action Object { type: "INTL_FETCH_TRANSLATIONS_SUCCESS", locale: "en", translations: Object }  compiled.js:25:7376
 next state Object { activeZone: Object, app: Object, config: Object, intl: Object, user: Object, notifications: Array[0], routing: Object, zones: Object, zoneAnalytics: Object, zoneDnsRecords: Object, 4 more… }  compiled.js:25:7570
%c action @ 10:01:00.441 APPLICATION_INIT color: inherit;compiled.js:25
 prev state Object { activeZone: Object, app: Object, config: Object, intl: Object, user: Object, notifications: Array[0], routing: Object, zones: Object, zoneAnalytics: Object, zoneDnsRecords: Object, 4 more… }  compiled.js:25:7270
 action Object { type: "APPLICATION_INIT" }  compiled.js:25:7376
 next state Object { activeZone: Object, app: Object, config: Object, intl: Object, user: Object, notifications: Array[0], routing: Object, zones: Object, zoneAnalytics: Object, zoneDnsRecords: Object, 4 more… }  compiled.js:25:7570
%c action @ 10:01:02.671 ZONES_FETCH_SUCCESS color: inherit;compiled.js:25
 prev state Object { activeZone: Object, app: Object, config: Object, intl: Object, user: Object, notifications: Array[0], routing: Object, zones: Object, zoneAnalytics: Object, zoneDnsRecords: Object, 4 more… }  compiled.js:25:7270
 action Object { type: "ZONES_FETCH_SUCCESS", zoneList: Array[1] }  compiled.js:25:7376
 next state Object { activeZone: Object, app: Object, config: Object, intl: Object, user: Object, notifications: Array[0], routing: Object, zones: Object, zoneAnalytics: Object, zoneDnsRecords: Object, 4 more… }  compiled.js:25:7570
%c action @ 10:01:02.696 ZONE_SET_ACTIVE_ZONE color: inherit;compiled.js:25
 prev state Object { activeZone: Object, app: Object, config: Object, intl: Object, user: Object, notifications: Array[0], routing: Object, zones: Object, zoneAnalytics: Object, zoneDnsRecords: Object, 4 more… }  compiled.js:25:7270
 action Object { type: "ZONE_SET_ACTIVE_ZONE", zone: Object }  compiled.js:25:7376
 next state Object { activeZone: Object, app: Object, config: Object, intl: Object, user: Object, notifications: Array[0], routing: Object, zones: Object, zoneAnalytics: Object, zoneDnsRecords: Object, 4 more… }  compiled.js:25:7570

/CC @thellimist

"return" in cloudflare.loader.php stops the plugin from functioning properly

The "return true" in here stops the plugin from actually working properly - it won't display the CloudFlare settings menu or anything. The minute I uncomment the "return" line out, things function properly. Not sure why it's even in there.

$is_cf = $ipRewrite->isCloudFlare();
if ($is_cf) {
    // Fixes Flexible SSL
    if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') {
        $_SERVER['HTTPS'] = 'on'; 
        return true;
    }
}

Document minimum PHP version requirement

For example is PHP 5.4 supported? If not, that's OK but it should be documented.

Otherwise, personally, I'd like to remove short tags and <?=. I can make a PR if needed.

Multiple sites showing no controls on settings screen after update to v3.0.3

I've now seen this on several sites (across multiple CF accounts). After updating from V1 to V3 I go to the settings screen and it displays the Active Zone, the 3 blue nav buttons, but none of the control modules.

https://cloudup.com/ceTUmHLvOFT

This is from my personal blog. WP Engine hosted, PHP 5.6.32, Mac Chrome Version 50.0.2661.75.

It's worth noting I have seen the control on some sites, although when I do see the control them they don't work (CSRF Error per issue #82). Hence, I don't think it's a browser issue. Further I've cleared site cache / tried in incognito and with FireFox on the sites they don't show, they don't show in all those test cases.

API key invalid

The WP plugin reports Email address or API key invalid, for multiple sites and accounts and servers (to rule out all variables) - did something change with the API now that dash.cloudflare.com is in place?

I enabled debugging and see this.

[12-Jun-2018 17:38:18 UTC] [Cloudflare] ERROR: [CLIENT API] Array
(
    [type] => request
    [path] => https://api.cloudflare.com/client/v4/user/
    [timeout] => 30
    [method] => GET
    [headers] => Array
        (
            [X-Auth-Key] => GLOBAL API KEY
            [X-Auth-Email] => VALID EMAIL
            [Content-Type] => application/json
        )

)
 
[12-Jun-2018 17:38:18 UTC] [Cloudflare] ERROR: [CLIENT API] Array
(
    [type] => response
    [reason] => Forbidden
    [code] => 403
)
 
[12-Jun-2018 17:38:18 UTC] [Cloudflare] ERROR: Forbidden 
[12-Jun-2018 17:38:18 UTC] [Cloudflare] ERROR: Email address or API key invalid. 

add "Purge" button to admin bar

Related to #94 - this was in my code (and one of the main reasons I still keep my plugin running at the moment, I think your team has implemented most of what I had in mine) but it's very useful to have in the admin bar.

There was a comment that "we don't want to do this, you can do it if you want" - I was looking into leveraging the more robust/reliable caching purging you have in the official plugin, but it looks a little too purpose-built to simply reference inside of my own plugin. It is a lot more advanced than being able to hit a URL or even a simple JavaScript call.

Is there any way (or idea) to "deep link" directly to the purge full site option? Bonus points if it could draw up the bottom bar (on success or error) - but at the moment it looks pretty in-depth and not the simple solution I had hoped to implement.

Currently I am sending a "blind" request to:
DELETE https://api.cloudflare.com/client/v4/zones/ZONE_ID/purge_cache with the JSON params purge_everything = TRUE and the X-Auth-Key and X-Auth-Email headers. I attempt to catch an error response but it doesn't seem to be reliable.

It seems to purge as desired... but not always, and I was thinking that piggybacking on your method would be the more official and reliable way. However I'm finding it difficult to do that. Ideas?

html5shiv.min.js?ver=3.7.3 is server pushed when it shouldnt

If i activate server push via wp-config.php:
define('CLOUDFLARE_HTTP2_SERVER_PUSH_ACTIVE', true);

This file will be pushed and downloaded when it shouldnt:
<!--[if lt IE 9]><script type='text/javascript' src='https://www.site.com/wp-content/themes/genesis/lib/js/html5shiv.min.js?ver=3.7.3'></script><![endif]-->

Enable Http2 Push Server - issue with admin page only

Hi,

The context: Nginx + php7fpm + Cloudflare free plan

I enabled the Http2 Push Server feature:

  • For logged or not logged user, the front works correctly, the javascript and css files are well pushed.

  • When I access the administration pages error 502, I get a 502 error. In the nginx logs, I have "Can not Push Server (header size over 3072 Bytes)"

I tried to change the "fastcgi_buffer_size" and "fastcgi_buffer", and I modified the code of the cloudflare plugin to increase the limit "headersize":
if ($headerSize > 3072) { error_log('Cannot Server Push (header size over 3072 Bytes).'); return $src; }
to
if ($headerSize > 7168) { { error_log('Cannot Server Push (header size over 7168 Bytes).'); return $src; }
=> without success, header size were always too big (I do not understand why the headers are so big).
I looked for different solution by playing on the buffer, without success..

If I go back to my problem, the only pages that pose a problem are the administration pages, administration pages with push server enabled. I do not need to push server on these administration pages (and in general, I do not see any need).

If I disabled push server for administration pages:

    public static function initHooks()
    { 
		// Change: disable the push server if it is an admin page
		if (is_admin()) {
			return;
		};
	
        self::$initiated = true;

        add_action('wp_head', array('\CF\WordPress\HTTP2ServerPush', 'http2ResourceHints'), 99, 1);
        add_filter('script_loader_src', array('\CF\WordPress\HTTP2ServerPush', 'http2LinkPreloadHeader'), 99, 1);
        add_filter('style_loader_src', array('\CF\WordPress\HTTP2ServerPush', 'http2LinkPreloadHeader'), 99, 1);
    }

=> Everything is working fine, frontend is pushed, admin page without error and not pushed

Maybe there is a better solution? or can this solution be integrated without risk?

Can't solve Error: "CSRF Token not found. It's possible another plugin is altering requests sent by the Cloudflare plugin."

I've disabled all my plugins and still can't get this error, CSRF Token not found. It's possible another plugin is altering requests sent by the Cloudflare plugin, to resolve.

On version 4.9.4.

Here are what I have installed. Disabling each of these hasn't helped and the error persists:

Advanced Custom Fields
Tracking Code Manager
Bookify
Cloudflare
Faq Responsive
Intergeo - Google Maps Plugin - Lite
MailChimp for WordPress
Max Mega Menu
Ninja Forms
Tracking Code Manager

Server Push is not working with subdomains

Hello,

Server push is working only for the primary domain. When I activate cdn.example.com for serving static resources, below code doesn't push. Instead, it still relies on the main domain.

define('CLOUDFLARE_HTTP2_SERVER_PUSH_ACTIVE', true);

Is there any way update host name at HTTP header?

Thanks & Regards,
Gulshan

PHP message: PHP Warning: count(): Parameter must be an array or an object that implements Countable in /var/www/html/shop/wp-content/plugins/cloudflare/src/WordPress/Hooks.php on line 133"

Hi!

As the support page for this plugin on Wordpress doesn't seem maintained, I turned here instead.

I'm seeing this in my error logs:

PHP message: PHP Warning:  count(): Parameter must be an array or an object that implements Countable in /var/www/html/shop/wp-content/plugins/cloudflare/src/WordPress/Hooks.php on line 133"

Which isn't that pleasant as it seems to happen during checkout in my shop.

It's been 10 months since this plugin was updated, and I've seen many reports on the Wordpress support page which haven't been answered. Do you plan to solve this in the near future?

Thanks!

Site icons are not https

I have added a site icon through the customizer and it's still http

Everything else is working fine as https but the site icons are http so I am getting mixed content warnings.

Query Regarding Cloudflare Plugin

Hi,

I am using Cloudflare plugin on my WordPress blog (https://www.gulshankumar.net). This plugin is helpful in many ways. However, I am not completely satisfied with this plugin. I am little skeptical about using it.

I also found some bug, somehow I fixed it, but couldn't completely. So I would like to share in detail. I hope that my suggestion would be helpful for the improvement of this plugin.

Issue -1 Regarding HTTP Server Push

I am using Genesis Theme on my blog. It loads a small script for called html5shiv.js which is only supposed to be loaded for Internet Explorer only. But as I enable server push, it adds IE script in HTTP header. It results in one unwanted HTTP request. After digging a lot, I found that Server push is working mainly for the local domain, not for the external path. So firstly I dequeued the script and loaded it from the CDN path. It fixed the problem.

I want to say that, please bring two feature.

  1. Instead of suggesting adding some code in wp-config.php Please add a toggle button inside Dashboard. Once user do enable you could automatically add define('CLOUDFLARE_HTTP2_SERVER_PUSH_ACTIVE', true);
    image
  2. This plugin should provide an option for Server Push exclusion. I explained above why.
    image

Issue -2 Regarding Purge Cache

Cloudflare plugin is powerful. It shouldn't be treated just as an addon, or a workaround for something. I firmly believe that it can turn out as a great cache manager, and provide better performance when carefully used with Cache Everything rule (Like I do).

I recently noticed that at some situation, this plugin does not purge page cache automatically which results in an unsatisfactory experience. I believe that this plugin should automatically purge cache in below situation. I want to see more hooks which can meet to general requirements and provide better user-experience.

If we use Cache Everything rule, Cloudflare plugin must know to purge page level cache (except static files if cache validation exists) in all below situations.

  • When we update a widget
  • When we deactivate/activate a plugin
  • When we save any settings inside WordPress

Well, there are many situations, please see how WP Rocket plugin handle.

Or, alternatively, you could add a button in WP toolbar to purge all page cache of Cloudflare Edge. This would be also a great help.

Thanks & Regards,
Gulshan

Run purge actions when custom actions are executed

We would like a way to run purge actions e.g. purgeCacheEverything and purgeCacheByRevelantURLs when every a specific third party action is executed.

Our use case is that we have third party plugins that modify the post state and therefore make it nessesary to clear certain URLs in cloudflare.

GDPR text in Privacy Policy guide?

Hi there,

Firstly, thanks for providing so a great plugin to the WP community!

Secondly, I'd like to suggest that CloudFlare provides a simple (or as simple as possible) text explaining my obligations to my visitors, as they might be affected through my use of Cloudflare, rather than Cloudflare’s obligations to me (as outlined here).

Others have shown an interest in this as well and there's a thread in the WordPress support forum about the issue: https://wordpress.org/support/topic/gdpr-99/#post-10667752 – there is also a conversation about it on CloudFlare's community page: https://community.cloudflare.com/t/gdpr-and-cloudflare/18736.

I'd suggest to add such a text directly to the plugin so that it automatically appears in the Privacy Policy generator/guide found at ../wp-admin/tools.php?wp-privacy-policy-guide=1

Hope to see this improvement and many thanks!

Provide filter to hook into purgeCacheByRelevantURLs results

we would like a way to purge custom urls based on the postID provided to Wordpress\Hooks->purgeCacheByRevelantURLSs.

I wonder if you would accept a PR that basically filters the result of Hooks->getPostRelatedLinks($postId) and give us a chance to add some more URLs to the list of URLs the plugin should purge.

Example:

  return apply_filters('cf_get_post_related_links', $listofurls, $postId);

Minify compiled.js

Not sure how the file is generated, I couldn't find any info, but I tested it with uglifyjs --compress --mangle and it went from 2.89 MB to 1.06 MB which is a huge improvement.

The numbers are without gzip/br compression.

Install/Setup Instructions for Multisite installs

There are two kinds of WordPress multisite installs, domain mapped installs and sub-directory mapped installs.

While I understand that supporting domain mapped installs (either sub-domains or primary domains) is challenging, effort should be made to do that IMHO.

Until then. Supporting sub-directory mapped installs should be fairly easy and ought to both be properly supported by the plugin (ie. network aware activation) and outlined in the install instructions somewhere.

PHP7 compatibility updates

FILE: cloudflare/vendor/webmozart/assert/src/Assert.php
-------------------------------------------------------------------------------------------------------------------------------------
FOUND 10 ERRORS AFFECTING 10 LINES
-------------------------------------------------------------------------------------------------------------------------------------
 146 | ERROR | Function name, class name, namespace name or constant name can not be reserved keyword 'string' (since version 7.0)
 158 | ERROR | 'string' is a reserved keyword introduced in PHP version 7.0 and cannot be invoked as a function (T_STRING)
 182 | ERROR | Function name, class name, namespace name or constant name can not be reserved keyword 'float' (since version 7.0)
 192 | ERROR | Function name, class name, namespace name or constant name can not be reserved keyword 'numeric' (since version 7.0)
 222 | ERROR | Function name, class name, namespace name or constant name can not be reserved keyword 'object' (since version 7.0)
 232 | ERROR | Function name, class name, namespace name or constant name can not be reserved keyword 'resource' (since version 7.0)
 322 | ERROR | Function name, class name, namespace name or constant name can not be reserved keyword 'null' (since version 7.0)
 341 | ERROR | Function name, class name, namespace name or constant name can not be reserved keyword 'true' (since version 7.0)
 351 | ERROR | Function name, class name, namespace name or constant name can not be reserved keyword 'false' (since version 7.0)
 656 | ERROR | 'string' is a reserved keyword introduced in PHP version 7.0 and cannot be invoked as a function (T_STRING)
-------------------------------------------------------------------------------------------------------------------------------------


FILE: cloudflare/vendor/sebastian/global-state/src/Snapshot.php
-------------------------------------------------------------------------------------------------------------
FOUND 0 ERRORS AND 1 WARNING AFFECTING 1 LINE
-------------------------------------------------------------------------------------------------------------
 383 | WARNING | INI directive 'register_long_arrays' is deprecated from PHP 5.3 and forbidden from PHP 5.4.
-------------------------------------------------------------------------------------------------------------


FILE: cloudflare/vendor/phpdocumentor/reflection-docblock/examples/04-adding-your-own-tag.php
-------------------------------------------------------------------------------------------------------------------------------------------
FOUND 1 ERROR AFFECTING 1 LINE
-------------------------------------------------------------------------------------------------------------------------------------------
 91 | ERROR | 'string' is a reserved keyword introduced in PHP version 7.0 and cannot be invoked as a function (T_STRING)
-------------------------------------------------------------------------------------------------------------------------------------------


FILE: cloudflare/vendor/phpdocumentor/reflection-docblock/src/DocBlock.php
---------------------------------------------------------------------------------------------------------------------------
FOUND 3 ERRORS AFFECTING 3 LINES
---------------------------------------------------------------------------------------------------------------------------
  60 | ERROR | 'string' is a reserved keyword introduced in PHP version 7.0 and cannot be invoked as a function (T_STRING)
 172 | ERROR | 'string' is a reserved keyword introduced in PHP version 7.0 and cannot be invoked as a function (T_STRING)
 197 | ERROR | 'string' is a reserved keyword introduced in PHP version 7.0 and cannot be invoked as a function (T_STRING)
---------------------------------------------------------------------------------------------------------------------------


FILE: cloudflare/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/PropertyRead.php
------------------------------------------------------------------------------------------------------------------------------------------
FOUND 1 ERROR AFFECTING 1 LINE
------------------------------------------------------------------------------------------------------------------------------------------
 43 | ERROR | 'string' is a reserved keyword introduced in PHP version 7.0 and cannot be invoked as a function (T_STRING)
------------------------------------------------------------------------------------------------------------------------------------------


FILE: cloudflare/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Return_.php
-------------------------------------------------------------------------------------------------------------------------------------
FOUND 1 ERROR AFFECTING 1 LINE
-------------------------------------------------------------------------------------------------------------------------------------
 48 | ERROR | 'string' is a reserved keyword introduced in PHP version 7.0 and cannot be invoked as a function (T_STRING)
-------------------------------------------------------------------------------------------------------------------------------------


FILE: cloudflare/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Link.php
----------------------------------------------------------------------------------------------------------------------------------
FOUND 2 ERRORS AFFECTING 2 LINES
----------------------------------------------------------------------------------------------------------------------------------
 38 | ERROR | 'string' is a reserved keyword introduced in PHP version 7.0 and cannot be invoked as a function (T_STRING)
 49 | ERROR | 'string' is a reserved keyword introduced in PHP version 7.0 and cannot be invoked as a function (T_STRING)
----------------------------------------------------------------------------------------------------------------------------------


FILE: cloudflare/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/PropertyWrite.php
-------------------------------------------------------------------------------------------------------------------------------------------
FOUND 1 ERROR AFFECTING 1 LINE
-------------------------------------------------------------------------------------------------------------------------------------------
 43 | ERROR | 'string' is a reserved keyword introduced in PHP version 7.0 and cannot be invoked as a function (T_STRING)
-------------------------------------------------------------------------------------------------------------------------------------------


FILE: cloudflare/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Throws.php
------------------------------------------------------------------------------------------------------------------------------------
FOUND 1 ERROR AFFECTING 1 LINE
------------------------------------------------------------------------------------------------------------------------------------
 47 | ERROR | 'string' is a reserved keyword introduced in PHP version 7.0 and cannot be invoked as a function (T_STRING)
------------------------------------------------------------------------------------------------------------------------------------


FILE: cloudflare/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Uses.php
----------------------------------------------------------------------------------------------------------------------------------
FOUND 1 ERROR AFFECTING 1 LINE
----------------------------------------------------------------------------------------------------------------------------------
 53 | ERROR | 'string' is a reserved keyword introduced in PHP version 7.0 and cannot be invoked as a function (T_STRING)
----------------------------------------------------------------------------------------------------------------------------------


FILE: cloudflare/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Param.php
-----------------------------------------------------------------------------------------------------------------------------------
FOUND 1 ERROR AFFECTING 1 LINE
-----------------------------------------------------------------------------------------------------------------------------------
 47 | ERROR | 'string' is a reserved keyword introduced in PHP version 7.0 and cannot be invoked as a function (T_STRING)
-----------------------------------------------------------------------------------------------------------------------------------


FILE: cloudflare/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Generic.php
-------------------------------------------------------------------------------------------------------------------------------------
FOUND 1 ERROR AFFECTING 1 LINE
-------------------------------------------------------------------------------------------------------------------------------------
 56 | ERROR | 'string' is a reserved keyword introduced in PHP version 7.0 and cannot be invoked as a function (T_STRING)
-------------------------------------------------------------------------------------------------------------------------------------


FILE: cloudflare/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Property.php
--------------------------------------------------------------------------------------------------------------------------------------
FOUND 1 ERROR AFFECTING 1 LINE
--------------------------------------------------------------------------------------------------------------------------------------
 43 | ERROR | 'string' is a reserved keyword introduced in PHP version 7.0 and cannot be invoked as a function (T_STRING)
--------------------------------------------------------------------------------------------------------------------------------------


FILE: cloudflare/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Var_.php
----------------------------------------------------------------------------------------------------------------------------------
FOUND 1 ERROR AFFECTING 1 LINE
----------------------------------------------------------------------------------------------------------------------------------
 43 | ERROR | 'string' is a reserved keyword introduced in PHP version 7.0 and cannot be invoked as a function (T_STRING)
----------------------------------------------------------------------------------------------------------------------------------


FILE: cloudflare/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/See.php
---------------------------------------------------------------------------------------------------------------------------------
FOUND 1 ERROR AFFECTING 1 LINE
---------------------------------------------------------------------------------------------------------------------------------
 53 | ERROR | 'string' is a reserved keyword introduced in PHP version 7.0 and cannot be invoked as a function (T_STRING)
---------------------------------------------------------------------------------------------------------------------------------


FILE: cloudflare/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Author.php
------------------------------------------------------------------------------------------------------------------------------------
FOUND 3 ERRORS AFFECTING 3 LINES
------------------------------------------------------------------------------------------------------------------------------------
 39 | ERROR | 'string' is a reserved keyword introduced in PHP version 7.0 and cannot be invoked as a function (T_STRING)
 40 | ERROR | 'string' is a reserved keyword introduced in PHP version 7.0 and cannot be invoked as a function (T_STRING)
 88 | ERROR | 'string' is a reserved keyword introduced in PHP version 7.0 and cannot be invoked as a function (T_STRING)
------------------------------------------------------------------------------------------------------------------------------------


FILE: cloudflare/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Covers.php
------------------------------------------------------------------------------------------------------------------------------------
FOUND 1 ERROR AFFECTING 1 LINE
------------------------------------------------------------------------------------------------------------------------------------
 54 | ERROR | 'string' is a reserved keyword introduced in PHP version 7.0 and cannot be invoked as a function (T_STRING)
------------------------------------------------------------------------------------------------------------------------------------


FILE: cloudflare/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Description.php
------------------------------------------------------------------------------------------------------------------------------------
FOUND 1 ERROR AFFECTING 1 LINE
------------------------------------------------------------------------------------------------------------------------------------
 67 | ERROR | 'string' is a reserved keyword introduced in PHP version 7.0 and cannot be invoked as a function (T_STRING)
------------------------------------------------------------------------------------------------------------------------------------


FILE: cloudflare/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Serializer.php
-----------------------------------------------------------------------------------------------------------------------------------
FOUND 1 ERROR AFFECTING 1 LINE
-----------------------------------------------------------------------------------------------------------------------------------
 46 | ERROR | 'string' is a reserved keyword introduced in PHP version 7.0 and cannot be invoked as a function (T_STRING)
-----------------------------------------------------------------------------------------------------------------------------------


FILE: cloudflare/vendor/phpdocumentor/type-resolver/src/Types/Mixed.php
---------------------------------------------------------------------------------------------------------------------------------
FOUND 1 ERROR AFFECTING 1 LINE
---------------------------------------------------------------------------------------------------------------------------------
 20 | ERROR | Function name, class name, namespace name or constant name can not be reserved keyword 'Mixed' (since version 7.0)
---------------------------------------------------------------------------------------------------------------------------------


FILE: cloudflare/vendor/phpdocumentor/type-resolver/src/Types/Resource.php
------------------------------------------------------------------------------------------------------------------------------------
FOUND 1 ERROR AFFECTING 1 LINE
------------------------------------------------------------------------------------------------------------------------------------
 20 | ERROR | Function name, class name, namespace name or constant name can not be reserved keyword 'Resource' (since version 7.0)
------------------------------------------------------------------------------------------------------------------------------------


FILE: cloudflare/vendor/phpdocumentor/type-resolver/src/Types/Array_.php
-------------------------------------------------------------------------------------------------------------------------
FOUND 1 ERROR AFFECTING 1 LINE
-------------------------------------------------------------------------------------------------------------------------
 47 | ERROR | 'mixed' is a reserved keyword introduced in PHP version 7.0 and cannot be invoked as a function (T_STRING)
-------------------------------------------------------------------------------------------------------------------------

new version?

Hi we've noticed that this:

44e430c

Is not released yet.

When do you think this will land in the the wordpress plugin repository?

Thanks,

Alex

Synchronize nomenclature with CloudFlare dashboard

It's confusing to call have a section called "Image Optimization" under Speed. This is different nomenclature than used in the CloudFlare Dashboard which used Polish and Mirage. Is this feature on of those, or both at the same time?

v3.0.3 (and prior versions)

v3.0.0 issues

Hi, guys.

So, it seems v3.0.0 is severely broken for all my sites.

  1. There are numerous useless console messages coming from React
  2. After entering my account email and API key I get the following and the dropdown doesn't work due to the TypeError
12:20:07.350 "Download the React DevTools for a better development experience: https://fb.me/react-devtools"compiled.js:61853:9
12:20:07.388 %c action @ 12:20:07.388 CONFIG_FETCH  color: #000000;compiled.js:75323
12:20:07.389  prev state Object { activeZone: Object, app: Object, config: Object, intl: Object, user: Object, notifications: Array[0], routing: Object, zones: Object, zoneAnalytics: Object, zoneDnsRecords: Object, 4 more… }compiled.js:75337:31
12:20:07.394  action Object { type: "CONFIG_FETCH" }compiled.js:75341:28
12:20:07.396  next state Object { activeZone: Object, app: Object, config: Object, intl: Object, user: Object, notifications: Array[0], routing: Object, zones: Object, zoneAnalytics: Object, zoneDnsRecords: Object, 4 more… }compiled.js:75349:31
12:20:08.116 %c action @ 12:20:08.115 CONFIG_FETCH_SUCCESS  color: #000000;compiled.js:75323
12:20:08.117  prev state Object { activeZone: Object, app: Object, config: Object, intl: Object, user: Object, notifications: Array[0], routing: Object, zones: Object, zoneAnalytics: Object, zoneDnsRecords: Object, 4 more… }compiled.js:75337:31
12:20:08.118  action Object { type: "CONFIG_FETCH_SUCCESS", config: Object }compiled.js:75341:28
12:20:08.119  next state Object { activeZone: Object, app: Object, config: Object, intl: Object, user: Object, notifications: Array[0], routing: Object, zones: Object, zoneAnalytics: Object, zoneDnsRecords: Object, 4 more… }compiled.js:75349:31
12:20:08.122 %c action @ 12:20:08.121 CONFIG_UPDATE_BY_KEY  color: #000000;compiled.js:75323
12:20:08.123  prev state Object { activeZone: Object, app: Object, config: Object, intl: Object, user: Object, notifications: Array[0], routing: Object, zones: Object, zoneAnalytics: Object, zoneDnsRecords: Object, 4 more… }compiled.js:75337:31
12:20:08.125  action Object { type: "CONFIG_UPDATE_BY_KEY", key: "absoluteUrlBase", value: "https://domain.tld/wp-content/plugins/c…" }compiled.js:75341:28
12:20:08.125  next state Object { activeZone: Object, app: Object, config: Object, intl: Object, user: Object, notifications: Array[0], routing: Object, zones: Object, zoneAnalytics: Object, zoneDnsRecords: Object, 4 more… }compiled.js:75349:31
12:20:08.128 %c action @ 12:20:08.127 INTL_FETCH_TRANSLATIONS  color: #000000;compiled.js:75323
12:20:08.129  prev state Object { activeZone: Object, app: Object, config: Object, intl: Object, user: Object, notifications: Array[0], routing: Object, zones: Object, zoneAnalytics: Object, zoneDnsRecords: Object, 4 more… }compiled.js:75337:31
12:20:08.131  action Object { type: "INTL_FETCH_TRANSLATIONS" }compiled.js:75341:28
12:20:08.131  next state Object { activeZone: Object, app: Object, config: Object, intl: Object, user: Object, notifications: Array[0], routing: Object, zones: Object, zoneAnalytics: Object, zoneDnsRecords: Object, 4 more… }compiled.js:75349:31
12:20:08.970 %c action @ 12:20:08.969 INTL_FETCH_TRANSLATIONS_SUCCESS  color: #000000;compiled.js:75323
12:20:08.971  prev state Object { activeZone: Object, app: Object, config: Object, intl: Object, user: Object, notifications: Array[0], routing: Object, zones: Object, zoneAnalytics: Object, zoneDnsRecords: Object, 4 more… }compiled.js:75337:31
12:20:08.975  action Object { type: "INTL_FETCH_TRANSLATIONS_SUCCESS", locale: "en", translations: Object }compiled.js:75341:28
12:20:08.977  next state Object { activeZone: Object, app: Object, config: Object, intl: Object, user: Object, notifications: Array[0], routing: Object, zones: Object, zoneAnalytics: Object, zoneDnsRecords: Object, 4 more… }compiled.js:75349:31
12:20:09.046 %c action @ 12:20:08.980 APPLICATION_INIT  color: #000000;compiled.js:75323
12:20:09.048  prev state Object { activeZone: Object, app: Object, config: Object, intl: Object, user: Object, notifications: Array[0], routing: Object, zones: Object, zoneAnalytics: Object, zoneDnsRecords: Object, 4 more… }compiled.js:75337:31
12:20:09.050  action Object { type: "APPLICATION_INIT" }compiled.js:75341:28
12:20:09.051  next state Object { activeZone: Object, app: Object, config: Object, intl: Object, user: Object, notifications: Array[0], routing: Object, zones: Object, zoneAnalytics: Object, zoneDnsRecords: Object, 4 more… }compiled.js:75349:31
12:20:42.273 %c action @ 12:20:42.272 USER_LOGIN  color: #000000;compiled.js:75323
12:20:42.274  prev state Object { activeZone: Object, app: Object, config: Object, intl: Object, user: Object, notifications: Array[0], routing: Object, zones: Object, zoneAnalytics: Object, zoneDnsRecords: Object, 4 more… }compiled.js:75337:31
12:20:42.278  action Object { type: "USER_LOGIN" }compiled.js:75341:28
12:20:42.280  next state Object { activeZone: Object, app: Object, config: Object, intl: Object, user: Object, notifications: Array[0], routing: Object, zones: Object, zoneAnalytics: Object, zoneDnsRecords: Object, 4 more… }compiled.js:75349:31
12:20:44.204 %c action @ 12:20:44.172 USER_LOGIN_SUCCESS  color: #000000;compiled.js:75323
12:20:44.207  prev state Object { activeZone: Object, app: Object, config: Object, intl: Object, user: Object, notifications: Array[0], routing: Object, zones: Object, zoneAnalytics: Object, zoneDnsRecords: Object, 4 more… }compiled.js:75337:31
12:20:44.208  action Object { type: "USER_LOGIN_SUCCESS", email: "[email protected]" }compiled.js:75341:28
12:20:44.209  next state Object { activeZone: Object, app: Object, config: Object, intl: Object, user: Object, notifications: Array[0], routing: Object, zones: Object, zoneAnalytics: Object, zoneDnsRecords: Object, 4 more… }compiled.js:75349:31
12:20:44.226 %c action @ 12:20:44.211 ZONES_FETCH  color: #000000;compiled.js:75323
12:20:44.227  prev state Object { activeZone: Object, app: Object, config: Object, intl: Object, user: Object, notifications: Array[0], routing: Object, zones: Object, zoneAnalytics: Object, zoneDnsRecords: Object, 4 more… }compiled.js:75337:31
12:20:44.229  action Object { type: "ZONES_FETCH" }compiled.js:75341:28
12:20:44.230  next state Object { activeZone: Object, app: Object, config: Object, intl: Object, user: Object, notifications: Array[0], routing: Object, zones: Object, zoneAnalytics: Object, zoneDnsRecords: Object, 4 more… }compiled.js:75349:31
12:20:44.255 %c action @ 12:20:44.235 @@router/TRANSITION  color: #000000;compiled.js:75323
12:20:44.255  prev state Object { activeZone: Object, app: Object, config: Object, intl: Object, user: Object, notifications: Array[0], routing: Object, zones: Object, zoneAnalytics: Object, zoneDnsRecords: Object, 4 more… }compiled.js:75337:31
12:20:44.258  action Object { type: "@@router/TRANSITION", payload: Object }compiled.js:75341:28
12:20:44.259  next state Object { activeZone: Object, app: Object, config: Object, intl: Object, user: Object, notifications: Array[0], routing: Object, zones: Object, zoneAnalytics: Object, zoneDnsRecords: Object, 4 more… }compiled.js:75349:31
12:20:44.261 %c action @ 12:20:44.238 @@router/UPDATE_LOCATION  color: #000000;compiled.js:75323
12:20:44.261  prev state Object { activeZone: Object, app: Object, config: Object, intl: Object, user: Object, notifications: Array[0], routing: Object, zones: Object, zoneAnalytics: Object, zoneDnsRecords: Object, 4 more… }compiled.js:75337:31
12:20:44.263  action Object { type: "@@router/UPDATE_LOCATION", payload: Object }compiled.js:75341:28
12:20:44.264  next state Object { activeZone: Object, app: Object, config: Object, intl: Object, user: Object, notifications: Array[0], routing: Object, zones: Object, zoneAnalytics: Object, zoneDnsRecords: Object, 4 more… }compiled.js:75349:31
12:20:44.876 Blocked loading mixed active content “http://domain.tld/”[Learn More]options-general.php
12:20:44.888 TypeError: response is undefined
[Learn More]compiled.js:84318:5

I'm using Firefox 49 64-bit on Windows 10. WordPress 4.6.1 with PHP 7.0.10. I haven't tried another browser but it happens for all my sites.

Note that in version 1.3.x of the plugin I had development mode and HTTPS protocol rewriting set to off.

Test failure: "Use of undefined constant CLOUDFLARE_MIN_WP_VERSION"

So, I'm getting this on my dev VM

C:\Users\xmr\Desktop\Cloudflare-WordPress>composer --version
Composer version 1.2.2 2016-11-03 17:43:15

C:\Users\xmr\Desktop\Cloudflare-WordPress>php --version
PHP 7.0.13 (cli) (built: Nov  8 2016 13:45:28) ( ZTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies

C:\Users\xmr\Desktop\Cloudflare-WordPress>composer test
> php vendor/phpunit/phpunit/phpunit
PHPUnit 4.8.27 by Sebastian Bergmann and contributors.

..................E........................

Time: 578 ms, Memory: 6.00MB

There was 1 error:

1) CF\Test\WordPress\HooksTest::testActivateChecksWPVersionAndCurl
Use of undefined constant CLOUDFLARE_MIN_WP_VERSION - assumed 'CLOUDFLARE_MIN_WP_VERSION'

C:\Users\xmr\Desktop\Cloudflare-WordPress\src\WordPress\Hooks.php:106
C:\Users\xmr\Desktop\Cloudflare-WordPress\src\Test\WordPress\HooksTest.php:87

FAILURES!
Tests: 43, Assertions: 115, Errors: 1.
Script php vendor/phpunit/phpunit/phpunit handling the test event returned with error code 2

Cannot apply any settings Csrf token fail

I read on your other post about the IWP but I don't have that installed, yet I'm still dealing with this issues I understand it could be a number of under plugins but I'm not really sure which is could be.

Help

What does "One-click WordPress-optimized settings" mean?

I have to say that you guys are lately ranking near the top of my list of poor communicators.

I know that the majority of WordPress installs out there on the interwebs are on cheap, shared hosting and managed by bloggers who don't know what PHP is, much less which version they are running. And a hide-the-details, "don't worry - it just works" attitude might be best for them.

But there are more than a few of us out here who are running WordPress behind CloudFlare that have carefully tuned, non-standard WP stacks to maximize performance and reliability for whom pressing a button in a plugin whose only documentation is "The easiest way to setup CloudFlare for your WordPress site" is an absolute non-starter.

Is it really too much to ask that you guys document what actually happens when someone presses that button? Do I really have to read through the source code of the plugin in order to have any idea at all what it does?

I know that CloudFlare has someone on staff that is capable of producing good documentation. Can you borrow them from the API team for a couple days to let us know what the plugin is doing?

Cloudflare PHP 7.2 Compatibility test

FILE: /site_path/wp-content/plugins/cloudflare/vendor/symfony/yaml/Inline.php
--------------------------------------------------------------------------------------------------------
FOUND 0 ERRORS AND 1 WARNING AFFECTING 1 LINE
--------------------------------------------------------------------------------------------------------
 55 | WARNING | INI directive 'mbstring.func_overload' is deprecated since PHP 7.2
--------------------------------------------------------------------------------------------------------


FILE: /site_path/wp-content/plugins/cloudflare/vendor/symfony/yaml/Parser.php
--------------------------------------------------------------------------------------------------------
FOUND 0 ERRORS AND 1 WARNING AFFECTING 1 LINE
--------------------------------------------------------------------------------------------------------
 76 | WARNING | INI directive 'mbstring.func_overload' is deprecated since PHP 7.2
--------------------------------------------------------------------------------------------------------


FILE: /site_path/wp-content/plugins/cloudflare/vendor/cloudflare/cloudflare-plugin-backend/src/SecurityUtil.php
------------------------------------------------------------------------------------------------------------------------------------------------------
FOUND 2 ERRORS AFFECTING 1 LINE
------------------------------------------------------------------------------------------------------------------------------------------------------
 16 | ERROR | Extension 'mcrypt' is deprecated since PHP 7.1 and removed since PHP 7.2; Use openssl (preferred) or pecl/mcrypt once available instead
 16 | ERROR | Function mcrypt_create_iv() is deprecated since PHP 7.1 and removed since PHP 7.2; Use random_bytes() or OpenSSL instead
------------------------------------------------------------------------------------------------------------------------------------------------------

Related:
#228
https://wordpress.org/support/topic/cloudflare-php-7-2-compatibility-test/
https://wordpress.org/support/topic/extension-mcrypt-is-deprecated-since-php-7-1/

Cloudflare 3.3.2
PHP Compatibility Checker 1.4.7

Attempting to change settings fails with "CSRF Token not valid" error message

Any attempt to change settings in the new interface fails with a "CSRF Token not valid" error shown across the bottom of the window. I tried Purge, Full Cache Management, WAF and Image Optimization none of it works.

Site was connected fine with CF plugin v 1.3.35, upgraded directly to v3.0.3, I've since reverted.

FYI, the new interface reports the active zone correctly, but I don't see anywhere to reset/reconnect the API key and set the account.

Delay until the panel options are shown

Console log

18:36:42.365 JQMIGRATE: Migrate is installed, version 1.4.1load-scripts.php:9:542
18:36:42.690 "Download the React DevTools for a better development experience: https://fb.me/react-devtools"compiled.js:61853:9
18:36:42.737 %c action @ 18:36:42.737 CONFIG_FETCH  color: #000000;compiled.js:75323
18:36:42.738  prev state Object { activeZone: Object, app: Object, config: Object, intl: Object, user: Object, notifications: Array[0], routing: Object, zones: Object, zoneAnalytics: Object, zoneDnsRecords: Object, 4 more… }compiled.js:75337:31
18:36:42.741  action Object { type: "CONFIG_FETCH" }compiled.js:75341:28
18:36:42.743  next state Object { activeZone: Object, app: Object, config: Object, intl: Object, user: Object, notifications: Array[0], routing: Object, zones: Object, zoneAnalytics: Object, zoneDnsRecords: Object, 4 more… }compiled.js:75349:31
18:36:42.909 %c action @ 18:36:42.908 CONFIG_FETCH_SUCCESS  color: #000000;compiled.js:75323
18:36:42.909  prev state Object { activeZone: Object, app: Object, config: Object, intl: Object, user: Object, notifications: Array[0], routing: Object, zones: Object, zoneAnalytics: Object, zoneDnsRecords: Object, 4 more… }compiled.js:75337:31
18:36:42.911  action Object { type: "CONFIG_FETCH_SUCCESS", config: Object }compiled.js:75341:28
18:36:42.912  next state Object { activeZone: Object, app: Object, config: Object, intl: Object, user: Object, notifications: Array[0], routing: Object, zones: Object, zoneAnalytics: Object, zoneDnsRecords: Object, 4 more… }compiled.js:75349:31
18:36:42.916 %c action @ 18:36:42.915 CONFIG_UPDATE_BY_KEY  color: #000000;compiled.js:75323
18:36:42.916  prev state Object { activeZone: Object, app: Object, config: Object, intl: Object, user: Object, notifications: Array[0], routing: Object, zones: Object, zoneAnalytics: Object, zoneDnsRecords: Object, 4 more… }compiled.js:75337:31
18:36:42.918  action Object { type: "CONFIG_UPDATE_BY_KEY", key: "absoluteUrlBase", value: "https://foo.bar/wp-content/plugins/c…" }compiled.js:75341:28
18:36:42.918  next state Object { activeZone: Object, app: Object, config: Object, intl: Object, user: Object, notifications: Array[0], routing: Object, zones: Object, zoneAnalytics: Object, zoneDnsRecords: Object, 4 more… }compiled.js:75349:31
18:36:42.921 %c action @ 18:36:42.920 INTL_FETCH_TRANSLATIONS  color: #000000;compiled.js:75323
18:36:42.921  prev state Object { activeZone: Object, app: Object, config: Object, intl: Object, user: Object, notifications: Array[0], routing: Object, zones: Object, zoneAnalytics: Object, zoneDnsRecords: Object, 4 more… }compiled.js:75337:31
18:36:42.923  action Object { type: "INTL_FETCH_TRANSLATIONS" }compiled.js:75341:28
18:36:42.923  next state Object { activeZone: Object, app: Object, config: Object, intl: Object, user: Object, notifications: Array[0], routing: Object, zones: Object, zoneAnalytics: Object, zoneDnsRecords: Object, 4 more… }compiled.js:75349:31
18:36:42.930 %c action @ 18:36:42.929 USER_LOGIN_SUCCESS  color: #000000;compiled.js:75323
18:36:42.930  prev state Object { activeZone: Object, app: Object, config: Object, intl: Object, user: Object, notifications: Array[0], routing: Object, zones: Object, zoneAnalytics: Object, zoneDnsRecords: Object, 4 more… }compiled.js:75337:31
18:36:42.932  action Object { type: "USER_LOGIN_SUCCESS", email: "[email protected]" }compiled.js:75341:28
18:36:42.932  next state Object { activeZone: Object, app: Object, config: Object, intl: Object, user: Object, notifications: Array[0], routing: Object, zones: Object, zoneAnalytics: Object, zoneDnsRecords: Object, 4 more… }compiled.js:75349:31
18:36:42.935 %c action @ 18:36:42.934 ZONES_FETCH  color: #000000;compiled.js:75323
18:36:42.935  prev state Object { activeZone: Object, app: Object, config: Object, intl: Object, user: Object, notifications: Array[0], routing: Object, zones: Object, zoneAnalytics: Object, zoneDnsRecords: Object, 4 more… }compiled.js:75337:31
18:36:42.936  action Object { type: "ZONES_FETCH" }compiled.js:75341:28
18:36:42.937  next state Object { activeZone: Object, app: Object, config: Object, intl: Object, user: Object, notifications: Array[0], routing: Object, zones: Object, zoneAnalytics: Object, zoneDnsRecords: Object, 4 more… }compiled.js:75349:31
18:36:42.946 %c action @ 18:36:42.941 @@router/TRANSITION  color: #000000;compiled.js:75323
18:36:42.946  prev state Object { activeZone: Object, app: Object, config: Object, intl: Object, user: Object, notifications: Array[0], routing: Object, zones: Object, zoneAnalytics: Object, zoneDnsRecords: Object, 4 more… }compiled.js:75337:31
18:36:42.947  action Object { type: "@@router/TRANSITION", payload: Object }compiled.js:75341:28
18:36:42.948  next state Object { activeZone: Object, app: Object, config: Object, intl: Object, user: Object, notifications: Array[0], routing: Object, zones: Object, zoneAnalytics: Object, zoneDnsRecords: Object, 4 more… }compiled.js:75349:31
18:36:42.949 %c action @ 18:36:42.944 @@router/UPDATE_LOCATION  color: #000000;compiled.js:75323
18:36:42.950  prev state Object { activeZone: Object, app: Object, config: Object, intl: Object, user: Object, notifications: Array[0], routing: Object, zones: Object, zoneAnalytics: Object, zoneDnsRecords: Object, 4 more… }compiled.js:75337:31
18:36:42.951  action Object { type: "@@router/UPDATE_LOCATION", payload: Object }compiled.js:75341:28
18:36:42.952  next state Object { activeZone: Object, app: Object, config: Object, intl: Object, user: Object, notifications: Array[0], routing: Object, zones: Object, zoneAnalytics: Object, zoneDnsRecords: Object, 4 more… }compiled.js:75349:31
18:36:42.998 %c action @ 18:36:42.997 INTL_FETCH_TRANSLATIONS_SUCCESS  color: #000000;compiled.js:75323
18:36:42.998  prev state Object { activeZone: Object, app: Object, config: Object, intl: Object, user: Object, notifications: Array[0], routing: Object, zones: Object, zoneAnalytics: Object, zoneDnsRecords: Object, 4 more… }compiled.js:75337:31
18:36:43.000  action Object { type: "INTL_FETCH_TRANSLATIONS_SUCCESS", locale: "en", translations: Object }compiled.js:75341:28
18:36:43.001  next state Object { activeZone: Object, app: Object, config: Object, intl: Object, user: Object, notifications: Array[0], routing: Object, zones: Object, zoneAnalytics: Object, zoneDnsRecords: Object, 4 more… }compiled.js:75349:31
18:36:43.050 %c action @ 18:36:43.003 APPLICATION_INIT  color: #000000;compiled.js:75323
18:36:43.051  prev state Object { activeZone: Object, app: Object, config: Object, intl: Object, user: Object, notifications: Array[0], routing: Object, zones: Object, zoneAnalytics: Object, zoneDnsRecords: Object, 4 more… }compiled.js:75337:31
18:36:43.052  action Object { type: "APPLICATION_INIT" }compiled.js:75341:28
18:36:43.053  next state Object { activeZone: Object, app: Object, config: Object, intl: Object, user: Object, notifications: Array[0], routing: Object, zones: Object, zoneAnalytics: Object, zoneDnsRecords: Object, 4 more… }compiled.js:75349:31
18:36:45.990 %c action @ 18:36:45.951 ZONES_FETCH_SUCCESS  color: #000000;compiled.js:75323
18:36:45.991  prev state Object { activeZone: Object, app: Object, config: Object, intl: Object, user: Object, notifications: Array[0], routing: Object, zones: Object, zoneAnalytics: Object, zoneDnsRecords: Object, 4 more… }compiled.js:75337:31
18:36:45.995  action Object { type: "ZONES_FETCH_SUCCESS", zoneList: Array[1] }compiled.js:75341:28
18:36:45.997  next state Object { activeZone: Object, app: Object, config: Object, intl: Object, user: Object, notifications: Array[0], routing: Object, zones: Object, zoneAnalytics: Object, zoneDnsRecords: Object, 4 more… }compiled.js:75349:31
18:36:46.020 %c action @ 18:36:45.999 ZONE_SET_ACTIVE_ZONE  color: #000000;compiled.js:75323
18:36:46.021  prev state Object { activeZone: Object, app: Object, config: Object, intl: Object, user: Object, notifications: Array[0], routing: Object, zones: Object, zoneAnalytics: Object, zoneDnsRecords: Object, 4 more… }compiled.js:75337:31
18:36:46.023  action Object { type: "ZONE_SET_ACTIVE_ZONE", zone: Object }compiled.js:75341:28
18:36:46.024  next state Object { activeZone: Object, app: Object, config: Object, intl: Object, user: Object, notifications: Array[0], routing: Object, zones: Object, zoneAnalytics: Object, zoneDnsRecords: Object, 4 more… }compiled.js:75349:31
18:36:46.042 %c action @ 18:36:46.026 DNS_RECORD_FETCH_LIST  color: #000000;compiled.js:75323
18:36:46.043  prev state Object { activeZone: Object, app: Object, config: Object, intl: Object, user: Object, notifications: Array[0], routing: Object, zones: Object, zoneAnalytics: Object, zoneDnsRecords: Object, 4 more… }compiled.js:75337:31
18:36:46.045  action Object { type: "DNS_RECORD_FETCH_LIST" }compiled.js:75341:28
18:36:46.045  next state Object { activeZone: Object, app: Object, config: Object, intl: Object, user: Object, notifications: Array[0], routing: Object, zones: Object, zoneAnalytics: Object, zoneDnsRecords: Object, 4 more… }compiled.js:75349:31
18:36:46.064 %c action @ 18:36:46.052 ZONES_RAILGUNS_FETCH_ALL  color: #000000;compiled.js:75323
18:36:46.065  prev state Object { activeZone: Object, app: Object, config: Object, intl: Object, user: Object, notifications: Array[0], routing: Object, zones: Object, zoneAnalytics: Object, zoneDnsRecords: Object, 4 more… }compiled.js:75337:31
18:36:46.067  action Object { type: "ZONES_RAILGUNS_FETCH_ALL" }compiled.js:75341:28
18:36:46.068  next state Object { activeZone: Object, app: Object, config: Object, intl: Object, user: Object, notifications: Array[0], routing: Object, zones: Object, zoneAnalytics: Object, zoneDnsRecords: Object, 4 more… }compiled.js:75349:31
18:36:46.082 %c action @ 18:36:46.072 PLUGIN_SETTINGS_FETCH  color: #000000;compiled.js:75323
18:36:46.082  prev state Object { activeZone: Object, app: Object, config: Object, intl: Object, user: Object, notifications: Array[0], routing: Object, zones: Object, zoneAnalytics: Object, zoneDnsRecords: Object, 4 more… }compiled.js:75337:31
18:36:46.084  action Object { type: "PLUGIN_SETTINGS_FETCH" }compiled.js:75341:28
18:36:46.085  next state Object { activeZone: Object, app: Object, config: Object, intl: Object, user: Object, notifications: Array[0], routing: Object, zones: Object, zoneAnalytics: Object, zoneDnsRecords: Object, 4 more… }compiled.js:75349:31
18:36:46.098 %c action @ 18:36:46.089 ZONE_FETCH_SETTINGS  color: #000000;compiled.js:75323
18:36:46.099  prev state Object { activeZone: Object, app: Object, config: Object, intl: Object, user: Object, notifications: Array[0], routing: Object, zones: Object, zoneAnalytics: Object, zoneDnsRecords: Object, 4 more… }compiled.js:75337:31
18:36:46.100  action Object { type: "ZONE_FETCH_SETTINGS" }compiled.js:75341:28
18:36:46.101  next state Object { activeZone: Object, app: Object, config: Object, intl: Object, user: Object, notifications: Array[0], routing: Object, zones: Object, zoneAnalytics: Object, zoneDnsRecords: Object, 4 more… }compiled.js:75349:31
18:36:46.113 %c action @ 18:36:46.105 ZONE_FETCH_ANALYTICS  color: #000000;compiled.js:75323
18:36:46.113  prev state Object { activeZone: Object, app: Object, config: Object, intl: Object, user: Object, notifications: Array[0], routing: Object, zones: Object, zoneAnalytics: Object, zoneDnsRecords: Object, 4 more… }compiled.js:75337:31
18:36:46.115  action Object { type: "ZONE_FETCH_ANALYTICS" }compiled.js:75341:28
18:36:46.115  next state Object { activeZone: Object, app: Object, config: Object, intl: Object, user: Object, notifications: Array[0], routing: Object, zones: Object, zoneAnalytics: Object, zoneDnsRecords: Object, 4 more… }compiled.js:75349:31
18:36:49.143 %c action @ 18:36:49.121 PLUGIN_SETTINGS_FETCH_SUCCESS  color: #000000;compiled.js:75323
18:36:49.144  prev state Object { activeZone: Object, app: Object, config: Object, intl: Object, user: Object, notifications: Array[0], routing: Object, zones: Object, zoneAnalytics: Object, zoneDnsRecords: Object, 4 more… }compiled.js:75337:31
18:36:49.148  action Object { type: "PLUGIN_SETTINGS_FETCH_SUCCESS", zoneId: "315589789f01e4c906340ae9855e57eb", setting: Array[5] }compiled.js:75341:28
18:36:49.149  next state Object { activeZone: Object, app: Object, config: Object, intl: Object, user: Object, notifications: Array[0], routing: Object, zones: Object, zoneAnalytics: Object, zoneDnsRecords: Object, 4 more… }compiled.js:75349:31
18:36:49.993 When merging two 315589789f01e4c906340ae9855e57eb, found unequal data in their "id" values. Using the earlier value. 257b0b40a9f27cb20248a7bc4c7b64d7 f6095033ebef851c74a97263d71cc100compiled.js:27324:5
18:36:49.994 When merging two 315589789f01e4c906340ae9855e57eb, found unequal data in their "type" values. Using the earlier value. A MXcompiled.js:27324:5
18:36:49.994 When merging two 315589789f01e4c906340ae9855e57eb, found unequal data in their "content" values. Using the earlier value. 158.106.130.219 foo.barcompiled.js:27324:5
18:36:49.995 When merging two 315589789f01e4c906340ae9855e57eb, found unequal data in their "proxiable" values. Using the earlier value. true falsecompiled.js:27324:5
18:36:49.995 When merging two 315589789f01e4c906340ae9855e57eb, found unequal data in their "proxied" values. Using the earlier value. true falsecompiled.js:27324:5
18:36:49.996 When merging two 315589789f01e4c906340ae9855e57eb, found unequal data in their "modified_on" values. Using the earlier value. 2016-04-18T12:19:18.136683Z 2015-07-29T11:33:10.290034Zcompiled.js:27324:5
18:36:49.996 When merging two 315589789f01e4c906340ae9855e57eb, found unequal data in their "created_on" values. Using the earlier value. 2016-04-18T12:19:18.136683Z 2015-07-29T11:33:10.290034Zcompiled.js:27324:5
18:36:49.997 When merging two 315589789f01e4c906340ae9855e57eb, found unequal data in their "meta" values. Using the earlier value. Object { auto_added: false } Object { auto_added: true }compiled.js:27324:5
18:36:49.998 When merging two 315589789f01e4c906340ae9855e57eb, found unequal data in their "id" values. Using the earlier value. 257b0b40a9f27cb20248a7bc4c7b64d7 1a6fde7f4a61b42a8d4f126fa4435d07compiled.js:27324:5
18:36:49.998 When merging two 315589789f01e4c906340ae9855e57eb, found unequal data in their "type" values. Using the earlier value. A TXTcompiled.js:27324:5
18:36:49.999 When merging two 315589789f01e4c906340ae9855e57eb, found unequal data in their "content" values. Using the earlier value. 158.106.130.219 v=spf1 a mx include:foo.bar ~allcompiled.js:27324:5
18:36:49.999 When merging two 315589789f01e4c906340ae9855e57eb, found unequal data in their "proxiable" values. Using the earlier value. true falsecompiled.js:27324:5
18:36:49.999 When merging two 315589789f01e4c906340ae9855e57eb, found unequal data in their "proxied" values. Using the earlier value. true falsecompiled.js:27324:5
18:36:50.000 When merging two 315589789f01e4c906340ae9855e57eb, found unequal data in their "modified_on" values. Using the earlier value. 2016-04-18T12:19:18.136683Z 2016-04-18T18:06:35.165818Zcompiled.js:27324:5
18:36:50.000 When merging two 315589789f01e4c906340ae9855e57eb, found unequal data in their "created_on" values. Using the earlier value. 2016-04-18T12:19:18.136683Z 2016-04-18T18:06:35.165818Zcompiled.js:27324:5
18:36:50.021 %c action @ 18:36:49.991 DNS_RECORD_FETCH_LIST_SUCCESS  color: #000000;compiled.js:75323
18:36:50.021  prev state Object { activeZone: Object, app: Object, config: Object, intl: Object, user: Object, notifications: Array[0], routing: Object, zones: Object, zoneAnalytics: Object, zoneDnsRecords: Object, 4 more… }compiled.js:75337:31
18:36:50.023  action Object { type: "DNS_RECORD_FETCH_LIST_SUCCESS", zoneId: "315589789f01e4c906340ae9855e57eb", dnsRecords: Array[17] }compiled.js:75341:28
18:36:50.024  next state Object { activeZone: Object, app: Object, config: Object, intl: Object, user: Object, notifications: Array[0], routing: Object, zones: Object, zoneAnalytics: Object, zoneDnsRecords: Object, 4 more… }compiled.js:75349:31
18:36:50.154 %c action @ 18:36:50.141 ZONES_RAILGUNS_FETCH_ALL_SUCCESS  color: #000000;compiled.js:75323
18:36:50.154  prev state Object { activeZone: Object, app: Object, config: Object, intl: Object, user: Object, notifications: Array[0], routing: Object, zones: Object, zoneAnalytics: Object, zoneDnsRecords: Object, 4 more… }compiled.js:75337:31
18:36:50.156  action Object { type: "ZONES_RAILGUNS_FETCH_ALL_SUCCESS", zoneId: "315589789f01e4c906340ae9855e57eb", zoneRailguns: Array[0] }compiled.js:75341:28
18:36:50.156  next state Object { activeZone: Object, app: Object, config: Object, intl: Object, user: Object, notifications: Array[0], routing: Object, zones: Object, zoneAnalytics: Object, zoneDnsRecords: Object, 4 more… }compiled.js:75349:31
18:36:50.247 Only a single Gateway can be rendered at a time into a GatewayDest.You rendered multiple into "modal"compiled.js:47197:7
18:36:50.254 %c action @ 18:36:50.215 ZONE_FETCH_SETTINGS_SUCCESS  color: #000000;compiled.js:75323
18:36:50.255  prev state Object { activeZone: Object, app: Object, config: Object, intl: Object, user: Object, notifications: Array[0], routing: Object, zones: Object, zoneAnalytics: Object, zoneDnsRecords: Object, 4 more… }compiled.js:75337:31
18:36:50.257  action Object { type: "ZONE_FETCH_SETTINGS_SUCCESS", zoneId: "315589789f01e4c906340ae9855e57eb", zoneSettings: Array[38] }compiled.js:75341:28
18:36:50.258  next state Object { activeZone: Object, app: Object, config: Object, intl: Object, user: Object, notifications: Array[0], routing: Object, zones: Object, zoneAnalytics: Object, zoneDnsRecords: Object, 4 more… }compiled.js:75349:31
18:36:50.297 %c action @ 18:36:50.274 ZONE_FETCH_ANALYTICS_SUCCESS  color: #000000;compiled.js:75323
18:36:50.298  prev state Object { activeZone: Object, app: Object, config: Object, intl: Object, user: Object, notifications: Array[0], routing: Object, zones: Object, zoneAnalytics: Object, zoneDnsRecords: Object, 4 more… }compiled.js:75337:31
18:36:50.300  action Object { type: "ZONE_FETCH_ANALYTICS_SUCCESS", zoneId: "315589789f01e4c906340ae9855e57eb", zoneAnalytics: Object }compiled.js:75341:28
18:36:50.300  next state Object { activeZone: Object, app: Object, config: Object, intl: Object, user: Object, notifications: Array[0], routing: Object, zones: Object, zoneAnalytics: Object, zoneDnsRecords: Object, 4 more… }compiled.js:75349:31

So as you can see, it takes 8 seconds to actually see the options for me.

If this cannot be sped up, maybe a loader should be used until everything is loaded. But I wonder, can't you load the tabs async and on demand? Say, load the main tab items then preload the next tab or load it when the user clicks on it.

Class 'CF\WordPress\Hooks' not found

Hello!

This plugin suddenly started throwing an error. I'm installing it via Composer on Heroku.

Plugin version: 3.3.2
PHP version: 7.2.1
Composer version: 1.6.0

I'm getting the following error:

Class 'CF\WordPress\Hooks' not found

screen shot 2018-01-05 at 12 24 30 pm

simplyadmire submodule missing

C:\Users\xmr\Desktop\Cloudflare-WordPress>git submodule init
fatal: No url found for submodule path 'vendor/simplyadmire/composer-plugins' in .gitmodules

It seems .gitmodules is missing in 46b721f

Is that even needed? Tests seem to pass.

/CC @jwineman @thellimist

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.