PluginProbe ʕ •ᴥ•ʔ
NitroPack – Performance, Page Speed & Cache Plugin for Core Web Vitals, CDN & Image Optimization / 1.17.7
NitroPack – Performance, Page Speed & Cache Plugin for Core Web Vitals, CDN & Image Optimization v1.17.7
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 1 year 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.7
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 if ( nitropack_has_advanced_cache() ) {
95 // Handle automated updates
96 if ( ! defined( "NITROPACK_ADVANCED_CACHE_VERSION" ) || NITROPACK_VERSION != NITROPACK_ADVANCED_CACHE_VERSION ) {
97 add_action( 'plugins_loaded', 'nitropack_install_advanced_cache' );
98 }
99 }
100
101 add_action( 'wp_footer', 'nitropack_print_heartbeat_script' );
102 add_action( 'admin_footer', 'nitropack_print_heartbeat_script' );
103 add_action( 'get_footer', 'nitropack_print_heartbeat_script' );
104
105 add_action( 'wp_footer', 'nitropack_print_cookie_handler_script' );
106 add_action( 'admin_footer', 'nitropack_print_cookie_handler_script' );
107 add_action( 'admin_footer', function () {
108 nitropack_setcookie( "nitroCachedPage", 0, time() - 86400 );
109 } ); // Clear the nitroCachePage cookie
110 add_action( 'get_footer', 'nitropack_print_cookie_handler_script' );
111
112 if (is_admin()) {
113 add_action('admin_menu', 'nitropack_menu');
114 add_action('admin_init', 'register_nitropack_settings');
115
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_set_optimization_mode', 'nitropack_set_optimization_mode');
122 add_action('wp_ajax_nitropack_test_compression_ajax', 'nitropack_test_compression_ajax');
123 add_action('wp_ajax_nitropack_set_compression_ajax', 'nitropack_set_compression_ajax');
124 add_action('wp_ajax_nitropack_set_can_editor_clear_cache', 'nitropack_set_can_editor_clear_cache');
125 add_action('wp_ajax_nitropack_set_stock_reduce_status', 'nitropack_set_stock_reduce_status');
126 add_action('wp_ajax_nitropack_set_auto_cache_purge_ajax', 'nitropack_set_auto_cache_purge_ajax');
127 add_action('wp_ajax_nitropack_set_cart_cache_ajax', 'nitropack_set_cart_cache_ajax');
128 add_action('wp_ajax_nitropack_set_bb_cache_purge_sync_ajax', 'nitropack_set_bb_cache_purge_sync_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
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
143 add_action('admin_init', 'nitropack_autooptimize_new_post_types_and_taxonomies');
144 add_action('activated_plugin', 'nitropack_upgrade_handler');
145 add_action('deactivated_plugin', 'nitropack_upgrade_handler');
146 add_action('upgrader_process_complete', 'nitropack_upgrade_handler');
147 add_action('update_option_nitropack-enableCompression', 'nitropack_handle_compression_toggle', 10, 2);
148 add_action('add_meta_boxes', 'nitropack_add_meta_box');
149
150 add_filter('get_nitropack_notifications', 'nitropack_ignore_dismissed_notifications', 10, 2);
151
152 } else {
153 if ( null !== $nitro = get_nitropack_sdk() ) {
154 $GLOBALS["NitroPack.instance"] = $nitro;
155 if ( get_option( 'nitropack-enableCompression' ) == 1 ) {
156 $nitro->enableCompression();
157 }
158 add_action( 'wp', 'nitropack_init' );
159 }
160 }
161 /**
162 * This function is called when the plugin is activated/deactivated. Works for wp-cli as well.
163 */
164 register_activation_hook( __FILE__, 'nitropack_activate' );
165 register_deactivation_hook( __FILE__, 'nitropack_deactivate' );
166
167 function nitropack_menu() {
168 global $submenu;
169
170 add_menu_page(
171 'NitroPack Options',
172 'NitroPack',
173 'manage_options',
174 'nitropack',
175 'nitropack_options',
176 'dashicons-performance',
177 25
178 );
179 if ( get_nitropack()->getDistribution() !== "oneclick" ) {
180 add_submenu_page(
181 'nitropack',
182 'System Report',
183 'System Report',
184 'manage_options',
185 'admin.php?page=nitropack&subpage=system-report'
186 );
187 }
188 if ( isset( $submenu['nitropack'] ) ) {
189 foreach ( $submenu['nitropack'] as &$item ) {
190 if ( $item[0] === 'NitroPack' ) {
191 $item[0] = 'Dashboard';
192 }
193 }
194 }
195
196 add_filter( 'plugin_action_links_' . plugin_basename( __FILE__ ), 'nitropack_action_links' );
197 }
198
199 function nitropack_highlight_submenus( $parent_file ) {
200
201 global $submenu_file;
202
203 if ( isset( $_GET['page'] ) && isset( $_GET['subpage'] ) )
204 $submenu_file = 'admin.php?page=' . $_GET['page'] . '&subpage=' . $_GET['subpage'];
205
206 return $parent_file;
207 }
208 add_filter( 'parent_file', 'nitropack_highlight_submenus' );
209
210 function nitropack_action_links( $links ) {
211 $nitroLinks = array(
212 '<a href="https://support.nitropack.io/hc/en-us/categories/360005122034-Frequently-Asked-Questions-FAQs-" target="_blank" rel="noopener noreferrer">FAQ</a>',
213 '<a href="https://support.nitropack.io/hc/en-us" target="_blank" rel="noopener noreferrer">Docs</a>',
214 '<a href="https://support.nitropack.io/hc/en-us/requests/new" target="_blank" rel="noopener noreferrer">Support</a>',
215 );
216
217 if ( get_nitropack()->getDistribution() == "oneclick" ) {
218 $nitroLinks = apply_filters( "nitropack_oneclick_action_links", $nitroLinks );
219 }
220
221 array_unshift( $nitroLinks, '<a href="' . admin_url( 'admin.php?page=nitropack' ) . '" rel="noopener noreferrer">Settings</a>' );
222
223 return array_merge( $nitroLinks, $links );
224 }
225
226 add_action( 'init', function () {
227 if ( current_user_can( 'manage_options' ) ) {
228
229 // Enqueue admin bar menu custom stylesheet
230 add_action( 'wp_enqueue_scripts', 'enqueue_nitropack_admin_bar_menu_stylesheet' );
231 add_action( 'admin_enqueue_scripts', 'enqueue_nitropack_admin_bar_menu_stylesheet' );
232
233 // Enqueue admin menu custom javascript
234 add_action( 'wp_enqueue_scripts', 'nitropack_admin_bar_script' );
235 add_action( 'admin_enqueue_scripts', 'nitropack_admin_bar_script' );
236
237 // Add our admin menu bar entry
238 add_action( 'admin_bar_menu', 'nitropack_admin_bar_menu', PHP_INT_MAX - 10 );
239 //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.
240
241 add_action( 'updated_option', 'nitropack_updated_option', ~PHP_INT_MAX, 3 );
242
243 \NitroPack\PluginStateHandler::init();
244
245 add_action( 'in_admin_header', function () {
246 $screen = get_current_screen();
247 if ( $screen->id === 'toplevel_page_nitropack' ) {
248 remove_all_actions( 'user_admin_notices' );
249 remove_all_actions( 'admin_notices' );
250 remove_all_actions( 'all_admin_notices' );
251 }
252 }, 10 );
253 }
254 ( new \NitroPack\WordPress\Cron() )->schedule_events();
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