forked from cloudflare/Cloudflare-WordPress
-
-
Notifications
You must be signed in to change notification settings - Fork 0
/
cloudflare.loader.php
119 lines (94 loc) · 4.25 KB
/
cloudflare.loader.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
<?php
require_once __DIR__.'/vendor/autoload.php';
use CloudFlare\IpRewrite;
// Exit if accessed directly
if (!defined('ABSPATH')) {
exit;
}
// Rewrites Cloudflare IP
try {
$ipRewrite = new IpRewrite();
$isCf = $ipRewrite->isCloudFlare();
if ($isCf) {
// Fixes Flexible SSL
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') {
$_SERVER['HTTPS'] = 'on';
}
// Rewrite Cloudflare IPs when the plugin is loaded,
// Doing this later in the plugin lifecycle will not update the IPs correctly
add_action('plugins_loaded', function () {
$_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_CF_CONNECTING_IP'];
$_SERVER['HTTP_X_FORWARDED_FOR'] = $_SERVER['HTTP_CF_CONNECTING_IP'];
}, 1);
}
} catch (\RuntimeException $e) {
error_log($e->getMessage());
}
// Initialize Hooks class which contains WordPress hook functions
$cloudflareHooks = new \CF\WordPress\Hooks();
add_action('plugins_loaded', array($cloudflareHooks, 'getCloudflareRequestJSON'));
// Enable HTTP2 Server Push
if (defined('CLOUDFLARE_HTTP2_SERVER_PUSH_ACTIVE') && CLOUDFLARE_HTTP2_SERVER_PUSH_ACTIVE && !is_admin()) {
add_action('init', array($cloudflareHooks, 'http2ServerPushInit'));
}
add_action('init', array($cloudflareHooks, 'initAutomaticPlatformOptimization'));
if (is_admin()) {
//Register proxy AJAX endpoint
add_action('wp_ajax_cloudflare_proxy', array($cloudflareHooks, 'initProxy'));
//Add CloudFlare Plugin homepage to admin settings menu
add_action('admin_menu', array($cloudflareHooks, 'cloudflareConfigPage'));
//Add CloudFlare Plugin homepage to admin settings menu
add_action('plugin_action_links_cloudflare/cloudflare.php', array($cloudflareHooks, 'pluginActionLinks'));
// Load Activation Script
register_activation_hook(CLOUDFLARE_PLUGIN_DIR.'cloudflare.php', array($cloudflareHooks, 'activate'));
// Load Deactivation Script
register_deactivation_hook(CLOUDFLARE_PLUGIN_DIR.'cloudflare.php', array($cloudflareHooks, 'deactivate'));
}
// Load Automatic Cache Purge
$cloudflarePurgeEverythingActions = array(
'autoptimize_action_cachepurged', // Compat with https://wordpress.org/plugins/autoptimize
'switch_theme', // Switch theme
'customize_save_after' // Edit theme
);
$cloudflarePurgeEverythingActions = apply_filters('cloudflare_purge_everything_actions', $cloudflarePurgeEverythingActions);
foreach ($cloudflarePurgeEverythingActions as $action) {
add_action($action, array($cloudflareHooks, 'purgeCacheEverything'), PHP_INT_MAX);
}
/**
* You can filter the list of URLs that get purged by Cloudflare after a post is
* modified by implementing a filter for the "cloudflare_purge_by_url" hook.
*
* @Example:
*
* /**
* * @param array $urls A list of post related URLs
* * @param integer $post_id the post ID that was modified
* * /
* function your_cloudflare_url_filter($urls, $post_id) {
* // modify urls
* return $urls;
* }
*
* add_filter('cloudflare_purge_by_url', your_cloudflare_url_filter, 10, 2);
*/
$cloudflarePurgeURLActions = array(
'deleted_post', // Delete a post
'delete_attachment', // Delete an attachment - includes re-uploading
);
$cloudflarePurgeURLActions = apply_filters('cloudflare_purge_url_actions', $cloudflarePurgeURLActions);
foreach ($cloudflarePurgeURLActions as $action) {
add_action($action, array($cloudflareHooks, 'purgeCacheByRelevantURLs'), PHP_INT_MAX);
}
/**
* Register action to account for post status changes
* This includes
* - publish => publish transitions (editing a published post: no actual status change but the hook runs nevertheless)
* - manually publishing/unpublishing a post
* - WordPress automatically publishing a scheduled post at the appropriate time
*/
add_action('transition_post_status', array($cloudflareHooks, 'purgeCacheOnPostStatusChange'), PHP_INT_MAX, 3);
/**
* Register two new actions which account for comment status before purging cache
*/
add_action('transition_comment_status', array($cloudflareHooks, 'purgeCacheOnCommentStatusChange'), PHP_INT_MAX, 3);
add_action('comment_post', array($cloudflareHooks, 'purgeCacheOnNewComment'), PHP_INT_MAX, 3);