PluginProbe ʕ •ᴥ•ʔ
NitroPack – Performance, Page Speed & Cache Plugin for Core Web Vitals, CDN & Image Optimization / 1.17.0
NitroPack – Performance, Page Speed & Cache Plugin for Core Web Vitals, CDN & Image Optimization v1.17.0
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 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 2 years ago wp-cli.php 2 years ago
main.php
275 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.0
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 $np_basePath = dirname(__FILE__) . '/';
18 require_once $np_basePath . 'functions.php';
19 require_once $np_basePath . 'helpers.php';
20 require_once $np_basePath . 'diagnostics.php';
21
22 if (nitropack_is_wp_cli()) {
23 require_once $np_basePath . 'wp-cli.php';
24 }
25
26 if (\NitroPack\Integration\Plugin\Ezoic::isActive()) {
27 if (!nitropack_is_optimizer_request()) {
28 // We need to serve the cached content after Ezoic's output buffering has started at plugins_loaded,0
29 add_action('plugins_loaded', function () {
30 add_filter('home_url', ['\NitroPack\Integration\Plugin\Ezoic', 'getHomeUrl']);
31 nitropack_handle_request("plugin-ezoic");
32 remove_filter('home_url', ['\NitroPack\Integration\Plugin\Ezoic', 'getHomeUrl']);
33 }, 1);
34 } else {
35 add_action('plugins_loaded', ['\NitroPack\Integration\Plugin\Ezoic', 'disable'], 1);
36 }
37 } else {
38 nitropack_handle_request("plugin");
39 }
40
41 add_filter('nitro_script_output', function ($script) {
42 $isPrefetch = isset($_SERVER['HTTP_SEC_FETCH_DEST'])
43 && $_SERVER['HTTP_SEC_FETCH_DEST'] === 'empty'
44 && (
45 (isset($_SERVER['HTTP_SEC_PURPOSE']) && $_SERVER['HTTP_SEC_PURPOSE'] === 'prefetch')
46 ||
47 (isset($_SERVER['HTTP_PURPOSE']) && $_SERVER['HTTP_PURPOSE'] === 'prefetch')
48 );
49
50 $canPrintScripts = !nitropack_is_amp_page() // Make sure we don't accidentally print a non-amp compatible script to an amp page
51 && (!isset($_SERVER['HTTP_SEC_FETCH_DEST']) || $_SERVER['HTTP_SEC_FETCH_DEST'] === 'document' || $isPrefetch)
52 && (!isset($_SERVER['HTTP_X_REQUESTED_WITH']) || strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) !== 'xmlhttprequest');
53
54 if ($canPrintScripts) {
55 return $script;
56 } else {
57 return "";
58 }
59 });
60 add_action('pre_post_update', 'nitropack_log_post_pre_update', 10, 3);
61 add_filter('woocommerce_rest_pre_insert_product_object', 'nitropack_log_product_pre_api_update', 10, 3);
62 add_action('set_object_terms', 'nitropack_sot', 10, 6);
63 add_action('transition_post_status', 'nitropack_handle_post_transition', 10, 3);
64 //add_action('publish_post', 'nitropack_handle_first_publish', 10, 1);
65 add_action('transition_comment_status', 'nitropack_handle_comment_transition', 10, 3);
66 add_action('comment_post', 'nitropack_handle_comment_post', 10, 2);
67 add_action('woocommerce_reduce_order_stock', 'custom_reduce_stock_after_order_placed');
68 add_action('switch_theme', 'nitropack_theme_handler');
69 register_shutdown_function('nitropack_execute_purges');
70 register_shutdown_function('nitropack_execute_invalidations');
71 register_shutdown_function('nitropack_execute_warmups');
72
73 add_action('woocommerce_product_object_updated_props', 'nitropack_handle_product_updates', 0, 2);
74 add_action('woocommerce_rest_insert_product', function ($post, $request, $creating) {
75 if (!$creating) {
76 nitropack_detect_changes_and_clean_post_cache($post);
77 }
78 }, 10, 3);
79 add_action('woocommerce_rest_insert_product_object', function ($product, $request, $creating) {
80 if (!$creating) {
81
82 $post = get_post($product->get_id());
83 if (!defined('NITROPACK_PURGE_CACHE')) {
84 nitropack_detect_changes_and_clean_post_cache($post);
85 }
86 }
87 }, 10, 3);
88
89 add_action('wcml_set_client_currency', function ($currency) {
90 setcookie('np_wc_currency', $currency, time() + (86400 * 7), "/");
91 });
92
93 if (nitropack_has_advanced_cache()) {
94 // Handle automated updates
95 if (!defined("NITROPACK_ADVANCED_CACHE_VERSION") || NITROPACK_VERSION != NITROPACK_ADVANCED_CACHE_VERSION) {
96 add_action('plugins_loaded', 'nitropack_install_advanced_cache');
97 }
98 }
99
100 add_action('wp_footer', 'nitropack_print_heartbeat_script');
101 add_action('admin_footer', 'nitropack_print_heartbeat_script');
102 add_action('get_footer', 'nitropack_print_heartbeat_script');
103
104 add_action('wp_footer', 'nitropack_print_cookie_handler_script');
105 add_action('admin_footer', 'nitropack_print_cookie_handler_script');
106 add_action('admin_footer', function () {
107 nitropack_setcookie("nitroCachedPage", 0, time() - 86400);
108 }); // Clear the nitroCachePage cookie
109 add_action('get_footer', 'nitropack_print_cookie_handler_script');
110
111 if (is_admin()) {
112 add_action('admin_menu', 'nitropack_menu');
113 add_action('admin_init', 'register_nitropack_settings');
114 add_action('admin_notices', 'nitropack_admin_notices');
115 add_action('network_admin_notices', 'nitropack_admin_notices');
116 add_action('wp_ajax_nitropack_purge_cache', 'nitropack_purge_cache');
117 add_action('wp_ajax_nitropack_invalidate_cache', 'nitropack_invalidate_cache');
118 add_action('wp_ajax_nitropack_clear_residual_cache', 'nitropack_clear_residual_cache');
119 add_action('wp_ajax_nitropack_verify_connect', 'nitropack_verify_connect_ajax');
120 add_action('wp_ajax_nitropack_disconnect', 'nitropack_disconnect');
121 add_action('wp_ajax_nitropack_test_compression_ajax', 'nitropack_test_compression_ajax');
122 add_action('wp_ajax_nitropack_set_compression_ajax', 'nitropack_set_compression_ajax');
123 add_action('wp_ajax_nitropack_set_stock_reduce_status', 'nitropack_set_stock_reduce_status');
124 add_action('wp_ajax_nitropack_set_auto_cache_purge_ajax', 'nitropack_set_auto_cache_purge_ajax');
125 add_action('wp_ajax_nitropack_set_ajax_shortcodes_ajax', 'nitropack_set_ajax_shortcodes_ajax');
126 add_action('wp_ajax_nitropack_set_cart_cache_ajax', 'nitropack_set_cart_cache_ajax');
127 add_action('wp_ajax_nitropack_set_bb_cache_purge_sync_ajax', 'nitropack_set_bb_cache_purge_sync_ajax');
128 add_action('wp_ajax_nitropack_set_legacy_purge_ajax', 'nitropack_set_legacy_purge_ajax');
129 add_action('wp_ajax_nitropack_set_cacheable_post_types', 'nitropack_set_cacheable_post_types');
130 add_action('wp_ajax_nitropack_enable_warmup', 'nitropack_enable_warmup');
131 add_action('wp_ajax_nitropack_disable_warmup', 'nitropack_disable_warmup');
132 add_action('wp_ajax_nitropack_warmup_stats', 'nitropack_warmup_stats');
133 add_action('wp_ajax_nitropack_estimate_warmup', 'nitropack_estimate_warmup');
134 add_action('wp_ajax_nitropack_run_warmup', 'nitropack_run_warmup');
135 add_action('wp_ajax_nitropack_purge_single_cache', 'nitropack_purge_single_cache');
136 add_action('wp_ajax_nitropack_invalidate_single_cache', 'nitropack_invalidate_single_cache');
137 add_action('wp_ajax_nitropack_purge_entire_cache', 'nitropack_purge_entire_cache');
138 add_action('wp_ajax_nitropack_dismiss_hosting_notice', 'nitropack_dismiss_hosting_notice');
139 add_action('wp_ajax_nitropack_dismiss_woocommerce_notice', 'nitropack_dismiss_woocommerce_notice');
140 add_action('wp_ajax_nitropack_reconfigure_webhooks', 'nitropack_reconfigure_webhooks');
141 add_action('wp_ajax_nitropack_generate_report', 'nitropack_generate_report'); //diag_ajax_hook
142 add_action('wp_ajax_nitropack_enable_safemode', 'nitropack_enable_safemode');
143 add_action('wp_ajax_nitropack_disable_safemode', 'nitropack_disable_safemode');
144 add_action('wp_ajax_nitropack_safemode_status', 'nitropack_safemode_status');
145 add_action('wp_ajax_nitropack_rml_notification', 'nitropack_rml_notification');
146 add_action('admin_init', 'nitropack_autooptimize_new_post_types_and_taxonomies');
147 add_action('wp_ajax_nitropack_dismiss_notice_forever', 'nitropack_dismiss_notice_forever');
148 add_action('activated_plugin', 'nitropack_upgrade_handler');
149 add_action('deactivated_plugin', 'nitropack_upgrade_handler');
150 add_action('upgrader_process_complete', 'nitropack_upgrade_handler');
151 add_action('update_option_nitropack-enableCompression', 'nitropack_handle_compression_toggle', 10, 2);
152 add_action('add_meta_boxes', 'nitropack_add_meta_box');
153 add_action('plugins_loaded', 'nitropack_offer_safemode');
154
155 add_filter('get_nitropack_notifications', 'nitropack_ignore_dismissed_notifications', 10, 2);
156
157 register_activation_hook(__FILE__, 'nitropack_activate');
158 register_deactivation_hook(__FILE__, 'nitropack_deactivate');
159 } else {
160 if (null !== $nitro = get_nitropack_sdk()) {
161 $GLOBALS["NitroPack.instance"] = $nitro;
162 if (get_option('nitropack-enableCompression') == 1) {
163 $nitro->enableCompression();
164 }
165 add_action('wp', 'nitropack_init');
166 }
167 }
168
169 function nitropack_menu() {
170 global $submenu;
171
172 add_menu_page(
173 'NitroPack Options',
174 'NitroPack',
175 'manage_options',
176 'nitropack',
177 'nitropack_options',
178 'dashicons-performance',
179 25
180 );
181 if (get_nitropack()->getDistribution() !== "oneclick") {
182 add_submenu_page(
183 'nitropack',
184 'System Report',
185 'System Report',
186 'manage_options',
187 'admin.php?page=nitropack&subpage=system-report'
188 );
189 }
190 if (isset($submenu['nitropack'])) {
191 foreach ($submenu['nitropack'] as &$item) {
192 if ($item[0] === 'NitroPack') {
193 $item[0] = 'Dashboard';
194 }
195 }
196 }
197
198 add_filter('plugin_action_links_' . plugin_basename(__FILE__), 'nitropack_action_links');
199 }
200
201 function nitropack_highlight_submenus($parent_file) {
202
203 global $submenu_file;
204
205 if (isset($_GET['page']) && isset($_GET['subpage'])) $submenu_file = 'admin.php?page=' . $_GET['page'] . '&subpage=' . $_GET['subpage'];
206
207 return $parent_file;
208 }
209 add_filter('parent_file', 'nitropack_highlight_submenus');
210
211 function nitropack_action_links($links) {
212 $nitroLinks = array(
213 '<a href="https://support.nitropack.io/hc/en-us/categories/360005122034-Frequently-Asked-Questions-FAQs-" target="_blank" rel="noopener noreferrer">FAQ</a>',
214 '<a href="https://support.nitropack.io/hc/en-us" target="_blank" rel="noopener noreferrer">Docs</a>',
215 '<a href="https://support.nitropack.io/hc/en-us/requests/new" target="_blank" rel="noopener noreferrer">Support</a>',
216 );
217
218 if (get_nitropack()->getDistribution() == "oneclick") {
219 $nitroLinks = apply_filters("nitropack_oneclick_action_links", $nitroLinks);
220 }
221
222 array_unshift($nitroLinks, '<a href="' . admin_url('admin.php?page=nitropack') . '" rel="noopener noreferrer">Settings</a>');
223
224 return array_merge($nitroLinks, $links);
225 }
226
227 add_action('init', function () {
228 if (current_user_can('manage_options')) {
229
230 // Enqueue admin bar menu custom stylesheet
231 add_action('wp_enqueue_scripts', 'enqueue_nitropack_admin_bar_menu_stylesheet');
232 add_action('admin_enqueue_scripts', 'enqueue_nitropack_admin_bar_menu_stylesheet');
233
234 // Enqueue admin menu custom javascript
235 add_action('wp_enqueue_scripts', 'nitropack_admin_bar_script');
236 add_action('admin_enqueue_scripts', 'nitropack_admin_bar_script');
237
238 // Add our admin menu bar entry
239 add_action('admin_bar_menu', 'nitropack_admin_bar_menu', PHP_INT_MAX - 10);
240 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.
241
242 add_action('updated_option', 'nitropack_updated_option', ~PHP_INT_MAX, 3);
243
244 \NitroPack\PluginStateHandler::init();
245
246 add_action('in_admin_header', function () {
247 $screen = get_current_screen();
248 if ($screen->id === 'toplevel_page_nitropack') {
249 remove_all_actions('user_admin_notices');
250 remove_all_actions('admin_notices');
251 remove_all_actions('all_admin_notices');
252 }
253 }, 10);
254 }
255 });
256
257 /**
258 * Load text domain for translations
259 *
260 * @return void
261 */
262 function nitropack_load_textdomain() {
263 global $l10n;
264
265 $domain = 'nitropack';
266
267 if (isset($l10n[$domain])) {
268 return;
269 }
270
271 load_plugin_textdomain($domain, false, basename(dirname(__FILE__)) . '/languages/');
272 }
273
274 add_action('plugins_loaded', 'nitropack_load_textdomain');
275