PluginProbe ʕ •ᴥ•ʔ
NitroPack – Performance, Page Speed & Cache Plugin for Core Web Vitals, CDN & Image Optimization / 1.17.6
NitroPack – Performance, Page Speed & Cache Plugin for Core Web Vitals, CDN & Image Optimization v1.17.6
1.19.8 1.19.7 1.19.6 1.19.5 trunk 1.10.0 1.10.1 1.10.2 1.10.3 1.10.4 1.11.0 1.12.0 1.13.0 1.14.0 1.15.0 1.15.1 1.15.2 1.15.3 1.16.0 1.16.1 1.16.2 1.16.3 1.16.4 1.16.5 1.16.6 1.16.7 1.16.8 1.17.0 1.17.6 1.17.7 1.17.8 1.17.9 1.18.0 1.18.1 1.18.2 1.18.3 1.18.4 1.18.5 1.18.6 1.18.7 1.18.8 1.18.9 1.19.0 1.19.1 1.19.2 1.19.3 1.19.4 1.3.19 1.3.20 1.4.0 1.4.1 1.5.0 1.5.1 1.5.10 1.5.11 1.5.12 1.5.13 1.5.14 1.5.15 1.5.16 1.5.17 1.5.18 1.5.19 1.5.2 1.5.3 1.5.4 1.5.5 1.5.6 1.5.7 1.5.8 1.5.9 1.6.0 1.6.1 1.7.0 1.7.1 1.8.0 1.8.1 1.8.3 1.9.0 1.9.1 1.9.2
nitropack / main.php
nitropack Last commit date
classes 1 year ago languages 1 year ago nitropack-sdk 1 year ago view 1 year ago advanced-cache.php 2 years ago auth.json 1 year ago batcache-compat.php 4 years ago constants.php 1 year ago diagnostics.php 2 years ago functions.php 1 year ago helpers.php 3 years ago main.php 1 year ago readme.txt 1 year ago uninstall.php 1 year ago
main.php
285 lines
1 <?php
2 /*
3 Plugin Name: NitroPack
4 Plugin URI: https://nitropack.io/platform/wordpress
5 Description: Automatic optimization for site speed and Core Web Vitals. Use 35+ features, including Caching, image optimization, critical CSS, and Cloudflare CDN.
6 Version: 1.17.6
7 Author: NitroPack Inc.
8 Author URI: https://nitropack.io/
9 License: GPL2
10 License URI: https://www.gnu.org/licenses/gpl-2.0.html
11 Text Domain: nitropack
12 Domain Path: /languages
13 */
14
15 defined('ABSPATH') or die('No script kiddies please!');
16
17 if ( ! defined( 'NITROPACK_BASENAME' ) ) {
18 define( 'NITROPACK_BASENAME', plugin_basename( __FILE__ ) );
19 }
20
21 $np_basePath = dirname(__FILE__) . '/';
22 require_once $np_basePath . 'functions.php';
23 require_once $np_basePath . 'helpers.php';
24 require_once $np_basePath . 'diagnostics.php';
25
26 if (nitropack_is_wp_cli()) {
27 $nitropack_cli = new \NitroPack\CLI();
28 $nitropack_cli->init();
29 }
30
31 if (\NitroPack\Integration\Plugin\Ezoic::isActive()) {
32 if (!nitropack_is_optimizer_request()) {
33 // We need to serve the cached content after Ezoic's output buffering has started at plugins_loaded,0
34 add_action('plugins_loaded', function () {
35 add_filter('home_url', ['\NitroPack\Integration\Plugin\Ezoic', 'getHomeUrl']);
36 nitropack_handle_request("plugin-ezoic");
37 remove_filter('home_url', ['\NitroPack\Integration\Plugin\Ezoic', 'getHomeUrl']);
38 }, 1);
39 } else {
40 add_action('plugins_loaded', ['\NitroPack\Integration\Plugin\Ezoic', 'disable'], 1);
41 }
42 } else {
43 nitropack_handle_request("plugin");
44 }
45
46 add_filter('nitro_script_output', function ($script) {
47 $isPrefetch = isset($_SERVER['HTTP_SEC_FETCH_DEST'])
48 && $_SERVER['HTTP_SEC_FETCH_DEST'] === 'empty'
49 && (
50 (isset($_SERVER['HTTP_SEC_PURPOSE']) && $_SERVER['HTTP_SEC_PURPOSE'] === 'prefetch')
51 ||
52 (isset($_SERVER['HTTP_PURPOSE']) && $_SERVER['HTTP_PURPOSE'] === 'prefetch')
53 );
54
55 $canPrintScripts = !nitropack_is_amp_page() // Make sure we don't accidentally print a non-amp compatible script to an amp page
56 && (!isset($_SERVER['HTTP_SEC_FETCH_DEST']) || $_SERVER['HTTP_SEC_FETCH_DEST'] === 'document' || $isPrefetch)
57 && (!isset($_SERVER['HTTP_X_REQUESTED_WITH']) || strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) !== 'xmlhttprequest');
58
59 if ($canPrintScripts) {
60 return $script;
61 } else {
62 return "";
63 }
64 });
65 add_action('pre_post_update', 'nitropack_log_post_pre_update', 10, 3);
66 add_filter('woocommerce_rest_pre_insert_product_object', 'nitropack_log_product_pre_api_update', 10, 3);
67 add_action('set_object_terms', 'nitropack_sot', 10, 6);
68 add_action('transition_post_status', 'nitropack_handle_post_transition', 10, 3);
69 //add_action('publish_post', 'nitropack_handle_first_publish', 10, 1);
70 add_action('transition_comment_status', 'nitropack_handle_comment_transition', 10, 3);
71 add_action('comment_post', 'nitropack_handle_comment_post', 10, 2);
72 add_action('woocommerce_reduce_order_stock', 'custom_reduce_stock_after_order_placed');
73 add_action('switch_theme', 'nitropack_theme_handler');
74 register_shutdown_function('nitropack_execute_purges');
75 register_shutdown_function('nitropack_execute_invalidations');
76 register_shutdown_function('nitropack_execute_warmups');
77
78 add_action('woocommerce_product_object_updated_props', 'nitropack_handle_product_updates', 0, 2);
79 add_action('woocommerce_rest_insert_product', function ($post, $request, $creating) {
80 if (!$creating) {
81 nitropack_detect_changes_and_clean_post_cache($post);
82 }
83 }, 10, 3);
84 add_action('woocommerce_rest_insert_product_object', function ($product, $request, $creating) {
85 if (!$creating) {
86
87 $post = get_post($product->get_id());
88 if (!defined('NITROPACK_PURGE_CACHE')) {
89 nitropack_detect_changes_and_clean_post_cache($post);
90 }
91 }
92 }, 10, 3);
93
94 add_action('wcml_set_client_currency', function ($currency) {
95 setcookie('np_wc_currency', $currency, time() + (86400 * 7), "/");
96 });
97
98 if (nitropack_has_advanced_cache()) {
99 // Handle automated updates
100 if (!defined("NITROPACK_ADVANCED_CACHE_VERSION") || NITROPACK_VERSION != NITROPACK_ADVANCED_CACHE_VERSION) {
101 add_action('plugins_loaded', 'nitropack_install_advanced_cache');
102 }
103 }
104
105 add_action('wp_footer', 'nitropack_print_heartbeat_script');
106 add_action('admin_footer', 'nitropack_print_heartbeat_script');
107 add_action('get_footer', 'nitropack_print_heartbeat_script');
108
109 add_action('wp_footer', 'nitropack_print_cookie_handler_script');
110 add_action('admin_footer', 'nitropack_print_cookie_handler_script');
111 add_action('admin_footer', function () {
112 nitropack_setcookie("nitroCachedPage", 0, time() - 86400);
113 }); // Clear the nitroCachePage cookie
114 add_action('get_footer', 'nitropack_print_cookie_handler_script');
115
116 if (is_admin()) {
117 add_action('admin_menu', 'nitropack_menu');
118 add_action('admin_init', 'register_nitropack_settings');
119 add_action('admin_notices', 'nitropack_admin_notices');
120 add_action('network_admin_notices', 'nitropack_admin_notices');
121 add_action('wp_ajax_nitropack_purge_cache', 'nitropack_purge_cache');
122 add_action('wp_ajax_nitropack_invalidate_cache', 'nitropack_invalidate_cache');
123 add_action('wp_ajax_nitropack_clear_residual_cache', 'nitropack_clear_residual_cache');
124 add_action('wp_ajax_nitropack_verify_connect', 'nitropack_verify_connect_ajax');
125 add_action('wp_ajax_nitropack_disconnect', 'nitropack_disconnect');
126 add_action('wp_ajax_nitropack_set_optimization_mode', 'nitropack_set_optimization_mode');
127 add_action('wp_ajax_nitropack_test_compression_ajax', 'nitropack_test_compression_ajax');
128 add_action('wp_ajax_nitropack_set_compression_ajax', 'nitropack_set_compression_ajax');
129 add_action('wp_ajax_nitropack_set_can_editor_clear_cache', 'nitropack_set_can_editor_clear_cache');
130 add_action('wp_ajax_nitropack_set_stock_reduce_status', 'nitropack_set_stock_reduce_status');
131 add_action('wp_ajax_nitropack_set_auto_cache_purge_ajax', 'nitropack_set_auto_cache_purge_ajax');
132
133 add_action('wp_ajax_nitropack_set_cart_cache_ajax', 'nitropack_set_cart_cache_ajax');
134 add_action('wp_ajax_nitropack_set_bb_cache_purge_sync_ajax', 'nitropack_set_bb_cache_purge_sync_ajax');
135 add_action('wp_ajax_nitropack_set_cacheable_post_types', 'nitropack_set_cacheable_post_types');
136 add_action('wp_ajax_nitropack_enable_warmup', 'nitropack_enable_warmup');
137 add_action('wp_ajax_nitropack_disable_warmup', 'nitropack_disable_warmup');
138 add_action('wp_ajax_nitropack_warmup_stats', 'nitropack_warmup_stats');
139 add_action('wp_ajax_nitropack_estimate_warmup', 'nitropack_estimate_warmup');
140 add_action('wp_ajax_nitropack_run_warmup', 'nitropack_run_warmup');
141 add_action('wp_ajax_nitropack_purge_single_cache', 'nitropack_purge_single_cache');
142 add_action('wp_ajax_nitropack_invalidate_single_cache', 'nitropack_invalidate_single_cache');
143 add_action('wp_ajax_nitropack_purge_entire_cache', 'nitropack_purge_entire_cache');
144 add_action('wp_ajax_nitropack_dismiss_hosting_notice', 'nitropack_dismiss_hosting_notice');
145 add_action('wp_ajax_nitropack_dismiss_woocommerce_notice', 'nitropack_dismiss_woocommerce_notice');
146 add_action('wp_ajax_nitropack_reconfigure_webhooks', 'nitropack_reconfigure_webhooks');
147 add_action('wp_ajax_nitropack_generate_report', 'nitropack_generate_report'); //diag_ajax_hook
148 add_action('wp_ajax_nitropack_enable_safemode', 'nitropack_enable_safemode');
149 add_action('wp_ajax_nitropack_disable_safemode', 'nitropack_disable_safemode');
150 add_action('wp_ajax_nitropack_safemode_status', 'nitropack_safemode_status');
151 add_action('wp_ajax_nitropack_rml_notification', 'nitropack_rml_notification');
152 add_action('admin_init', 'nitropack_autooptimize_new_post_types_and_taxonomies');
153 add_action('wp_ajax_nitropack_dismiss_notice_forever', 'nitropack_dismiss_notice_forever');
154 add_action('activated_plugin', 'nitropack_upgrade_handler');
155 add_action('deactivated_plugin', 'nitropack_upgrade_handler');
156 add_action('upgrader_process_complete', 'nitropack_upgrade_handler');
157 add_action('update_option_nitropack-enableCompression', 'nitropack_handle_compression_toggle', 10, 2);
158 add_action('add_meta_boxes', 'nitropack_add_meta_box');
159 add_action('plugins_loaded', 'nitropack_offer_safemode');
160 add_filter('get_nitropack_notifications', 'nitropack_ignore_dismissed_notifications', 10, 2);
161
162 } else {
163 if (null !== $nitro = get_nitropack_sdk()) {
164 $GLOBALS["NitroPack.instance"] = $nitro;
165 if (get_option('nitropack-enableCompression') == 1) {
166 $nitro->enableCompression();
167 }
168 add_action('wp', 'nitropack_init');
169 }
170 }
171 /**
172 * This function is called when the plugin is activated/deactivated. Works for wp-cli as well.
173 */
174 register_activation_hook(__FILE__, 'nitropack_activate');
175 register_deactivation_hook(__FILE__, 'nitropack_deactivate');
176
177 function nitropack_menu() {
178 global $submenu;
179
180 add_menu_page(
181 'NitroPack Options',
182 'NitroPack',
183 'manage_options',
184 'nitropack',
185 'nitropack_options',
186 'dashicons-performance',
187 25
188 );
189 if (get_nitropack()->getDistribution() !== "oneclick") {
190 add_submenu_page(
191 'nitropack',
192 'System Report',
193 'System Report',
194 'manage_options',
195 'admin.php?page=nitropack&subpage=system-report'
196 );
197 }
198 if (isset($submenu['nitropack'])) {
199 foreach ($submenu['nitropack'] as &$item) {
200 if ($item[0] === 'NitroPack') {
201 $item[0] = 'Dashboard';
202 }
203 }
204 }
205
206 add_filter('plugin_action_links_' . plugin_basename(__FILE__), 'nitropack_action_links');
207 }
208
209 function nitropack_highlight_submenus($parent_file) {
210
211 global $submenu_file;
212
213 if (isset($_GET['page']) && isset($_GET['subpage'])) $submenu_file = 'admin.php?page=' . $_GET['page'] . '&subpage=' . $_GET['subpage'];
214
215 return $parent_file;
216 }
217 add_filter('parent_file', 'nitropack_highlight_submenus');
218
219 function nitropack_action_links($links) {
220 $nitroLinks = array(
221 '<a href="https://support.nitropack.io/hc/en-us/categories/360005122034-Frequently-Asked-Questions-FAQs-" target="_blank" rel="noopener noreferrer">FAQ</a>',
222 '<a href="https://support.nitropack.io/hc/en-us" target="_blank" rel="noopener noreferrer">Docs</a>',
223 '<a href="https://support.nitropack.io/hc/en-us/requests/new" target="_blank" rel="noopener noreferrer">Support</a>',
224 );
225
226 if (get_nitropack()->getDistribution() == "oneclick") {
227 $nitroLinks = apply_filters("nitropack_oneclick_action_links", $nitroLinks);
228 }
229
230 array_unshift($nitroLinks, '<a href="' . admin_url('admin.php?page=nitropack') . '" rel="noopener noreferrer">Settings</a>');
231
232 return array_merge($nitroLinks, $links);
233 }
234
235 add_action('init', function () {
236 if (current_user_can('manage_options')) {
237
238 // Enqueue admin bar menu custom stylesheet
239 add_action('wp_enqueue_scripts', 'enqueue_nitropack_admin_bar_menu_stylesheet');
240 add_action('admin_enqueue_scripts', 'enqueue_nitropack_admin_bar_menu_stylesheet');
241
242 // Enqueue admin menu custom javascript
243 add_action('wp_enqueue_scripts', 'nitropack_admin_bar_script');
244 add_action('admin_enqueue_scripts', 'nitropack_admin_bar_script');
245
246 // Add our admin menu bar entry
247 add_action('admin_bar_menu', 'nitropack_admin_bar_menu', PHP_INT_MAX - 10);
248 add_action('plugins_loaded', 'nitropack_plugin_notices'); // Run the checks early, because we need to set some headers. The results from the checks will be cached, so future calls will work as expected.
249
250 add_action('updated_option', 'nitropack_updated_option', ~PHP_INT_MAX, 3);
251
252 \NitroPack\PluginStateHandler::init();
253
254 add_action('in_admin_header', function () {
255 $screen = get_current_screen();
256 if ($screen->id === 'toplevel_page_nitropack') {
257 remove_all_actions('user_admin_notices');
258 remove_all_actions('admin_notices');
259 remove_all_actions('all_admin_notices');
260 }
261 }, 10);
262 }
263
264 (new \NitroPack\WordPress\Cron())->schedule_events();
265 });
266
267 /**
268 * Load text domain for translations
269 *
270 * @return void
271 */
272 function nitropack_load_textdomain() {
273 global $l10n;
274
275 $domain = 'nitropack';
276
277 if (isset($l10n[$domain])) {
278 return;
279 }
280
281 load_plugin_textdomain($domain, false, basename(dirname(__FILE__)) . '/languages/');
282 }
283
284 add_action('plugins_loaded', 'nitropack_load_textdomain');
285